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

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
TATYANA
Сообщения: 3
Зарегистрирован: 08 июн 2026, 12:36

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

Непрочитанное сообщение TATYANA » 17 июн 2026, 19:40

Добрый день! Подскажите, пожалуйста, в чем может быть дело?

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

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

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();
   }

}


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

Аватара пользователя
evge
Администратор
Сообщения: 1821
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 375 раз
Контактная информация:

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

Непрочитанное сообщение evge » 18 июн 2026, 05:19

добрый день,

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

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

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

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();
   }

}


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

TATYANA
Сообщения: 3
Зарегистрирован: 08 июн 2026, 12:36

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

Непрочитанное сообщение TATYANA » 18 июн 2026, 09:27

Изначально планировалось закрывать позицию при достижении цены +50 пунктов от цены открытия позиции.

Аватара пользователя
evge
Администратор
Сообщения: 1821
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 375 раз
Контактная информация:

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

Непрочитанное сообщение evge » 18 июн 2026, 14:40

есть функция

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

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



Вернуться в «Общие вопросы по разработке»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей