Ошибки, баги, вопросы - страница 343

 
Kairoser:

Добрый день!

После обновления на 420 релиз начал тестировать своего советника и заметил что он почему то начал "сливать". Проанализировал сделки и заметил, что стоп лосс срабатывает по несуществующим ценам. Например, по паре EURUSD установлен стоп лосс на уровне 1.06520, он срабатывает, хотя максимальная цена на этом баре 1.05920. Смотрю дальше и вижу что таких сделок очень много. По такому же принципу (по несуществующим ценам) срабатывает и тейк профит - дельта та же - 600 пунктов. В тестере на графике стрелки вверх и вниз  "висят" в воздухе, далеко от баров.

Скриншот прилагаю.

Проведите тесты на MetaQuotes-Demo, пожалуйста. У Альпари откровенно ошибочная (в спредах) история чартов.
 
Renat:
Проведите тесты на MetaQuotes-Demo, пожалуйста. У Альпари откровенно ошибочная (в спредах) история чартов.
Да, действительно, на сервере MetaQuotes-Demo все отлично работает. Спасибо за помощь.
 

Интересует пару вопросов.

1. В тестере стратегий если используются индикаторы то как отрабатывает система? Сначала рассчитываются все индикаторы к которым указаны хендлы и уже после того запускается OnTick ?

2. Если да то очень не помешал бы функционал сначала запускать OnTick и после командой запускать расчет прикрепленных индикаторов. Таким образом к примеру мне не нужно рассчитывать индикаторы на каждом пятизначном тике а к примеру только на четырех знаке. При запуске OnTick проверяю текущую и предыдущую цену и уже сам решаю запускать или нет расчет индикаторов.

Потому если их много и они достаточно "тяжелые" то в режиме оптимизации кушают ресурсы...

Хотя можно попробовать создавать хенлы в онтик и в конце удалять индикаторы, а при следующем запуске онтик (при необходимости) снова создавать хендлы - и не совсем ясно выиграет ли это в производительности...

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
olyakish:

Интересует пару вопросов.

1. В тестере стратегий если используются индикаторы то как отрабатывает система? Сначала рассчитываются все индикаторы к которым указаны хендлы и уже после того запускается OnTick ?

Да. Более общий ответ - рассчитываются значения всех индикаторов перед каждым вызовом обработчика события:

  • OnTick
  • OnTimer
  • OnChartEvent и так далее
 
olyakish:
2. Если да то очень не помешал бы функционал сначала запускать OnTick и после командой запускать расчет прикрепленных индикаторов. Таким образом к примеру мне не нужно рассчитывать индикаторы на каждом пятизначном тике а к примеру только на четырех знаке. При запуске OnTick проверяю текущую и предыдущую цену и уже сам решаю запускать или нет расчет индикаторов.

Потому если их много и они достаточно "тяжелые" то в режиме оптимизации кушают ресурсы...

Так нельзя. Можете использовать более быстрые режимы генерации тиков для тестирования:

  1. цены OHLC на минутных барах
  2. Только цены открытия тестируемого периода
 
Rosh:

Так нельзя. Можете использовать более быстрые режимы генерации тиков для тестирования:

  1. цены OHLC на минутных барах
  2. Только цены открытия тестируемого периода
Об этих режимах и их особенности я знаю . Просто хотелось ускорить оптимизацию приемлемыми (возможно оптимальными) для меня способами. 
 

Помогите разобраться, не хотят работать функции преобразования данных, написал простенький скрипт для проверки. Билд 420, ОС - 64 бит.

void OnStart()
  {
//---
   int i=0;
   bool res=false;
   string stroka1;
   string stroka2;
   string stroka3;
   string stroka4;
   string stroka5;

   datetime buf1;
   double   buf2;
   double   buf3;
   double   buf4;
   double   buf5;
   
   int filehandle=FileOpen("56451.csv",FILE_READ|FILE_CSV|FILE_ANSI,',',CP_UTF8);

   if(filehandle==INVALID_HANDLE)Print("Ошибка № - ",GetLastError());
   else
     {

      while(!res)
        {
         stroka1 = FileReadString(filehandle);
         stroka2 = FileReadString(filehandle);
         stroka3 = FileReadString(filehandle);
         stroka4 = FileReadString(filehandle);
         stroka5 = FileReadString(filehandle);

         buf1 = StringToTime(stroka1);
         buf2 = StringToDouble(stroka2);
         buf3 = StringToDouble(stroka3);
         buf4 = StringToDouble(stroka4);
         buf5 = StringToDouble(stroka5);

         res=FileIsEnding(filehandle);
         i++;
        }
      FileClose(filehandle);
     }
  }
//+------------------------------------------------------------------+
Файлы:
56451.zip  16 kb
 
sergey1294:

Помогите разобраться, не хотят работать функции преобразования данных, написал простенький скрипт для проверки. Билд 420, ОС - 64 бит.


От кавычек на любом этапе избавьтесь....
 
AlexSTAL:
От кавычек на любом этапе избавьтесь....
А как это сделать?
 
sergey1294:
А как это сделать?

либо что бы их изначально в файле не было, либо при чтении дополнительно применяйте функцию, к примеру:

string StringWithoutQuotes(string Value)
{
   StringTrimLeft(Value);
   StringTrimRight(Value);
   return(StringSubstr(Value, 1, StringLen(Value) - 2));
}

..........

         stroka1 = StringWithoutQuotes(FileReadString(filehandle));
         stroka2 = StringWithoutQuotes(FileReadString(filehandle));
Причина обращения: