Пример #1
0
        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) { }
        }
Пример #2
0
        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);
        }
Пример #5
0
        BinaryPosition FindPositionByAlpariID(int AlpariID)
        {
            BinaryPosition pos = null;

            foreach (BinaryPosition p in OpenPositions)
            {
                if (p.AlpariID == AlpariID)
                {
                    pos = p;
                    break;
                }
            }



            return(pos);
        }
Пример #6
0
        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);
        }
Пример #7
0
 public BinaryPosition SendPosition(BinaryPosition pos)
 {
     return(SendPosition(pos.Symbol, pos.Type, pos.Amount, pos.OpenPrice, pos.LifeTimeMinutes, pos.OriginalID));
 }