Страница 1 из 1

Результаты режима тестирования и советника отличаются

Добавлено: 17 июн 2026, 19:40
TATYANA
Добрый день! Подскажите, пожалуйста, в чем может быть дело?

Запускаю код в режиме тестирования и в режиме советника. В тестирование работает все хорошо, в режиме советника позиция не закрывается, соответственно новая не открывается(((

Код: Выделить всё

function Initialize()
{
   StrategyName = "MyMTS9";
   AddParameter("Pfast", 12, "быстрая ema", 1);
   AddParameter("Pslow", 26, "медленная ema", 0);
   AddParameter("Psig", 9, "сигнальная ema", 0);
   AddParameter("CurrentPL", 50, "", 1);
   AddInput("Input1", Inputs.Candle, 3, true, "MXM6=ФОРТС");
   LongLimit = 0;
   ShortLimit = 0;
   AddChartIndicator("MACD", new Dictionary <string, string>{{"PeriodFast", "Pfast"},{"PeriodSlow", "Pslow"},{"PeriodSignal", "Psig"}});
}

function OnUpdate()
{
   /// ПРАВИЛО 1
   if ( (MACD(Input1.Close, Pfast, Pslow, Psig).GetValue("Histogram", 0) < 0) )
   {
      EnterShort();
   }

   /// ПРАВИЛО 2
   if ( (Input1.Close < AverPrice() - (CurrentPL)) )
   {
      CloseShort();
   }

}


Заранее, спасибо!!!

Re: Результаты режима тестирования и советника отличаются

Добавлено: 18 июн 2026, 05:19
evge
добрый день,

Скорее всего правило на открытие короткой позиции срабатывает без доп. проверки на уже открытую позицию и повторной командой открытия короткой позиции перекрывает выполнение команды её закрытия. Не получится сразу и открыть и закрыть позицию и выполняется только первая. Поэтому, добавить условие проверки отсутствия шорт позиции в правиле на её открытие.

попробуйте так:

Код: Выделить всё

function Initialize()
{
   StrategyName = "MyMTS9";
   AddParameter("Pfast", 12, "быстрая ema", 1);
   AddParameter("Pslow", 26, "медленная ema", 0);
   AddParameter("Psig", 9, "сигнальная ema", 0);
   AddParameter("CurrentPL", 50, "", 1);
   AddInput("Input1", Inputs.Candle, 3, true, "MXM6=ФОРТС");
   LongLimit = 0;
   ShortLimit = 0;
   AddChartIndicator("MACD", new Dictionary <string, string>{{"PeriodFast", "Pfast"},{"PeriodSlow", "Pslow"},{"PeriodSignal", "Psig"}});
}

function OnUpdate()
{
   /// ПРАВИЛО 1
   if ( (MACD(Input1.Close, Pfast, Pslow, Psig).GetValue("Histogram", 0) < 0) && CurrentPosition() >= 0)
   {
      EnterShort();
   }
   
   else

   /// ПРАВИЛО 2
   if ( (Input1.Close < AverPrice() - (CurrentPL)) )
   {
      CloseShort();
   }

}


И я бы посмотрел на правило закрытия, очень странное оно.
Что этим правилом хотели сделать?

Re: Результаты режима тестирования и советника отличаются

Добавлено: 18 июн 2026, 09:27
TATYANA
Изначально планировалось закрывать позицию при достижении цены +50 пунктов от цены открытия позиции.

Re: Результаты режима тестирования и советника отличаются

Добавлено: 18 июн 2026, 14:40
evge
есть функция

CurrentPL() – возвращает текущий доход по открытой позиции в валюте инструмента (рубли или пункты).

достаточно сравнить результат который она возвращает с вашим параметром

Re: Результаты режима тестирования и советника отличаются

Добавлено: 19 июн 2026, 11:13
TATYANA
Спасибо!