// Основной анализ!!!! ============================================================== private void Analyze() { if (_isAnyErrors) { return; } // При старті - визначення параметрів при 1 тику if (_firstQuote) { if (UseFirstMA && UseSecondMA) { // Якщо 1МА=0 або 2МА=0 або не виставлені або сигнали співпали - ВИХІД if ((_ma1Value == 0) || (_ma2Value == 0) || (_ma1Value == double.NaN) || (_ma2Value == double.NaN) || (_ma1Value.Equals(_ma2Value))) { return; } // Якщо Швидка 1 МА нижче повільної 2 МА Below(Ниже) if (_ma1Value < _ma2Value) { _isMA1BelowMA2 = true; } } _firstQuote = false; } // ======================== Встановлені 1 и 2 МА if (UseFirstMA && UseSecondMA) { // було МА1 нижче МА2 и стало МА1>МА2 - ПЕРЕТИН скользящих if (_isMA1BelowMA2 && (_ma1Value >= _ma2Value)) { Print("LR_Intersection_slow_ma_with_fast_ma_down_to_up"); _isMA1BelowMA2 = false; // Теперь МА2 выше МА1 // Если открыта позиция и УСТАНОВЛЕНО закрывать при обратном сигнале if ((_positionGuid != Guid.Empty) && IsDoCloseOnReverseSignal) { // Определить есть ли сигнал обратный - МА1 пересекла МА2 CheckForReversSignal(SignalType.SlowMACrosFastMABottomTop); return; } if (SlowMACrosFastMABottomTop.Equals(AdvisorOrderType.Buy)) { Buy(SignalType.SlowMACrosFastMABottomTop); } if (SlowMACrosFastMABottomTop.Equals(AdvisorOrderType.Sell)) { Sell(SignalType.SlowMACrosFastMABottomTop); } } // Если МА1 БЫЛА ВЫШЕ МА2 (Тренд ВВЕРХ ) и пересекла ВНИЗ if (!_isMA1BelowMA2 && (_ma1Value < _ma2Value)) { Print("LR_Intersection_slow_ma_with_fast_ma_up_to_down"); _isMA1BelowMA2 = true; // МА1 НИЖЕ МА2 if ((_positionGuid != Guid.Empty) && IsDoCloseOnReverseSignal) { CheckForReversSignal(SignalType.SlowMACrosFastMATopBottom); return; } if (SlowMACrosFastMATopBottom.Equals(AdvisorOrderType.Buy)) { Buy(SignalType.SlowMACrosFastMATopBottom); } if (SlowMACrosFastMATopBottom.Equals(AdvisorOrderType.Sell)) { Sell(SignalType.SlowMACrosFastMATopBottom); } } } // ======================================================================================= // ЕСЛИ ЦЕНА ВЫШЕ МА1 if (_ask > _ma1Value) { if ((_positionGuid != Guid.Empty) && IsDoCloseOnReverseSignal) { CheckForReversSignal(SignalType.QuoteAboveMA); return; } if (QuoteAboveMA.Equals(AdvisorOrderType.Buy)) { Buy(SignalType.QuoteAboveMA); } if (QuoteAboveMA.Equals(AdvisorOrderType.Sell)) { Sell(SignalType.QuoteAboveMA); } } // ======================================================================================= // ЕСЛИ ЦЕНА НИЖЕ МА1 if (_ask < _ma1Value) { if ((_positionGuid != Guid.Empty) && IsDoCloseOnReverseSignal) { CheckForReversSignal(SignalType.QuoteBelowMA); return; } if (QuoteBelowMA.Equals(AdvisorOrderType.Buy)) { Buy(SignalType.QuoteBelowMA); } if (QuoteBelowMA.Equals(AdvisorOrderType.Sell)) { Sell(SignalType.QuoteBelowMA); } } }
private void Analyze() { if (_isAnyErrors) { return; } if (_firstQuote) { if (UseFirstMA && UseSecondMA) { if ((_ma1Value == 0) || (_ma2Value == 0) || (_ma1Value == double.NaN) || (_ma2Value == double.NaN) || (_ma1Value.Equals(_ma2Value))) { return; } if (_ma1Value < _ma2Value) { _isMA1BelowMA2 = true; } } _firstQuote = false; } if (UseFirstMA && UseSecondMA) { if (_isMA1BelowMA2 && (_ma1Value >= _ma2Value)) { Print("LR_Intersection_slow_ma_with_fast_ma_down_to_up"); _isMA1BelowMA2 = false; if ((_positionGuid != Guid.Empty) && IsDoCloseOnReverseSignal) { CheckForReversSignal(SignalType.SlowMACrosFastMABottomTop); return; } if (SlowMACrosFastMABottomTop.Equals(AdvisorOrderType.Buy)) { Sell(SignalType.SlowMACrosFastMABottomTop); } if (SlowMACrosFastMABottomTop.Equals(AdvisorOrderType.Sell)) { Buy(SignalType.SlowMACrosFastMABottomTop); } } if (!_isMA1BelowMA2 && (_ma1Value < _ma2Value)) { Print("LR_Intersection_slow_ma_with_fast_ma_up_to_down"); _isMA1BelowMA2 = true; if ((_positionGuid != Guid.Empty) && IsDoCloseOnReverseSignal) { CheckForReversSignal(SignalType.SlowMACrosFastMATopBottom); return; } if (SlowMACrosFastMATopBottom.Equals(AdvisorOrderType.Buy)) { Sell(SignalType.SlowMACrosFastMATopBottom); } if (SlowMACrosFastMATopBottom.Equals(AdvisorOrderType.Sell)) { Buy(SignalType.SlowMACrosFastMATopBottom); } } } if (_ask > _ma1Value) { if ((_positionGuid != Guid.Empty) && IsDoCloseOnReverseSignal) { CheckForReversSignal(SignalType.QuoteAboveMA); return; } if (QuoteAboveMA.Equals(AdvisorOrderType.Buy)) { Sell(SignalType.QuoteAboveMA); } if (QuoteAboveMA.Equals(AdvisorOrderType.Sell)) { Buy(SignalType.QuoteAboveMA); } } if (_ask < _ma1Value) { if ((_positionGuid != Guid.Empty) && IsDoCloseOnReverseSignal) { CheckForReversSignal(SignalType.QuoteBelowMA); return; } if (QuoteBelowMA.Equals(AdvisorOrderType.Buy)) { Buy(SignalType.QuoteBelowMA); } if (QuoteBelowMA.Equals(AdvisorOrderType.Sell)) { Sell(SignalType.QuoteBelowMA); } } }