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)) { } }
protected override void OnUserDealData(string instrument, CBotEventStruct botEvent) { base.OnUserDealData(instrument, botEvent); if (_tradersDispatcher != null) { _tradersDispatcher.EnqueueUpdateDealsLog(BotId); } }
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(); } }
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); } }
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); } } }
/*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(); * * } */ }
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; * * } * * * } * * } * * } * */ }
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); } } }
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); } } }