void OnOptionInfoEvent(dynamic Data) { try { int AlpariID = (int)Data.body.id; int ResultID = (int)Data.body.result_id; BinaryPosition pos = FindPositionByAlpariID(AlpariID); if (ResultID == TradeSettings.OptionResultsDictionary["win"]) { pos.ResultIsWin = true; } else if (ResultID == TradeSettings.OptionResultsDictionary["loss"]) { pos.ResultIsLoss = true; } else if (ResultID == TradeSettings.OptionResultsDictionary["loss"]) { pos.ResultIsParity = true; } pos.Status = "Closed"; pos.ClosePrice = (double)Data.body.expiry_rate.value; pos.CloseTime = DateTime.UtcNow; BinaryPosition.Export(pos, ClosedPositionsFolder + "/" + pos.OriginalID); OpenPositions.Remove(pos); } catch (Exception e) { } }
public void ReadAndSendPositions() { string Folder = RequestsToSendFolder; try { string[] files = Directory.GetFiles(Folder); foreach (string filename in files) { try { BinaryPosition NewPos = BinaryPosition.Import(filename); BinaryPosition OpenPos = SendPosition(NewPos); BinaryPosition.Export(OpenPos, RequestResultsFolder + "/" + OpenPos.OriginalID); } catch (Exception) { try { File.Delete(filename); } catch (Exception) { } continue; } } } catch (Exception) { } }
public static void Export(BinaryPosition pos, string Filename) { try { System.Xml.Serialization.XmlSerializer writer = new System.Xml.Serialization.XmlSerializer(typeof(List <BinaryPosition>)); System.IO.FileStream file = System.IO.File.Create(Filename); writer.Serialize(file, pos); file.Close(); } catch (Exception) { } }
public static BinaryPosition Import(string Filename) { BinaryPosition pos = null; try { System.Xml.Serialization.XmlSerializer reader = new System.Xml.Serialization.XmlSerializer(typeof(List <BinaryPosition>)); System.IO.StreamReader file = new System.IO.StreamReader(Filename); pos = (BinaryPosition)reader.Deserialize(file); file.Close(); } catch (Exception e) { } return(pos); }
BinaryPosition FindPositionByAlpariID(int AlpariID) { BinaryPosition pos = null; foreach (BinaryPosition p in OpenPositions) { if (p.AlpariID == AlpariID) { pos = p; break; } } return(pos); }
public BinaryPosition SendPosition(string Symbol, string PosType, double Amount, double Price, int LifeTimeMinutes, string OriginalID = null) { if (NewPositionInProgress) { DebugLog.WriteLine("SendPosition error: Another position opening in progress"); return(null); } NewPositionInProgress = true; NewPositionError = false; NewPositionErrorMessage = string.Empty; NewPositionOpenPrice = 0; NewPositionResponseReceived = false; NewPositionID = 0; int WinPercent = -1; int LossPercent = -1; int ParityPercent = -1; Timeframe tf = null; Symbol s = null; try { tf = TradeSettings.GetTimeframeByMinutes(LifeTimeMinutes); s = TradeSettings.GetSymbolByName(Symbol); WinPercent = s.PayoutWinByTimeframeID[tf.TimeframeID]; LossPercent = TradeSettings.PayoutLose; ParityPercent = TradeSettings.PayoutParity; } catch (Exception e) { DebugLog.WriteLine("SendPosition error: position is not supported | " + e.Message); NewPositionInProgress = false; return(null); } int ts = DateTimeToTimestamp(DateTime.UtcNow); string client_lts = ts.ToString() + "000"; string rate_lts = ts.ToString() + "000"; if (s.AssetID <= 0 || GetDirectionID(PosType) <= 0 || tf.TimeframeID <= 0) { DebugLog.WriteLine("SendPosition error: position is not supported"); NewPositionInProgress = false; return(null); } string Request = "{\"type\":\"REQUEST\",\"action\":\"option/buy\",\"body\":{\"option_type_id\":\"1\",\"direction_id\":" + GetDirectionID(PosType) + ",\"asset_id\":\"" + s.AssetID + "\",\"amount\":" + Amount + ",\"time_frame_id\":\"" + tf.TimeframeID + "\",\"win_percent\":" + WinPercent + ",\"loss_percent\":" + LossPercent + ",\"parity_percent\":" + ParityPercent + ",\"client_lts\":" + client_lts + ",\"rate_lts\":" + rate_lts + ",\"rate_value\":" + Price + ",\"forecast1\":" + Price + "},\"rid\":" + RequestID + "}"; bool res = SendRequest(Request); while (!NewPositionResponseReceived) { System.Threading.Thread.Sleep(1000); } BinaryPosition pos = new BinaryPosition(); pos.OpenTime = DateTime.UtcNow; pos.LifeTimeMinutes = LifeTimeMinutes; pos.OriginalID = OriginalID; pos.Symbol = Symbol; pos.Type = PosType; pos.AlpariID = NewPositionID; pos.OpenPrice = NewPositionOpenPrice; pos.PayoutWin = WinPercent; pos.PayoutLose = LossPercent; pos.PayoutParity = ParityPercent; if (NewPositionError) { DebugLog.WriteLine("Error opening position with OriginalID " + OriginalID + ": " + NewPositionErrorMessage); pos.Status = "Error"; } else { DebugLog.WriteLine("New position opened"); pos.Status = "Open"; OpenPositions.Add(pos); } NewPositionID = 0; NewPositionOpenPrice = 0; NewPositionInProgress = false; return(pos); }
public BinaryPosition SendPosition(BinaryPosition pos) { return(SendPosition(pos.Symbol, pos.Type, pos.Amount, pos.OpenPrice, pos.LifeTimeMinutes, pos.OriginalID)); }