Каталог файлов форума

Список вложений в сообщениях, оставленных на этой конференции.

Все файлы форума: 1233

Добавлено: evge » 16 окт 2019, 09:56

Тема: Re: SuperTrend - трендовый индикатор, созданный на основе индикаторов ATR и CCI

Текст сообщения:

Покажите код стратегии. Вы использовали код последних версий (вариантов) или первую? При тестировании установлено исполнять сигнал на открытии или на закрытии?

Первый скриншот очень похож на использование первого кода, о проблеме которого в этой теме обсуждалось ранее. Второй момент, если учитываем что сигнал все же правильный на следующем растущем баре, связан с исполнением сигнала на закрытии при тестировании стратегии. В тестировании нужно было ставить исполнение на открытии следующего бара, так графики реальные и тестовые были бы похожи, хотя в целом на результат (цену исполнения) это сильно бы не повлияло (речь о лаге и проскальзывании). При тестировании на закрытии на графике было бы видно стрелочку на 1 бар ранее, в отличие от реального момента выставления заявки и исполнения.

если и брать первый вариант, то его надо немного поправить изменить индекс бара в GetValue("U", 0) с 0 на 1 и тоже самое в GetValue("D", 0):

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

/**

Hash code 82E7948763EE510C8DF0B3C48F17727D
**/
function Initialize()
{
   StrategyName = "SuperTrend";
   AddParameter("PeriodATR", 5, "", 1);
   AddParameter("PeriodCCI", 50, "", 1);
   AddParameter("K", 1, "", 1);
   AddInput("Input1", Inputs.Candle, 60, true, "SBER=МБ ЦК");
   LongLimit = 4750;
   ShortLimit = -4750;
   AddChartIndicator("MY.SuperTrend", new Dictionary <string, string>{{"PeriodATR", "PeriodATR"},{"PeriodCCI", "PeriodCCI"},{"K", "K"}});
}

function OnUpdate()
{
   /// ПРАВИЛО 1
   if ( (MY.SuperTrend(Input1, PeriodATR, PeriodCCI, K).GetValue("U", 1) > 0) )
   {
      EnterLong();
   }

   /// ПРАВИЛО 2
   if ( (MY.SuperTrend(Input1, PeriodATR, PeriodCCI, K).GetValue("D", 1) > 0) )
   {
      EnterShort();
   }

}


И провести тестирование с исполнением "на открытии" и тогда картина будет совпадать с реальностью (но конечно не всегда, но на это другие причины: лаг во времени, проскальзывание).

По второй картинке видно, что сигнал наступил на бычьем баре, но исполнен на следующем и это логично, т.к. полностью сформированный бар мы увидим только при поступлении сигнала OnUpdate() следующего за ним бара. Но тестирование по умолчанию рисует сигнал именно на сигнальном баре. Меняем настройку тестирования исполнения "на открытии" и получаем более правильное отображение будущих сделок (сигналов) при тестировании:

enter-on-open-01.png
enter-on-open-01.png (28.27 КБ) 19520 просмотров