Exemplo n.º 1
0
        protected override void RecalcBotStructs(CBotEventStruct botEvent)
        {
            base.RecalcBotStructs(botEvent);



            EnmBotEventCode evCode = botEvent.EventCode;

            if (EnmBotEventCode.OnTraderConnected == evCode)
            {
                OnTraderConnected();
                if (_tradersDispatcher != null)
                {
                    _tradersDispatcher.EnqueueUpdateDealsLog(BotId);
                }
            }
            else if (EnmBotEventCode.OnTimeDisableTradeLoaded == evCode)
            {
                CDisableTradeData dtl        = (CDisableTradeData)botEvent.Data;
                string            instrument = botEvent.Isin;
                if (_subBots.ContainsKey(instrument))
                {
                    _subBots[instrument].UpdateBotsDisableTrading(dtl);
                }
            }
            //2018-04-25
            else if (EnmBotEventCode.OnForceUpdTotalVM == evCode)
            {
                //note recalc of VM was already done in CBotBase
                if (_tradersDispatcher != null)
                {
                    _tradersDispatcher.EnqueueUpdateVm(BotId);
                }
            }
        }
        protected override void RecalcBotLogics(CBotEventStruct botEvent)
        {
            base.RecalcBotLogics(botEvent);


            if (IsState(EnmStratStates._010_Initial))
            {
                //    CancellAllBotOrders();
                //    CloseAllBotPositions();
                // for (int i=0; i<2; i++)
                // AddOrderNearSpread("RTS-12.15", OrderDirection.Buy, 1, 50);

                AddMarketOrder("RTS-12.15", /*OrderDirection.Buy*/ EnmOrderDir.Buy, 2);

                //   ForceAddMarketOrder("RTS-12.15", OrderDirection.Buy, 1, 10, 4);

                // AddMarketOrder("RTS-12.15", OrderDirection.Buy, 1);
                //AddMarketOrder("GAZR-12.15", OrderDirection.Buy, 1);
                //AddMarketOrder("Si-12.15", OrderDirection.Buy, 1);


                SetState(EnmStratStates._011_AfterFirstOrderAdded);
            }
            else if (IsState(EnmStratStates._011_AfterFirstOrderAdded))
            {
            }
        }
Exemplo n.º 3
0
        protected override void OnUserDealData(string instrument, CBotEventStruct botEvent)
        {
            base.OnUserDealData(instrument, botEvent);

            if (_tradersDispatcher != null)
            {
                _tradersDispatcher.EnqueueUpdateDealsLog(BotId);
            }
        }
Exemplo n.º 4
0
        protected override void RecalcBotStructs(CBotEventStruct botEvent)
        {
            try
            {
                base.RecalcBotStructs(botEvent);

                if (MonitorMarketDataAll.ContainsKey(m_isin))
                {
                    MonitorMarketData = MonitorMarketDataAll[m_isin];
                }
                if (MonitorPositionsAll.ContainsKey(m_isin))
                {
                    MonitorPositions = MonitorPositionsAll[m_isin];
                }
                lock (MonitorOrdersAll)
                {
                    if (MonitorOrdersAll.ContainsKey(m_isin))
                    {
                        MonitorOrders = MonitorOrdersAll[m_isin];
                    }
                }
                mxCurrentStocks[m_isin].WaitOne();

                if (m_currentStocks.ContainsKey(m_isin) &&
                    m_currentStocks[m_isin].ContainsKey(Direction.Down) &&
                    m_currentStocks[m_isin].ContainsKey(Direction.Up)
                    )
                {
                    if (m_currentStocks[m_isin][Direction.Down].Count > 0 &&
                        m_currentStocks[m_isin][Direction.Down][0].Price > 0)
                    {
                        MonitorMarketData.Bid = m_currentStocks[m_isin][Direction.Down][0].Price;
                    }

                    if (m_currentStocks[m_isin][Direction.Up].Count > 0 &&
                        m_currentStocks[m_isin][Direction.Up][0].Price > 0)
                    {
                        MonitorMarketData.Ask = m_currentStocks[m_isin][Direction.Up][0].Price;
                    }
                }
            }
            catch (Exception e)
            {
                Error("RecalcBotStructs bot=" + Name, e);
            }
            finally
            {
                mxCurrentStocks[m_isin].ReleaseMutex();
            }
        }
Exemplo n.º 5
0
 protected override void RecalcBotLogics(CBotEventStruct botEvent)
 {
     if (IsState(EnmStratStates._000_PreInitial))
     {
         CloseAllPositions();
         CancellAllBotOrders();
         //  SetState(EnmStratStates._001_Initial);
         DisableBot();
     }
     if (IsState(EnmStratStates._001_Initial))
     {
         AddOrderNearSpread(m_isin, /*OrderDirection.Sell*/ EnmOrderDir.Sell, m_parLot, 0);
         SetState(EnmStratStates._002_AfterLomitOrderAdded);
     }
 }
Exemplo n.º 6
0
        protected override void RecalcBotLogics(CBotEventStruct botEvent)
        {
            if (IsState(EnmStratStates._000_PreInitial))
            {
                CloseAllPositions();
                CancellAllBotOrders();
                //SetState(EnmStratStates._001_Initial);
                DisableBot();
            }



            if (IsState(EnmStratStates._001_Initial))
            {
                if (IsPairedBotOrderAdded())
                {
                    AddMarketOrder(m_isin, /*OrderDirection.Buy*/ EnmOrderDir.Buy, m_parLot);
                    SetState(EnmStratStates._002_AfterSentMarketOrder);
                }
            }
        }
Exemplo n.º 7
0
        /*protected override void OnUserDealsLogics(string instrument)
         * {
         *  base.OnUserDealsLogics(instrument);
         *
         *  if (_subBots.ContainsKey(instrument))
         *      _subBots[instrument].OnUserDealsLogics();
         *
         * }
         */



        protected override void RecalcBotLogics(CBotEventStruct botEvent)
        {
            base.RecalcBotLogics(botEvent);

            //CheckNeedSendStopLossTakeProfit();

            EnmBotEventCode evCode     = botEvent.EventCode;
            string          instrument = botEvent.Isin;

            if (EnmBotEventCode.OnTraderDisconnected == evCode)
            {
                CancellAllBotOrders();
            }


            /*  if (EnmBotEventCode.OnStockUpdate == evCode)
             * {
             *    if (_subBots.ContainsKey(instrument))
             *        _subBots[instrument].OnStockUpdate();
             *
             * }
             */
        }
Exemplo n.º 8
0
        protected override void RecalcBotLogics(CBotEventStruct botEvent)
        {
            base.RecalcBotLogics(botEvent);
            // CloseAllBotPositions();
            // CancellAllOrders();
            // AddMarketOrder(m_isin, OrderDirection.Buy, m_parLot);


            if (IsState(EnmStratStates._000_PreInitial))
            {
                if (MonitorOrders.Count == 0 && ((MonitorPositions == null || MonitorPositions.Amount == 0)))
                {
                    SetState(EnmStratStates._010_Initial);
                }
                else
                {
                    CancellAllBotOrders();
                    CloseAllPositions();

                    SetState(EnmStratStates._001_WaitAllOldOrdersClosed);
                }
            }
            else if (IsState(EnmStratStates._001_WaitAllOldOrdersClosed))
            {
                if (MonitorOrders.Count == 0 && (MonitorPositions == null || MonitorPositions.Amount == 0))
                {
                    SetState(EnmStratStates._010_Initial);
                }
            }
            else if (IsState(EnmStratStates._010_Initial))
            {
                AddOrderNearSpread(m_isin, /*OrderDirection.Sell*/ EnmOrderDir.Sell, m_parLot, m_parOffset);
                SetState(EnmStratStates._020_WaitFirstLimitOrderAdded);
            }
            else if (IsState(EnmStratStates._020_WaitFirstLimitOrderAdded))
            {
                if (MonitorOrders.Count == 1 && (
                        (MonitorOrders.First()).Value).Amount == m_parLot)
                {
                    SetState(EnmStratStates._021_AfterFirstLimitOrderWasAccepted);
                    StartTimer("AfterFirstLimitOrderWasAccepted");
                }
            }
            else if (IsState(EnmStratStates._021_AfterFirstLimitOrderWasAccepted))
            {
                if (botEvent.EventCode == EnmBotEventCode.OnTimer &&
                    (string)botEvent.Data == "AfterFirstLimitOrderWasAccepted")
                {
                    if (MonitorOrders.Count == 1)
                    {
                        long id = (MonitorOrders.First()).Key;
                        CancelOrder(id);
                        SetState(EnmStratStates._022_WaitFirstLimitOrderCancell);
                    }
                }
            }
            else if (IsState(EnmStratStates._022_WaitFirstLimitOrderCancell))
            {
                if (MonitorOrders.Count == 0)
                {
                    SetState(EnmStratStates._023_AfterFirstLimitOrderCancell);
                }
            }
            else if (IsState(EnmStratStates._023_AfterFirstLimitOrderCancell))
            {
                StartTimer("BeforeAddSecondLimitOrder");
                SetState(EnmStratStates._030_BeforeSecondLimitOrderDelay);
            }
            else if (IsState(EnmStratStates._030_BeforeSecondLimitOrderDelay))
            {
                if (botEvent.EventCode == EnmBotEventCode.OnTimer &&
                    (string)botEvent.Data == "BeforeAddSecondLimitOrder")
                {
                    AddOrderNearSpread(m_isin, /*OrderDirection.Sell*/ EnmOrderDir.Sell, m_parLot, m_parOffset);
                    SetState(EnmStratStates._031_WaitSecondLimitOrderAdded);
                }
            }
            else if (IsState(EnmStratStates._031_WaitSecondLimitOrderAdded))
            {
                if (MonitorOrders.Count == 1 && (
                        (MonitorOrders.First()).Value).Amount == m_parLot)
                {
                    SetState(EnmStratStates._032_AfterSecondLimitOrderAccepted);
                }
            }
            else if (IsState(EnmStratStates._032_AfterSecondLimitOrderAccepted))
            {
                StartTimer("BeforeSecondLimitCancell");
                SetState(EnmStratStates._033_BeforeSecondLimitCancellDelay);
            }

            else if (IsState(EnmStratStates._033_BeforeSecondLimitCancellDelay))

            {
                if (botEvent.EventCode == EnmBotEventCode.OnTimer &&
                    (string)botEvent.Data == "BeforeSecondLimitCancell")
                {
                    if (MonitorOrders.Count == 1 && (
                            (MonitorOrders.First()).Value).Amount == m_parLot)
                    {
                        CancellAllBotOrders();
                        SetState(EnmStratStates._034_WaitSecondLimitOrderCancell);
                    }
                }
            }
            else if (IsState(EnmStratStates._034_WaitSecondLimitOrderCancell))
            {
                if (MonitorOrders.Count == 0)
                {
                    SetState(EnmStratStates._035_AfterSecondLimitOrderCancell);
                }
            }
            else if (IsState(EnmStratStates._035_AfterSecondLimitOrderCancell))
            {
                SetState(EnmStratStates._010_Initial);
            }



            /*
             * Log("Recalc specific");
             *
             * int tmp_sleep = 10;
             *
             * if (m_plaza2Connector.IsOrderControlAvailable && m_plaza2Connector.IsStockOnline)
             * {
             *
             *  if (!bWas)
             *  {
             *      bWas = true;
             *
             *      if (BotId == 1)
             *      {
             *        //  Alarm("test1");
             *        //  Alarm("test2");
             *         // System.Threading.Thread.Sleep(8000);
             *      //   this.SettingsBot.Enabled = false;
             *
             *      //     AddOrderNearSpread("RTS-9.15", OrderDirection.Buy, 1, 90);
             *      //      AddOrderNearSpread("Si-9.15", OrderDirection.Buy, 1, 110);
             *      //       AddOrderNearSpread("RTS-9.15", OrderDirection.Sell, 1, 80);
             *      //       AddOrderNearSpread("Si-9.15", OrderDirection.Sell, 1, 100);
             *      //       AddOrderNearSpread("RTS-9.15", OrderDirection.Buy, 1, 110);
             *
             *
             *
             *   //  CancellAllBotOrders();
             *
             *         // CloseAllBotPositions();
             *
             *
             *
             *          //TO DO open by market
             *  //  AddMarketOrder("RTS-9.15", OrderDirection.Buy, 1);
             *
             *   // AddOrder("RTS-6.15", 103840, OrderDirection.Sell, 1);
             *       // CancellAllOrders();
             *
             *
             *
             *
             *         // CancelOrder(40133784905);
             *           //    AddMarketOrder("RTS-6.15", OrderDirection.Buy, 1);
             *
             *         //    AddOrder("RTS-6.15", 99890, OrderDirection.Buy, 3);
             *          //      AddOrder("RTS-6.15", 102000, OrderDirection.Buy, 1);
             *          //   AddOrder("RTS-6.15", 101000, OrderDirection.Sell, 1);
             *
             * //          if (!bWas)
             * //             {
             *              //    CancelOrder(40100161380);
             *              //     CancellAllOrders();
             *              //   CancellAllBotOrders();
             *              //   AddOrder("RTS-6.15", 107770, OrderDirection.Buy, 1);
             * //             bWas = true;
             *  //        }
             *
             *  //    }
             * //      else if (BotId == 2)
             *      {
             *
             *
             *     //     AddOrderNearSpread("RTS-9.15", OrderDirection.Buy, 1, 70);
             *      //    AddOrderNearSpread("Si-9.15", OrderDirection.Buy, 1, 70);
             *     //     AddOrderNearSpread("RTS-9.15", OrderDirection.Sell, 1, 50);
             *     //     AddOrderNearSpread("Si-9.15", OrderDirection.Sell, 1, 50);
             *       //   AddOrderNearSpread("RTS-9.15", OrderDirection.Buy, 1, 90);
             *      //    AddOrderNearSpread("Si-9.15", OrderDirection.Buy, 1, 90);
             *
             *
             *
             *     //       CancellAllBotOrders();
             *      //    CloseAllBotPositions();
             *
             *        //  AddMarketOrder("RTS-6.15", OrderDirection.Sell, 1);
             *          //  AddMarketOrder("RTS-6.15", OrderDirection.Buy, 1);
             *
             *          // AddOrder("RTS-6.15", 97000, OrderDirection.Buy, 1);
             *          //  AddOrder("RTS-6.15", 102000, OrderDirection.Buy, 1);
             *          //   AddOrder("RTS-6.15", 95000, OrderDirection.Sell, 1);
             *          if (!bWas)
             *          {
             *              //   CancellAllBotOrders();
             *              bWas = true;
             *
             *          }
             *
             *
             *      }
             *
             *  }
             *
             * }
             *
             */
        }
Exemplo n.º 9
0
        protected override void RecalcBotLogics(CBotEventStruct botEvent)
        {
            base.RecalcBotLogics(botEvent);
            //------------------------ INITIAL BLOCK ----------------------------------------------------------------------------
            if (IsState(EnmStrategyStates._010_Initial))
            {
                //tempo for debugging
                CloseAllPositions();
                //  DisableBot();

                if (m_TimeframeAnalyzer == null)
                {
                    m_TimeframeAnalyzer = _dealingServer.DealBox.DealsStruct[m_isin].TimeFrameAnalyzer;
                }
                UpdateLastHighLow();
                if (m_HighLast != 0 && m_LowLast != 0)
                {
                    SetState(EnmStrategyStates._020_WaitingForExtremumBrake);
                }
            }

            //-----------------------------------------------------------------------------------------------------------------------------------
            //--------------------- WAITING FOR EXTREMUM BLOCK-------------------------------------------------------------------------------------
            else if (IsState(EnmStrategyStates._020_WaitingForExtremumBrake))
            {
                if (botEvent.EventCode == EnmBotEventCode.OnTFUpdate)
                {
                    string stTF = (((BotEventTF)botEvent.Data).TFUpdate).ToString();
                }
                else if (botEvent.EventCode == EnmBotEventCode.OnTFChanged)
                {
                    string stTF = (((BotEventTF)botEvent.Data).TFUpdate).ToString();

                    if (stTF == m_parTF)
                    {
                        DateTime dtn = DateTime.Now;
                        DateTime dt  = ((CTimeFrameInfo)((BotEventTF)botEvent.Data).TFI).Dt;;
                        //m_ClosedTFPrice = ((CTimeFrameInfo)((BotEventTF)botEvent.Data).TFI).ClosePrice;
                        m_HighCurrent    = ((CTimeFrameInfo)((BotEventTF)botEvent.Data).TFI).HighPrice;
                        m_LowCurrent     = ((CTimeFrameInfo)((BotEventTF)botEvent.Data).TFI).LowPrice;
                        m_ClosedTFVolume = ((CTimeFrameInfo)((BotEventTF)botEvent.Data).TFI).Volume;

                        //m_TimeframeAnalyzer.GetTFIByDate(m_parTF, dt).ClosePrice;
                        if (WasBreakedExtermum())
                        {
                            if (m_ClosedTFVolume > m_parVolume)
                            {
                                Log("m_ClosedTFVolume=" + m_ClosedTFVolume);
                                SetState(EnmStrategyStates._030_ExtremumWasBrake);
                            }
                            else
                            {
                                //SetState(EnmStrategyStates._020_WaitingForExtremumBrake);
                                Log("m_ClosedTFVolume <= m_parVolume  Not enough volume. m_ClosedTFVolume=" + m_ClosedTFVolume + " m_parVolume=" + m_parVolume);
                                UpdateLastHighLow();
                            }
                        }
                    }
                }
            }
            //--------------------- WAITING FOR EXTREMUM BLOCK-------------------------------------------------------------------------------------
            else if (IsState(EnmStrategyStates._030_ExtremumWasBrake))
            {
                StartTimer("DelayAfterExtremumBrake");
                SetState(EnmStrategyStates._040_DelayAfterExtremumBrake);
            }
            //--------------------- END WAITING FOR EXTREMUM BLOCK---------------------------------------------------------
            //--------------------- DELAY AFTER EXTREMUM BLOCK-----------------------------------------------------------------
            else if (IsState(EnmStrategyStates._040_DelayAfterExtremumBrake))
            {
                if (botEvent.EventCode == EnmBotEventCode.OnTimer &&
                    (string)botEvent.Data == "DelayAfterExtremumBrake")
                {
                    SetState(EnmStrategyStates._050_BeforeOpenPosition);
                }
            }
            //--------------------------------------------------------------------------------------------------------
            else if (IsState(EnmStrategyStates._050_BeforeOpenPosition))
            {
                if (m_brkDir == EnmBrkDir.DOWN)
                {
                    AddMarketOrder(m_isin, /*OrderDirection.Buy*/ EnmOrderDir.Buy, m_parLot);
                }
                else if (m_brkDir == EnmBrkDir.UP)
                {
                    AddMarketOrder(m_isin, /*OrderDirection.Sell*/ EnmOrderDir.Sell, m_parLot);
                }


                SetState(EnmStrategyStates._060_WaitOpenedPos);
                // StartTimer(
            }
            else if (IsState(EnmStrategyStates._060_WaitOpenedPos))
            {
                //TO DO - move to base classes
                if (MonitorPositionsAll.ContainsKey(m_isin) &&
                    Math.Abs(MonitorPositionsAll[m_isin].Amount) == m_parLot)
                {
                    SetState(EnmStrategyStates._070_AfterOpenedPosition);
                }
            }
            else if (IsState(EnmStrategyStates._070_AfterOpenedPosition))
            {
                if (IsStopLossWasBroken())
                {
                    CloseAllPositions();
                    SetState(EnmStrategyStates._081_AfterStoplossWasBroken);
                }
                if (IsTakeProfitWasBroken())
                {
                    CloseAllPositions();
                    SetState(EnmStrategyStates._082_AfterTakeProfitWasBroken);
                }
            }
            else if (IsState(EnmStrategyStates._081_AfterStoplossWasBroken))
            {
                if (MonitorPositionsAll.ContainsKey(m_isin) &&
                    Math.Abs(MonitorPositionsAll[m_isin].Amount) == 0)
                {
                    SetState(EnmStrategyStates._010_Initial);
                }
            }
            else if (IsState(EnmStrategyStates._082_AfterTakeProfitWasBroken))
            {
                if (MonitorPositionsAll.ContainsKey(m_isin) &&
                    Math.Abs(MonitorPositionsAll[m_isin].Amount) == 0)
                {
                    SetState(EnmStrategyStates._010_Initial);
                }
            }
        }
Exemplo n.º 10
0
        protected override void RecalcBotLogics(CBotEventStruct botEvent)
        {
            base.RecalcBotLogics(botEvent);


            if (IsState(EnmStratStates._000_PreInitial))
            {
                if (MonitorOrders.Count == 0 && ((MonitorPositions == null || MonitorPositions.Amount == 0)))
                {
                    SetState(EnmStratStates._010_Initial);
                }
                else
                {
                    CancellAllBotOrders();
                    CloseAllPositions();

                    SetState(EnmStratStates._001_WaitAllOldOrdersAndPosClosed);
                }
            }
            else if (IsState(EnmStratStates._001_WaitAllOldOrdersAndPosClosed))
            {
                if (IsNoOpenedPos() && IsNoOpenedOrders())
                {
                    SetState(EnmStratStates._010_Initial);
                }
            }
            else if (IsState(EnmStratStates._010_Initial))
            {
                StartTimer("DelayBeforeOpenFirstPos");
                SetState(EnmStratStates._011_DelayBeforeOpenFirstPos);
            }
            else if (IsState(EnmStratStates._011_DelayBeforeOpenFirstPos))
            {
                if (botEvent.EventCode == EnmBotEventCode.OnTimer &&
                    (string)botEvent.Data == "DelayBeforeOpenFirstPos")
                {
                    AddMarketOrder(/*OrderDirection.Buy*/ EnmOrderDir.Buy);
                    SetState(EnmStratStates._012_WaitFirstPosOpened);
                }
            }
            else if (IsState(EnmStratStates._012_WaitFirstPosOpened))
            {
                if (MonitorPositions != null && MonitorPositions.Amount == m_parLot)
                {
                    SetState(EnmStratStates._013_FirstPositionOpened);
                }
            }
            else if (IsState(EnmStratStates._013_FirstPositionOpened))
            {
                SetState(EnmStratStates._014_HandleFirstPositionOpened);
                StartTimer("HandleFirstPositionOpened");
            }
            else if (IsState(EnmStratStates._014_HandleFirstPositionOpened))
            {
                if (botEvent.EventCode == EnmBotEventCode.OnTimer &&
                    (string)botEvent.Data == "HandleFirstPositionOpened")
                {
                    CloseAllPositions();
                    SetState(EnmStratStates._100_NormalExit);
                }
            }
        }