예제 #1
0
//  Основной анализ!!!! ==============================================================
        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);
                }
            }
        }
예제 #2
0
파일: MA6.cs 프로젝트: ivan-petrov-ubk/CS
        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);
                }
            }
        }