Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexey Azarnin
233
Alexey Azarnin  

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

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

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

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

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

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

Vladimir Karputov
Модератор
80561
Vladimir Karputov  
monk988:

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

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

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

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

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


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



Alexey Azarnin
233
Alexey Azarnin  
barabashkakvn:

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



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

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

Vladimir Karputov
Модератор
80561
Vladimir Karputov  
monk988:

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

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

Режим тестирования в тестере какой? Попробуйте режим "все тики" и выключить галочку "задержки".
Alexey Azarnin
233
Alexey Azarnin  
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
Модератор
80561
Vladimir Karputov  
monk988:

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

 

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

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

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

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

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

Vladimir Karputov
Модератор
80561
Vladimir Karputov  
monk988:

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

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

Тут уже без выкладки кода советника не обойтись.
Slava
Модератор
7050
Slava  
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
8885
Ivan Vagin  
есть вариант с плавающим спредом
проблема давняя
тестер таким образом моделирует рыночные условия
можно попробовать тестирование с фиксированным спредом

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