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>(); }
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); } } }