/// <summary>
        /// 取引履歴をスプレッドシートへ送信する
        /// </summary>
        /// <param name="bhc">送信するメッセージコンテナ 1つ</param>
        public static String PostBoResult(BoHistroyContainer bhc)
        {
            string ret = string.Empty;

            try
            {
                // 送信待ちでないものは終了 そのまま返す
                if (bhc.State != HistoryState.hsWaitPost)
                {
                    return(bhc.PostResultData);
                }

                SignalResult boResultSig = bhc.ResultSig;
                SignalOrder  boEntrySig  = bhc.Sig;

                // 送信用パラメータ文字列作成
                string postResultParam = string.Empty;

                postResultParam += "result=" + boResultSig.R_Result;                       // 結果
                postResultParam += "&pair=" + boResultSig.R_TradeBrand;                    // 通貨ペア
                postResultParam += "&rate=" + boResultSig.R_BidRate;                       // 入札レート
                postResultParam += "&bidTime=" + boResultSig.R_BidTime;                    // 入札時間
                postResultParam += "&judgeTime=" + boResultSig.R_JudgeTime;                // 判定時間
                postResultParam += "&state=Done";                                          // + boResultSig.R_State;             // ステータス Done固定
                postResultParam += "&judgeRate=" + boResultSig.R_JudgeRate;                // 判定レート
                postResultParam += "&bidPrice=" + boResultSig.R_BidPrice.Replace("¥", ""); // 入札金額
                postResultParam += "&payout=" + boResultSig.R_PayOut.Replace("¥", "");     // ペイアウト
                postResultParam += "&signalName=" + bhc.Sig.signalRoomName;                // シグナル名
                postResultParam += "&environment=" + bhc.Sig.getEnviromentNames();         // 環境の送信
                postResultParam += "&conditionPrice=" + boEntrySig.bidPrice;               // エントリー時の判断した時のレート価格

                // 部屋名のコンバート
                postResultParam += "&SignalName=DATA";

                //送信用コマンドを保持
                ret = bhc.PostURL_SpredSheet + postResultParam;

                Process cmd = new Process();
                cmd.StartInfo.FileName    = "PowerShell.exe";
                cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;                                  //PowerShellのWindowを立ち上げずに実行。
                cmd.StartInfo.Arguments   = @"curl '" + bhc.PostURL_SpredSheet + postResultParam + "'"; // 引数optionsをShellのコマンドとして渡す。
                cmd.Start();

                cmd.Close();

                return(ret);
            }
            catch (Exception e)
            {
                DebugPrint(e, "postBoResult");

                bhc.PostResultData = string.Empty;

                return(ret);
            }
        }
        /// <summary>
        /// 入札結果を取得し、終了のものが有れば、
        /// エントリーしたシグナル情報と照らし合わせて
        /// どのシグナルでエントリーしたものかをチェックして
        /// 格納する
        /// </summary>
        /// <returns></returns>
        public void getSignalResult(ref List <BoHistroyContainer> boHistroyContainers)
        {
            try
            {
                IsActivate();       // ハイロー画面へ

                // リストを取得
                IReadOnlyCollection <IWebElement> resultList = this.chrome.FindElementsByXPath("//*[@id='tradeActionsTableBody']/tr");

                for (int i = 0; i < resultList.Count(); i++)
                {
                    // 取引終了の結果があった場合
                    if (resultList.ElementAt(i).Text.Contains("取引終了"))
                    {
                        // 比較先 型を取る
                        SignalResult resSig = CommonControl.ConvBoResult(resultList.ElementAt(i).Text);

                        // すべての履歴コンテナと比較
                        for (int n = 0; n < boHistroyContainers.Count; n++)
                        {
                            // 比較元 入力シグナルコンテナ
                            BoHistroyContainer bhc = boHistroyContainers.ElementAt(n);

                            if (bhc.State != HistoryState.hsWaitResult)
                            {
                                continue;                                                               // シグナル結果待ちのもののみ比較対象とする
                            }
                            // 入札銘柄と時間が同じなら そのシグナルで入札した結果とし、googleに送信する
                            if (resSig.R_TradeBrand.Equals(bhc.Sig.tradeBrand) &&
                                DateTime.Parse(resSig.R_JudgeTime).Equals(DateTime.Parse(bhc.Sig.tradeTimeFrame)))
                            {
                                boHistroyContainers.ElementAt(n).ResultSig = resSig;
                                boHistroyContainers.ElementAt(n).State     = HistoryState.hsWaitPost;   // → Google送信待ち
                                break;
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                CommonControl.DebugPrint(e);
            }
        }
        /// <summary>
        /// 結果用の型(クラス)に変換する
        /// </summary>
        /// <param name="boResultMsg"></param>
        public static SignalResult ConvBoResult(string boResultMsg)
        {
            SignalResult sigR = new SignalResult();     // 返り値用

            try
            {
                sigR.R_RawString = boResultMsg;                             // 生データ

                String[] tmp    = boResultMsg.Split(new string[] { "\r\n" }, StringSplitOptions.None);
                String[] tmpSub = tmp[2].Split(new string[] { " " }, StringSplitOptions.None);

                sigR.R_TradeBrand = tmp[0];                                 // ◆通貨ペア
                sigR.R_BidRate    = tmp[1];                                 // ◆入札レート

                if (tmp.Count() > 2)
                {
                    if (tmpSub.Count() > 0)
                    {
                        sigR.R_BidTime = tmpSub[0];                         // ◆入札時間
                    }
                    if (tmpSub.Count() > 1)
                    {
                        sigR.R_JudgeTime = tmpSub[1];                       // ◆判定時間
                    }
                    if (tmpSub.Count() > 2)
                    {
                        sigR.R_State = tmpSub[2];                           // ◆ステータス
                    }
                    if (tmpSub.Count() > 3)
                    {
                        sigR.R_JudgeRate = tmpSub[3];                       // ◆判定レート
                    }
                    if (tmpSub.Count() > 4)
                    {
                        sigR.R_BidPrice = tmpSub[4];                        // ◆入札金額
                    }
                    if (tmpSub.Count() > 5)
                    {
                        sigR.R_PayOut = tmpSub[5];                          // ◆ペイアウト
                    }
                }

                // ◆結果判定
                if (sigR.R_PayOut.Length != 0)
                {
                    // ペイアウト結果が取得できているとき
                    // ペイアウトが2文字(\0)以上?
                    sigR.R_Result = sigR.R_PayOut.Length > 2 ? "[WIN]" : "[LOSE]";
                }
                else
                {
                    sigR.R_Result = "[UNKOWN]";
                }                                       // 判定不能

                // ◆HighLow どっちか
                // HighまたはLowどっちで入れたか True & True 又は False & False の時Highとなる
                //                結果がWINか?             XOR                  入札レート < 結果レート
                sigR.R_Arrow = sigR.R_Result.Equals("[WIN]") ^ double.Parse(sigR.R_BidRate) < double.Parse(sigR.R_JudgeRate) ? "Low" : "High";
            }
            catch (Exception e)
            {
                // コンバートに失敗
                DebugPrint(e, "ConvBoResult");
                //throw e;
            }

            return(sigR);
        }