Скачать MetaTrader 5

Разная работа тестера на разных компьютерах

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй задачу в сервисе Фриланс и разработчики выполнят ее.
Alexey Azarnin
92
Alexey Azarnin 2014.06.02 08:43 

Помогите пожалуйста разобраться.

Ситуация такая, один и тот же код тестирую на разных компьютерах - результат тестера разный.

Начал разбираться - на одном из терминалов не всегда входит по правилам.

Код абсолютно одинаковый, настройки сова и тестера одинаковые, брокер один.

Дошло до того, что удалил обе платформы, установил заново, закидываю один и тот же код - результаты разные. 

неправильноправильно 

Vladimir Karputov
Модератор
46204
Vladimir Karputov 2014.06.02 09:01  
monk988:

Помогите пожалуйста разобраться.

Ситуация такая, один и тот же код тестирую на разных компьютерах - результат тестера разный.

Начал разбираться - на одном из терминалов не всегда входит по правилам.

Код абсолютно одинаковый, настройки сова и тестера одинаковые, брокер один.

Дошло до того, что удалил обе платформы, установил заново, закидываю один и тот же код - результаты разные. 


А нет ли в коде операций сравнения с вещественными типами (double, float)? https://www.mql5.com/ru/docs/basis/types/double



Alexey Azarnin
92
Alexey Azarnin 2014.06.02 09:16  
barabashkakvn:

А нет ли в коде операций сравнения с вещественными типами (double, float)? https://www.mql5.com/ru/docs/basis/types/double



Только в трейлинге, но по сути он не должен на открытие влиять

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

Vladimir Karputov
Модератор
46204
Vladimir Karputov 2014.06.02 09:29  
monk988:

Только в трейлинге, но по сути он не должен на открытие влиять

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

Режим тестирования в тестере какой? Попробуйте режим "все тики" и выключить галочку "задержки".
Alexey Azarnin
92
Alexey Azarnin 2014.06.02 09:47  
barabashkakvn:
Режим тестирования в тестере какой? Попробуйте режим "все тики" и выключить галочку "задержки".

Вот такой режим тестирования на обоих терминалах

режим тестирования 

 

 Вот условия на вход:

int handle_ma;

int handle_open_bands;

double ma_buffer[];

double open_bands[];   

ArraySetAsSeries(ma_buffer,true);

ArraySetAsSeries(open_bands,true); 

 

handle_ma = iMA(NULL,timeframe,PeriodMa,0,MODE_EMA,PRICE_CLOSE);

handle_open_bands = iBands(NULL,timeframe,BandsOpen,0,DevOpenPos,PRICE_CLOSE);

CopyBuffer(handle_ma,0,0,2,ma_buffer);

CopyBuffer(handle_open_bands,1,0,2,open_bands);

   

ma = ma_buffer[1];

bandsUpper = open_bands[1];

if (ma >= bandsUpper )

    TradeShort = true;

   else TradeShort = false; 

 

Как видно из первого рисунка, машка ниже верхнего канала боллинджера, то есть вход запрещен. На втором рисунке сделки заходят правильно.

Может поможет чем, на Windows 7 правильно тестирует, на Windows 8 и Windows Server 2012 неправильно. 

Vladimir Karputov
Модератор
46204
Vladimir Karputov 2014.06.02 10:23  
monk988:

Вот такой режим тестирования на обоих терминалах

 

Как видно из первого рисунка, машка ниже верхнего канала боллинджера, то есть вход запрещен. На втором рисунке сделки заходят правильно.

Может поможет чем, на Windows 7 правильно тестирует, на Windows 8 и Windows Server 2012 неправильно. 

  1. Правильно вставляем код на форуме.
  2. Какой тип у переменных ma и bandsUpper? Если тип double, то снова читаем https://www.mql5.com/ru/docs/basis/types/double.
Alexey Azarnin
92
Alexey Azarnin 2014.06.02 11:03  
barabashkakvn:
  1. Правильно вставляем код на форуме.
  2. Какой тип у переменных ma и bandsUpper? Если тип double, то снова читаем https://www.mql5.com/ru/docs/basis/types/double.

Нашел в чем проблема - советник при наступлении нового бара брал значения индикаторов не с первого бара (как установлено шифтом) а со второго. Потому что блок обработки тиков был перед блоком обработки бара в функции OnTick(). То есть на самом первом тике нового бара робот обрабатывал устаревшие данные уже ставшего вторым бара.

Но вопрос остается, почему на одном терминале все обрабатывалось нормально, а на втором - нет? 

Vladimir Karputov
Модератор
46204
Vladimir Karputov 2014.06.02 11:10  
monk988:

Нашел в чем проблема - советник при наступлении нового бара брал значения индикаторов не с первого бара (как установлено шифтом) а со второго. Потому что блок обработки тиков был перед блоком обработки бара в функции OnTick(). То есть на самом первом тике нового бара робот обрабатывал устаревшие данные уже ставшего вторым бара.

Но вопрос остается, почему на одном терминале все обрабатывалось нормально, а на втором - нет? 

Тут уже без выкладки кода советника не обойтись.
Slawa
Модератор
6843
Slawa 2014.06.03 08:39  
handle_ma = iMA(NULL,timeframe,PeriodMa,0,MODE_EMA,PRICE_CLOSE);
handle_open_bands = iBands(NULL,timeframe,BandsOpen,0,DevOpenPos,PRICE_CLOSE);

CopyBuffer(handle_ma,0,0,2,ma_buffer);
CopyBuffer(handle_open_bands,1,0,2,open_bands);

1. Вы каждый раз, на каждой итерации, создаёте индикаторы. Неправильно это. Нужно создавать индикаторы однократно в OnInit

2. Нет ни одной проверки успешности выполнения функций

Ivan Vagin
8888
Ivan Vagin 2014.06.07 07:08  
есть вариант с плавающим спредом
проблема давняя
тестер таким образом моделирует рыночные условия
можно попробовать тестирование с фиксированным спредом

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