/// <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); }