コード例 #1
0
        /// <summary>
        /// Call from OnUserDealData
        /// </summary>
        /// <param name="isin"></param>
        /// <param name="bp"></param>
        protected override void UpdateMonitorPosisionsAll(string isin, CBotPos bp)
        {
            base.UpdateMonitorPosisionsAll(isin, bp);

            BindTradersDispatcher();

            if (_tradersDispatcher == null)
            {
                _tradersDispatcher = _dealingServer.TradersDispatcher;
            }
            if (_tradersDispatcher != null)
            {
                _tradersDispatcher.EnqueueUpdatUserPositionsMonitor(this, BotId);
                _tradersDispatcher.EnqueueUpdateVm(BotId);
            }

            lock (MonitorPositionsAll)
            {
                CBotPos pos = new CBotPos();
                if (MonitorPositionsAll.TryGetValue(isin, out pos))
                {
                    _subBots[isin].OnUpdatePosition(pos);
                }
            }
        }
コード例 #2
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();
            }
        }
コード例 #3
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);
                }
            }
        }