Exemple #1
0
        public static void CorvergenceCheck(List <ProbaStruct> ZigZagCollectionMain, List <ProbaStruct> ZigZagCollectionOff,
                                            ProbaStruct NewZigZagValue, double converGap, double converPrice,
                                            DateTime time, ref ProbaStruct CorvergenceHandle, ref int convergence_counter,
                                            double gap, double RatioConver, ref List <Position> Position, object locker,
                                            ModelsAT.BrokerMT tradeTerminal, ref OpenPosition openpos, ILogger logger, string name, bool LoggNeeded)
        {
            if (ZigZagCollectionMain.Last().GapValue < NewZigZagValue.GapValue && ZigZagCollectionMain.Last().price < NewZigZagValue.price)
            {
                convergence_counter++;
                CorvergenceHandle.GapValue = converGap;
                CorvergenceHandle.price    = converPrice;
                CorvergenceHandle.time     = time;
                if (ZigZagCollectionOff.Count != 0)
                {
                    double R     = Math.Abs(NewZigZagValue.GapValue - gap);
                    double R1    = Math.Abs(NewZigZagValue.GapValue - ZigZagCollectionOff.Last().GapValue);
                    double Ratio = R / R1;

                    /* if (LoggNeeded)
                     *   logger.LogEvent(time, name + " Ratio: " + Ratio);
                     * if (RatioConver <= Ratio)
                     * {
                     *   if (Position.Count > 0)
                     *   {
                     *       lock (locker)
                     *       {
                     *           logger.LogEvent(time, name + " Аварийный выход с рынка");
                     *           tradeTerminal.ClosePosition(Position[0].index);
                     *           openpos = OpenPosition.NONE;
                     *       }
                     *       Position.Clear();
                     *   }
                     * }*/
                }
                //if (LoggNeeded)
                //    logger.LogEvent(time, name + " Медвежья конвергенция ");
            }
            else
            {
                convergence_counter = 0;
            }
        }
Exemple #2
0
        static void AddPositionVolumeAssist(ref LastPosition last_pos, double gap, double price, List <Position> Position,
                                            object locker, ModelsAT.BrokerMT tradeTerminal, ArbitrageTradeWF.OrderType order_type,
                                            ILogger logger, DateTime time, string name, bool LoggNeeded)
        {
            last_pos.gap   = gap;
            last_pos.price = price;
            int ind = Position.Last().index;

            lock (locker)
            {
                tradeTerminal.OpenOrder(order_type, ind);
            }
            Position.Add(new Processors.Position()
            {
                index = ind, value = price
            });
            if (LoggNeeded)
            {
                logger.LogEvent(time, name + " Увеличиваем объем позиции " + ind + " req price : " + price);
            }
        }
Exemple #3
0
        public static bool ClosePosition(bool fast_exit, List <Position> Position, ModelsAT.BrokerMT tradeTerminal, bool LongShort, double price, ref double all_profit,
                                         object locker, ILogger logger, DateTime time, string name, bool LoggNeeded)
        {
            if (Position.Count > 0)
            {
                lock (locker)
                {
                    if (LoggNeeded && fast_exit)
                    {
                        logger.LogEvent(time, name + " Аварийный выход с рынка");
                    }
                    tradeTerminal.ClosePosition(Position[0].index);
                    foreach (var item in Position)
                    {
                        string order;
                        double profit = 0;
                        if (!LongShort)
                        {
                            profit = item.value - price;
                            order  = "buy";
                        }
                        else
                        {
                            profit = price - item.value;
                            order  = "sell";
                        }
                        all_profit += profit;

                        if (LoggNeeded)
                        {
                            logger.LogEvent(time, name + " send " + order + " order " + item.index + " req price : " + price + " Profit: " + profit);
                        }
                    }
                }
                Position.Clear();
                return(true);
            }
            return(false);
        }
Exemple #4
0
 public static void AddPositionVolume_New(bool LongShort, List <ProbaStruct> MainZigZagCollection, List <ProbaStruct> OfZigZagCollection, double gap, double price,
                                          double ratio_exp, List <Position> Position, ref bool expand_position, object locker, ModelsAT.BrokerMT tradeTerminal,
                                          ILogger logger, DateTime time, string name, bool LoggNeeded)
 {
     if (expand_position)
     {
         double last_knee = Math.Abs(MainZigZagCollection.Last().GapValue - OfZigZagCollection.Last().GapValue);
         double temp_knee = Math.Abs(OfZigZagCollection.Last().GapValue - gap);
         double r_exp     = temp_knee / last_knee;
         if (r_exp >= ratio_exp)
         {
             if (LoggNeeded)
             {
                 logger.LogEvent(time, name + " Размер ratio_O " + r_exp);
             }
             int ind = Position.Last().index;
             lock (locker)
             {
                 if (!LongShort)
                 {
                     tradeTerminal.OpenOrder(ArbitrageTradeWF.OrderType.MKT_Sell, ind);
                 }
                 else
                 {
                     tradeTerminal.OpenOrder(ArbitrageTradeWF.OrderType.MKT_Buy, ind);
                 }
             }
             expand_position = false;
             if (LoggNeeded)
             {
                 logger.LogEvent(time, name + " Увеличиваем объем позиции " + ind + " req price : " + price);
             }
         }
     }
 }
Exemple #5
0
 public static void AddPositionVolume_Old(bool LongShort, ref LastPosition last_pos, double gap, double price, List <Position> Position,
                                          ref bool expand_position, object locker, ModelsAT.BrokerMT tradeTerminal, ILogger logger,
                                          DateTime time, string name, bool LoggNeeded)
 {
     if (expand_position)
     {
         if (!LongShort)
         {
             if (gap > last_pos.gap && price > last_pos.price)
             {
                 AddPositionVolumeAssist(ref last_pos, gap, price, Position, locker, tradeTerminal, ArbitrageTradeWF.OrderType.MKT_Sell, logger, time, name, LoggNeeded);
                 expand_position = false;
             }
         }
         else
         {
             if (gap < last_pos.gap && price < last_pos.price)
             {
                 AddPositionVolumeAssist(ref last_pos, gap, price, Position, locker, tradeTerminal, ArbitrageTradeWF.OrderType.MKT_Buy, logger, time, name, LoggNeeded);
                 expand_position = false;
             }
         }
     }
 }
Exemple #6
0
        public override bool Initialize(List <IProcessorInput> inputs, string parameters, ILogger logger)
        {
            ClosePositionStopTrade += Stop;
            if (Models.InputItemInteractivBrokerModel.IB == null)
            {
                return(false);
            }
            this.logger = logger;
            ParametersParser parser = CreateParser(parameters);

            zigzagid      = parser.GetInt("ZigZag_ID");
            zigzagidsmall = parser.GetInt("ZigZagSmall_ID");
            if (zigzagid < 0 || zigzagid > Model.Project.Outputs.Count)
            {
                return(false);
            }
            if (zigzagidsmall < 0 || zigzagidsmall > Model.Project.Outputs.Count)
            {
                return(false);
            }
            gappos = parser.GetInt("Gap");
            if (gappos < 0 || gappos > Model.Project.Outputs.Count)
            {
                return(false);
            }
            //Gap = Model.Project.Proccesors[gappos];
            //Gap.ProcessorAction += PositionHandler;
            //ZigZag = Model.Project.Proccesors[zigzagid];
            //ZigZag.ProcessorAction += EventHandler;
            MinValueSmall = new List <ProbaStruct>();
            MaxValueSmall = new List <ProbaStruct>();
            MinValueBig   = new List <ProbaStruct>();
            MaxValueBig   = new List <ProbaStruct>();
            PositionShort = new Position();
            PositionLong  = new Position();
            name          = parser.GetString("Name");
            ratio         = parser.GetDouble("Ratio");
            tradeTerminal = new ModelsAT.BrokerMT(parser.GetInt("tradeTerminalID"));
            tradeTerminal.setBrokerParam("Name", parser.GetString("ServerName"));
            tradeTerminal.SetServer();
            Size = parser.GetInt("Size");
            if (parser.GetInt("IsReal") == 1)
            {
                tradeTerminal.isReal = true;
            }
            if (parser.GetInt("Logg") == 1)
            {
                LoggNeeded = true;
            }
            else
            {
                LoggNeeded = false;
            }
            //if (divergence > size || divergence == 0) return false;
            openlongcloseshort          = false;
            openshortcloselong          = false;
            longlock                    = false;
            shortlock                   = false;
            profit_to_close             = parser.GetInt("TakeProfit") * Math.Pow(10, -Model.Project.Outputs[gappos].Digits);
            lose_to_close               = parser.GetInt("StopLoss") * Math.Pow(10, -Model.Project.Outputs[gappos].Digits);
            convergenceshort            = false;
            convergencelong             = false;
            divergenceshort             = false;
            divergencelong              = false;
            lastvalue                   = LastZigZagValue.NONE;
            all_profit                  = 0;
            openpos                     = OpenPosition.NONE;
            ConvergenMin                = new ProbaStruct();
            ConvergenMax                = new ProbaStruct();
            Model.OutputsInitializeEnd += InitializeHandler;
            Model.LoadSimulation       += LoadSec;
            return(true);
        }
Exemple #7
0
        public override bool Initialize(List <IProcessorInput> inputs, string parameters, ILogger logger)
        {
            ClosePositionStopTrade += Stop;
            if (Models.InputItemInteractivBrokerModel.IB == null)
            {
                return(false);
            }
            this.logger = logger;
            ParametersParser parser = CreateParser(parameters);

            zigzagid_1 = parser.GetInt("ZigZag_ID1");
            if (zigzagid_1 < 0 || zigzagid_1 > Model.Project.Outputs.Count)
            {
                return(false);
            }
            zigzagid_2 = parser.GetInt("ZigZag_ID2");
            if (zigzagid_2 < 0 || zigzagid_2 > Model.Project.Outputs.Count)
            {
                return(false);
            }
            zigzagid_2_2 = parser.GetInt("ZigZag_ID2_2");
            gappos       = parser.GetInt("Gap");
            if (gappos < 0 || gappos > Model.Project.Outputs.Count)
            {
                return(false);
            }
            int t_t = parser.GetInt("type");

            switch (t_t)
            {
            case (0):
                trader_type = TradeType.STANDART;
                break;

            case (1):
                trader_type = TradeType.IN_OUT;
                break;

            default:
                trader_type = TradeType.ONE_IN_TWO_OUT;
                break;
            }
            //Gap = Model.Project.Proccesors[gappos];
            //Gap.ProcessorAction += PositionHandler;
            //ZigZag = Model.Project.Proccesors[zigzagid];
            //ZigZag.ProcessorAction += EventHandler;
            divergenceOpen    = parser.GetInt("DivergenceOpen");
            divergenceClose   = parser.GetInt("DivergenceClose");
            convergen_counter = parser.GetInt("Convergence");
            if (divergenceOpen < 0 || divergenceClose < 0 || convergen_counter < 0)
            {
                return(false);
            }
            MinValueOpen_1    = new List <ProbaStruct>();
            MaxValueOpen_1    = new List <ProbaStruct>();
            MinValueClose_1   = new List <ProbaStruct>();
            MaxValueClose_1   = new List <ProbaStruct>();
            MinValueOpen_2    = new List <ProbaStruct>();
            MaxValueOpen_2    = new List <ProbaStruct>();
            MinValueClose_2   = new List <ProbaStruct>();
            MaxValueClose_2   = new List <ProbaStruct>();
            MinValueOpen_2_2  = new List <ProbaStruct>();
            MaxValueOpen_2_2  = new List <ProbaStruct>();
            MinValueClose_2_2 = new List <ProbaStruct>();
            MaxValueClose_2_2 = new List <ProbaStruct>();
            PositionShort     = new List <Position>();
            PositionLong      = new List <Position>();
            name            = parser.GetString("Name");
            ratio           = parser.GetDouble("Ratio");
            profit_to_close = parser.GetInt("TakeProfit") * Math.Pow(10, -Model.Project.Outputs[gappos].Digits);
            lose_to_close   = parser.GetInt("StopLoss") * Math.Pow(10, -Model.Project.Outputs[gappos].Digits);
            ratio_exp       = parser.GetDouble("Ratio_O");
            tradeTerminal   = new ModelsAT.BrokerMT(parser.GetInt("tradeTerminalID"));
            tradeTerminal.setBrokerParam("Name", parser.GetString("ServerName"));
            tradeTerminal.SetServer();
            if (parser.GetInt("IsReal") == 1)
            {
                tradeTerminal.isReal = true;
            }
            else
            {
                tradeTerminal.isReal = false;
            }
            if (parser.GetInt("Logg") == 1)
            {
                LoggNeeded = true;
            }
            else
            {
                LoggNeeded = false;
            }
            if (parser.GetInt("Expand") == 1)
            {
                can_expand = true;
            }
            else
            {
                can_expand = false;
            }
            divergence_max_open   = 0;
            divergence_min_open   = 0;
            divergence_max_close  = 0;
            divergence_min_close  = 0;
            openlong              = false;
            openshort             = false;
            closelong             = false;
            expand_position_short = false;
            expand_position_long  = false;
            closeshort            = false;
            lastvalue             = LastZigZagValue.NONE;
            all_profit            = 0;
            openpos       = OpenPosition.NONE;
            convergen_min = 0;
            convergen_max = 0;
            ConvergenMin  = new ProbaStruct();
            ConvergenMax  = new ProbaStruct();
            last_pos      = new LastPosition();
            Model.OutputsInitializeEnd += InitializeHandler;
            Model.LoadSimulation       += LoadSec;
            return(true);
        }