Оптимизировать торговую стратегию - страница 3

 
Roman Shiredchenko:

да потому что время бара никогда не будет равно этим значениям:

Почему нет. Это время открытия бара на М1 Разве нет?

 
yiduwi:

Почему нет. Это время открытия бара на М1 Разве нет?

да. кстати, мне почему- то там секунды показались ... :-)
 
yiduwi:

Здравствуйте.

Торгую без использования советников, однако, возникла идея оптимизировать стратегию в тестере. Анализируя свои сделки предположил что с\л и т\п можно было ставить на иные цены. Хочу проверить своё предположение в тестере, на оптимизации этих двух параметров. Есть некий результат моей торговли по евродоллару за 7 месяцев. Как сделать чтобы советник   MACD Sample.mq4 из терминала, открывал на истории в 7 месяцев там позиции, где я их открывал? В советник добавил стоп лосс.

Нагуглите - ***
Следуйте инструкциям.
Радуйтесь.
Тестируйте лучше вручную полностью.
 
Martin Cheguevara:
Нагуглите - ***
Следуйте инструкциям.
Радуйтесь.
Тестируйте лучше вручную полностью.

Уже есть такая рекомендация. Вариант не подходит для оптимизации.

 

большими блоками всё действо смотрится так:

- (пользователь) сохраняет историю сделок в CSV\

- (советник в тестере) в OnInit читает историю из CSV, делит её на сигналы (открыть/закрыть) и итог сортирует по времени исполнения

- (советник в тестере) в OnTick смотрит в отсортированом массиве "не наступил ли уже сигнал" и в соотв с этим открывает/закрывает новые сделки с новыми опциями.

- (пользователь) по результату думает какие опции лучше.

но уже три страницы и никто не может поработать с CSV и массивами..

PS/ то что (советник в тестере) может быть сделано как индикатор-стрелочник, что более чем разумно.

 
Maxim Kuznetsov:

PS/ то что (советник в тестере) может быть сделано как индикатор-стрелочник, что более чем разумно. 

Время открытия позиций уже сохранил в файл "file1.txt"

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

 
Maxim Kuznetsov:

но уже три страницы и никто не может поработать с CSV и массивами..

Да, только у меня даты сохранены в txt файле.

Попытался в ините получить данные в массив а затем сравнить время. Что тут не так?

int      ind=0;
int      size=0; 
datetime time_buff[];
double   upbuff[];
//+------------------------------------------------------------------+ 
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- откроем файл 
   ResetLastError(); 
   int file_handle=FileOpen("file1.txt",FILE_TXT|FILE_READ);
   if(file_handle!=INVALID_HANDLE) 
     { 
      size=(int)FileReadNumber(file_handle); 
      //--- выделим память для массив
      ArrayResize(time_buff,size); 
      //--- прочитаем данные из файла 
      for(int i=0;i<size;i++) 
        { 
         //--- время сигнала 
         time_buff[i]=StringToTime(FileReadString(file_handle));
        } 
      //--- закрываем файл 
      FileClose(file_handle); 
     } 
   else 
     { 
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d","file1.txt",GetLastError()); 
      return(INIT_FAILED); 
     } 
//--- привязка массивов 
   SetIndexBuffer(0,upbuff,INDICATOR_DATA); 
//--- зададим код символа для отрисовки в PLOT_ARROW 
   PlotIndexSetInteger(0,PLOT_ARROW,241); 
//---- установка значений индикатора, которые не будут видимы на графике 
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); 
//--- 
   return(INIT_SUCCEEDED); 
  } 
//+------------------------------------------------------------------+ 
//| Custom indicator iteration function                              | 
//+------------------------------------------------------------------+ 
int OnCalculate(const int rates_total, 
                const int prev_calculated, 
                const datetime &time[], 
                const double &open[], 
                const double &high[], 
                const double &low[], 
                const double &close[], 
                const long &tick_volume[], 
                const long &volume[], 
                const int &spread[]) 
  { 
   ArraySetAsSeries(time,false);
//--- цикл для еще необработанных баров 
   for(int i=prev_calculated;i<rates_total;i++) 
     { 
      //--- по умолчанию 0 
      upbuff[i]=0; 
      //--- проверка, есть ли еще данные 
      if(ind<size) 
        { 
         for(int j=ind;j<size;j++) 
           { 
            //--- если даты совпадают, то рисуем стрелку
            if(time[i]==time_buff[j]) 
              { 
                  upbuff[i]=high[i]; 
               //--- увеличим счетчик 
               ind=j+1; 
               break; 
              } 
           } 
        } 
     } 
//--- return value of prev_calculated for next call 
   return(rates_total); 
  }
 
yiduwi:

Да, только у меня даты сохранены в txt файле.

Попытался в ините получить данные в массив а затем сравнить время. Что тут не так?

FileReadNumber точно не так :-) точнее вообще подход не очень.

определитесь с тем что и как вы пишите/читаете в файлах. Если бинарные данные - то ReadNumber/ReadStruct. Если текстовые то ReadString и далее разбор строки. Если CSV - то ReadString по числу полей или до IsLineEnding()

вы видимо ожидали что первая запись в файле = кол-во строк, а далее строки содержащие даты ? но промахнулись

Причина обращения: