Тестер выдает результат отличный от едичного прогона при тех же параметрах. - страница 2

 

В результате получаем файл, sing.

И в нем разное количество строк. Чего быть ну никак не должно!

 
TVA_11:

В результате получаем файл, sing.

И в нем разное количество строк. Чего быть ну никак не должно!


Смотрим первый лист, я там исходник для теста выложил. :)
 
И где у Вас в коде место "точного контроля срабатывания на открытии бара"?

По коду видно, что явный контроль срабатывания на открытии бара текущего таймфрейма (а таймфрейм H4) был закомментирован и вставлен контроль открытия минутки (M1). Это означает, что нет никакого контроля (М1 - это совсем не H4) по срабатыванию на открытии бара.
int start()
  {
//   if(Volume[0]>1) return(0);    
   if(iVolume(NULL,PERIOD_M1,0)>1) return(0);
Я теперь и не знаю, что же именно я тестирую == насколько это равно реальности!
Цепь мелких, но важных допущений и невнимательность трейдеров часто приводят к таким вопросам. Как только трейдер задумывается о доказательствах (вместо оперирования допущениями и общими рассуждениями), то обычно все встает на свои места.

Я уже показал постом выше, что изменение рыночных окружений (свопы, спред, минимальный отступ от рынка) явным образом изменяет результат сделок в прошлом. Но это мог легко самостоятельно выяснить любой трейдер, который бы просто проанализировал несколько расходящихся сделок для предоставления доказательств. В первую очередь доказательств для себя...
 
TVA_11:


Привет Renat!

double perceptron()

...

if(Volume[0]>1) return;

SSA[4]=iMA(NULL,0,Lag/5,0,MODE_SMA,PRICE_MEDIAN,1);
FileWrite(handle, SSA[4]);

Вот у меня где явный контроль. Перенес для верности!

 
Renat

// if(Volume[0]>1) return(0);
if(iVolume(NULL,PERIOD_M1,0)>1) return(0);
int ticket = -1;

// check for opened position
int total = OrdersTotal();

if (Volume[0]==1) {per=perceptron(); sumx = 1;} - а вот еще, тоже контроль.

Я файл переделал под тест. Так то смысл, в таком распределении контроля был.

Но как файл для теста, мне кажется, он должен работать корректно!

 
TVA_11:

Вот у меня где явный контроль. Перенес для верности!


Вот когда раскомментируете первую строку функции start и уберете вторую, то код будет корректным. А пока код ошибочен (не соблюдается правило контроля срабатывания только и только на открытии бара) вне зависимости от того, что где-то там внутри что-то еще проверяется.
int start()
  {
//   if(Volume[0]>1) return(0);    
   if(iVolume(NULL,PERIOD_M1,0)>1) return(0);
Оформляйте MQL4 код в соответствующем виде, пожалуйста. Для этого есть кнопка MQL на панели редактора.


Но как файл для теста, мне кажется, он должен работать корректно!
Программист обычно самостоятельно разбирается в деталях и доказывает себе свои предположения. А Вы упорно заменяете разбирательства и доказательства неопределенным "мне кажется". Так дело не пойдет.

Перечитайте статьи в соответствующем разделе, пожалуйста.
 
Renat:
TVA_11:

Вот у меня где явный контроль. Перенес для верности!


Вот когда раскомментируете первую строку функции start и уберете вторую, то код будет корректным. А пока код ошибочен (не соблюдается правило контроля срабатывания только и только на открытии бара) вне зависимости от того, что где-то там внутри что-то еще проверяется.
int start()
  {
//   if(Volume[0]>1) return(0);    
   if(iVolume(NULL,PERIOD_M1,0)>1) return(0);
Оформляйте MQL4 код в соответствующем виде, пожалуйста. Для этого есть кнопка MQL на панели редактора.


Но как файл для теста, мне кажется, он должен работать корректно!
Программист обычно самостоятельно разбирается в деталях и доказывает себе свои предположения. А Вы упорно заменяете разбирательства и доказательства неопределенным "мне кажется". Так дело не пойдет.

Перечитайте статьи в соответствующем разделе, пожалуйста.


Renat не обижайся!

Сделал как ты сказал. Раскоменнтировал указанную тобой строчку.

Ничего не изменилось. Файлы получаются по количеству строк разные. .

Тоесть выходит что имеется разное количество баров. Чего быть не должно.

 

Работаю по котировкам InterbankFX.

Если это имеет значение.

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

//+------------------------------------------------------------------+
//|                                                CalculateBras.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net/ru/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net/ru/"
 
int CalculatedBars=0;
int TimeFrame=240;//  H4
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Print("Пройдено ",CalculatedBars," баров на периоде ",TimeFrame," минут");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  static datetime openTime=0;
//----
   if (iTime(NULL,TimeFrame,0)!=openTime)
      {
      CalculatedBars++;
      openTime=iTime(NULL,TimeFrame,0);
      }
//----
   return(0);
  }
//+------------------------------------------------------------------+


Компилируем, запускаем тестирование и видим, что независимо от метода тестирования (Open Price, Control Points, Every Tick) и независимо от периода на котором происходит тестирование (H1, M15, M30), мы всегда проходим одно и тоже количество баров на заданном периоде (в данном случае, четырехчасовки). См. видео.

 

#property copyright "Copyright © 2006, Yury V. Reshetov ICQ:282715499 http://reshetov.xnet.uz/"
#property link "http://reshetov.xnet.uz/"

#include <stderror.mqh>
#include <stdlib.mqh>

int handle;

double arryTimeSeries[],SSA[];

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
ArrayResize(arryTimeSeries,6000);
ArrayResize(SSA,6000);
handle = FileOpen("sing", FILE_CSV|FILE_WRITE,';');

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{

if(Volume[0]>1) return(0);
if(iVolume(NULL,PERIOD_M1,0)>1) return(0);

if (Volume[0]==1) {perceptron();}
}

//+------------------------------------------------------------------+
//| The PERCEPTRON - a perceiving and recognizing function |
//+------------------------------------------------------------------+
double perceptron()
{

if(Volume[0]>1) return;

SSA[4]=iMA(NULL,0,6,0,MODE_SMA,PRICE_MEDIAN,1);
FileWrite(handle, SSA[4]);
return(0);
}

Вот сократил до минимума!

Пока выходит что Volume, в отличие от iTime - работает не корректно. Спасибо за идею правильного контроля. Попробую использовать.

А файл, все же проверьте! Он счас точно понятен.