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

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

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

Добавлено: Prohar » 16 фев 2020, 01:14

Тема: Re: Поинтервальная оптимизация

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

Обновления :D
1) ошибка перестает появляться если выполнить оптимизацию другой стратегии
2)переписал код. теперь ширина окна и шаг его перемещения настраиваются отдельно. Шаг может быть уже окна, тогда окно двигается подобно скользящему среднему
3) d1 вычисляется сам

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

/**
проверка оптимального параметра во времени

сигналы это экстремумы hma;
период N - период HMA;
day- количество интервалов для проверки

1) нажимаем кнопку оптимизировать
2) Задаем инструмент, тайм фрейм, даты интервала оптимизации входного инструмента
3) ширина окна - интервал на котором исследуется параметр
4) в настройке оптимизации задаем номера шагов мин = 1 /макс = интервал оптимизации в днях(можно с запасом) и размер шага. если размер шага == ширене окна, то окна не накладываются друг на друга
Algorithm = hma;
**/

function Initialize()
{
   StrategyName = "My_Opt_hma_var_interval";
   AddParameter("N", 10, "период HMA", 1);
   //AddParameter("kl", -1, "", 1);
   //AddParameter("kp", 1, "", 1);

   AddParameter("day_in_w", 30, "дней в окне", 1);
   AddParameter("step", 180,"количество шагов шаги", 1);
   // AddParameter("d1", 727110.0, "(09.2019 = 24237  *начала = год*12+месяц", 1);
   AddInput("Input1", Inputs.Candle, 20, true, "SNGS=МБ ЦК");
   LongLimit = 1;
   ShortLimit = -1;
   AddChartIndicator("MY.HMA", new Dictionary <string, string>{{"P", "N"}});
   
   AddGlobalVariable("d1", Types.Double, 0);
    AddGlobalVariable("b", Types.Int, 0);
   
}

function OnUpdate()
{

if (b == 0) //первый запуск
{
   b = 1;
   //d1 = BarDate().Year * 12.0 + BarDate().Month;
   d1 = ((BarDate().Year * 12.0 + BarDate().Month)  * 30 + BarDate().Day);
}

if (( ( ( (BarDate().Year * 12.0 + BarDate().Month)  * 30 + BarDate().Day)- d1) > ((step)) ) && ( ((BarDate().Year * 12.0 + BarDate().Month)  * 30 + BarDate().Day- d1) <= (day_in_w+step)))
{

   /// ПРАВИЛО 1
   if ( (CurrentPosition() == 0) && (MY.HMA(Input1.Close, N).GetValue("HMA", 0) > MY.HMA(Input1.Close, N).GetValue("HMA", 1)) )
   {
      EnterLong();
   }

   /// ПРАВИЛО 2
   if ( (CurrentPosition() == 0) && (MY.HMA(Input1.Close, N).GetValue("HMA", 0) < MY.HMA(Input1.Close, N).GetValue("HMA", 1)) )
   {
      EnterShort();
   }

   /// ПРАВИЛО 3
   if ( (CurrentPosition() < 0) && (MY.HMA(Input1.Close, N).GetValue("HMA", 0) > MY.HMA(Input1.Close, N).GetValue("HMA", 1))  )
   {
      EnterLong();
   }

   /// ПРАВИЛО 4
   if ( (CurrentPosition() > 0) && (MY.HMA(Input1.Close, N).GetValue("HMA", 0) < MY.HMA(Input1.Close, N).GetValue("HMA", 1)))
   {
      EnterShort();
   }

}
else
{
   //if (CurrentPosition() != 0) ClosePosition();
}
}





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

ниже исследования изменения оптимального периода HMA с сентября по настоящее время для инструмента SNGS 20мин
ширина окна 30 дней, шаг 30 дней
7_1.png



ширина окна 30 дней, шаг 7 дней
30_1.png
30_1.png (110.32 КБ) 21687 просмотров



ширина окна 30 дней, шаг 1 дннь
30_7.png
30_7.png (65.18 КБ) 21687 просмотров



ширина окна 7 дней, шаг 1 дннь
30_30.png
30_30.png (53.43 КБ) 21687 просмотров


не разобрался как прятать эти простыни под сполер
up: исправил

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

if (( ( ( (BarDate().Year * 12.0 + BarDate().Month)  * 30 + BarDate().Day)- d1) >= ((step)) ) && ( ((BarDate().Year * 12.0 + BarDate().Month)  * 30 + BarDate().Day- d1) <= (day_in_w+step)))

на

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

if (( ( ( (BarDate().Year * 12.0 + BarDate().Month)  * 30 + BarDate().Day)- d1) > ((step)) ) && ( ((BarDate().Year * 12.0 + BarDate().Month)  * 30 + BarDate().Day- d1) <= (day_in_w+step)))