Exemple #1
0
        public CDealsStruct(/*long isin_id,*/ string isin, List <CBotBase> listBot, /*CPlaza2Connector*/ IClientDealsStruct plaza2Connector)
        {
            m_isin = isin;
            //m_isin_id = plaza2Connector.Instruments.DictInstrument_IsinId[isin];
            ThreadProcessing = new Thread(ThreadFunc);
            ThreadProcessing.Start();
            ListBot = listBot;

            m_plaza2Connector = plaza2Connector;


            FillSubscribedBotNames();
            if (plaza2Connector.AnalzyeTimeFrames)
            {
                m_TimeFrameAnalyzer = new CTimeFrameAnalyzer(m_isin, (IClientTimeFrameAnalyzer)m_plaza2Connector);
            }

            ListDeals = new List <CRawDeal>();
        }
Exemple #2
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);
                }
            }
        }