// логика void _tab_PositionOpeningFailEvent(Position position) { if (!string.IsNullOrWhiteSpace(position.Comment)) { return; } if (position.OpenVolume != 0) { return; } if (StartProgram == StartProgram.IsTester) { return; } if (position.OpenOrders.Count > 1 || position.Comment == "Second") { return; } List <Position> openPos = _tab.PositionsOpenAll; if (openPos != null && openPos.Count > 1 || openPos != null && openPos.Count == 1 && openPos[0].Direction == position.Direction) { return; } _tab.BuyAtStopCancel(); _tab.SellAtStopCancel(); if (position.Direction == Side.Buy) { decimal price = _tab.PriceBestBid + SlipageOpenSecond * _tab.Securiti.PriceStep; Position pos = _tab.BuyAtLimit(position.OpenOrders[0].Volume, price); pos.Comment = "Second"; } else if (position.Direction == Side.Sell) { decimal price = _tab.PriceBestAsk - SlipageOpenSecond * _tab.Securiti.PriceStep; Position pos = _tab.SellAtLimit(position.OpenOrders[0].Volume, price); pos.Comment = "Second"; } }
/// <summary> /// logic open position /// логика открытия первой позиции и дополнительного входа /// </summary> private void LogicOpenPosition(List <Candle> candles) { List <Position> openPositions = _tab.PositionsOpenAll; if (openPositions == null || openPositions.Count == 0) { _tab.BuyAtStopCancel(); _tab.SellAtStopCancel(); // long if (Regime.ValueString != "OnlyShort") { decimal priceEnter = _lastPcUp; _tab.BuyAtStop(VolumeFix1.ValueDecimal, priceEnter + Slippage.ValueInt * _tab.Securiti.PriceStep, priceEnter, StopActivateType.HigherOrEqual); } // Short if (Regime.ValueString != "OnlyLong") { decimal priceEnter = _lastPcDown; _tab.SellAtStop(VolumeFix1.ValueDecimal, priceEnter - Slippage.ValueInt * _tab.Securiti.PriceStep, priceEnter, StopActivateType.LowerOrEqyal); } return; } if (openPositions.Count == 1) { _tab.BuyAtStopCancel(); _tab.SellAtStopCancel(); if (openPositions[0].Direction == Side.Buy) { decimal priceEnter = _lastPcUp + (_lastAtr * KofAtr.ValueDecimal); _tab.BuyAtStop(VolumeFix2.ValueDecimal, priceEnter + Slippage.ValueInt * _tab.Securiti.PriceStep, priceEnter, StopActivateType.HigherOrEqual); } else { decimal priceEnter = _lastPcDown - (_lastAtr * KofAtr.ValueDecimal); _tab.SellAtStop(VolumeFix2.ValueDecimal, priceEnter - Slippage.ValueInt * _tab.Securiti.PriceStep, priceEnter, StopActivateType.LowerOrEqyal); } } }
/// <summary> /// logic open position /// логика открытия первой позиции и дополнительного входа /// </summary> private void LogicOpenPosition(List <Candle> candles) { _tab.SellAtStopCancel(); _tab.BuyAtStopCancel(); if (_LastCandleTime != candles[candles.Count - 1].TimeStart) { _LastCandleTime = candles[candles.Count - 1].TimeStart; } else { return; } List <Position> openPositions = _tab.PositionsOpenAll; if (openPositions == null || openPositions.Count == 0) { // long if (Regime.ValueString != "OnlyShort") { if (FastMA.Values[FastMA.Values.Count - 1] > SlowMA.Values[SlowMA.Values.Count - 1] ) { decimal priceEnter = _lastPcUp + (_lastAtr * KofAtr); // priceEnter = GetLastFractail(Fractail.ValuesUp); //_tab.BuyAtStop(VolumeFix1.ValueDecimal, priceEnter + Slipage.ValueDecimal, priceEnter, StopActivateType.HigherOrEqual); _tab.BuyAtStop(GetVolume(Side.Buy), priceEnter + Slipage.ValueDecimal, priceEnter, StopActivateType.HigherOrEqual); } } // Short if (Regime.ValueString != "OnlyLong") { if (FastMA.Values[FastMA.Values.Count - 1] < SlowMA.Values[SlowMA.Values.Count - 1] ) { decimal priceEnter = _lastPcDown - (_lastAtr * KofAtr); // priceEnter = GetLastFractail(Fractail.ValuesDown); //_tab.SellAtStop(VolumeFix1.ValueDecimal, priceEnter - Slipage.ValueDecimal, priceEnter, StopActivateType.LowerOrEqyal); _tab.SellAtStop(GetVolume(Side.Sell), priceEnter - Slipage.ValueDecimal, priceEnter, StopActivateType.LowerOrEqyal); } } return; } }
private void Strateg_PositionOpen(Position position) { _tab.SellAtStopCancel(); _tab.BuyAtStopCancel(); decimal profit = Math.Abs((_lastPcUp - _lastPcDown)) * 1; List <Position> openPositions = _tab.PositionsOpenAll; for (int i = 0; openPositions != null && i < openPositions.Count; i++) { if (openPositions[i].Direction == Side.Buy) { _tab.SellAtStopCancel(); _tab.CloseAtStop(openPositions[i], _lastPcDown, _lastPcDown - Slipage.ValueDecimal); _tab.CloseAtProfit(openPositions[i], openPositions[i].EntryPrice + profit + Slipage.ValueDecimal, openPositions[i].EntryPrice + profit); } else { _tab.BuyAtStopCancel(); _tab.CloseAtStop(openPositions[i], _lastPcUp, _lastPcUp + Slipage.ValueDecimal); _tab.CloseAtProfit(openPositions[i], openPositions[i].EntryPrice - profit - Slipage.ValueDecimal, openPositions[i].EntryPrice - profit); } } }
private void Strateg_PositionOpen(Position position) { List <Position> openPositions = _tab.PositionsOpenAll; for (int i = 0; openPositions != null && i < openPositions.Count; i++) { if (openPositions[i].Direction == Side.Buy) { _tab.SellAtStopCancel(); // _tab.CloseAtStop(openPositions[i], _tab.CandlesAll[_tab.CandlesAll.Count-1].Low, _tab.CandlesAll[_tab.CandlesAll.Count - 1].Low - Slipage.ValueDecimal); // _tab.CloseAtProfit(openPositions[i], openPositions[i].EntryPrice+_lastAtr*0.5m, openPositions[i].EntryPrice + _lastAtr * 0.5m - Slipage.ValueDecimal); } else { _tab.BuyAtStopCancel(); // _tab.CloseAtStop(openPositions[i], _tab.CandlesAll[_tab.CandlesAll.Count - 1].High, _tab.CandlesAll[_tab.CandlesAll.Count - 1].High + Slipage.ValueDecimal); // _tab.CloseAtProfit(openPositions[i], openPositions[i].EntryPrice - _lastAtr * 0.5m, openPositions[i].EntryPrice + _lastAtr * 0.5m + Slipage.ValueDecimal); } } }
private void LogicOpenPosition(List <Candle> candles) { decimal lastMa = _sma.DataSeries[0].Values[_sma.DataSeries[0].Values.Count - 1]; decimal lastPrice = candles[candles.Count - 1].Close; if (lastMa == 0) { return; } decimal maxToCandleSeries = _channel.DataSeries[0].Values[_channel.DataSeries[0].Values.Count - 1]; decimal minToCandleSeries = _channel.DataSeries[1].Values[_channel.DataSeries[1].Values.Count - 1]; List <Position> positions = _tab.PositionsOpenAll; if (lastPrice >= lastMa && Regime.ValueString != "OnlyShort") { if (positions != null && positions.Count != 0 && positions[0].Direction == Side.Buy) { if (positions.Count >= MaximumPosition.ValueInt) { return; } decimal lastIntro = positions[positions.Count - 1].EntryPrice; if (lastIntro + lastIntro * (PersentDopSell.ValueDecimal / 100) < lastPrice) { if (positions.Count >= MaximumPosition.ValueInt) { return; } _tab.BuyAtLimit(Volume.ValueDecimal, lastPrice + (Slippage.ValueInt * _tab.Securiti.PriceStep)); } } else if (positions == null || positions.Count == 0) { _tab.SellAtStopCancel(); _tab.BuyAtStopCancel(); _tab.BuyAtStop(Volume.ValueDecimal, maxToCandleSeries + (Slippage.ValueInt * _tab.Securiti.PriceStep), maxToCandleSeries, StopActivateType.HigherOrEqual); } } if (lastPrice <= lastMa && Regime.ValueString != "OnlyLong") { if (positions != null && positions.Count != 0 && positions[0].Direction == Side.Sell) { if (positions.Count >= MaximumPosition.ValueInt) { return; } decimal lastIntro = positions[positions.Count - 1].EntryPrice; if (lastIntro - lastIntro * (PersentDopSell.ValueDecimal / 100) > lastPrice) { _tab.SellAtLimit(Volume.ValueDecimal, lastPrice - (Slippage.ValueInt * _tab.Securiti.PriceStep)); } } else if (positions == null || positions.Count == 0) { if (positions != null && positions.Count >= MaximumPosition.ValueInt) { return; } _tab.SellAtStopCancel(); _tab.BuyAtStopCancel(); _tab.SellAtStop(Volume.ValueDecimal, minToCandleSeries - (Slippage.ValueInt * _tab.Securiti.PriceStep), minToCandleSeries, StopActivateType.LowerOrEqyal); } } }