Проблеммы с тестером - страница 2

 
Ну вот разобрался с URL.
Еще раз повторяю, что в эксперте ставилось, чтобы выводил данные индикаторов и трассу их данных в эксперте. Никаких SendOrder не прописывалось. А вот что открылось после теста. Почему так? Кстати такая фигня самопроизвольно лезет и при постановке ордеров, но там она еще и считается и на выходе образуется огромный минус. Почему так? Ответьте хотя бы на этот вопрос.
 
К сожалению, еще раз приходится сообщать: если есть какой-либо вопрос по коду, то необходимо приводить _полный_ код эксперта. Иначе никто на отвлеченные и неконкретные вопросы отвечать не будет.
 
Да вот пожалуйста привожу коды индикатора и эксперта:

Индикатор:
//----------as_ch_TS(LH)--------------------
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 PeachPuff
#property indicator_color2 PeachPuff
#property indicator_color3 Violet
//-----------------------------
extern int d=20;
//-----------------------------
double ha[],la[],sa[],hi,li,si,di;
int fs,cbi;
//----------------------------------------------
int init()  {   
SetIndexStyle(0,DRAW_LINE);   
SetIndexBuffer(0,ha);   
SetIndexBuffer(1,la);
SetIndexBuffer(2,sa);  
di=d*Point/2;
return(0);  }
//================================
int start()  {   
//--------------------------------
int counted_bars=IndicatorCounted();
	if (counted_bars < 0 ) return(-1);	
	if ( Bars < 100 ) return(-1);
   int cbi = Bars - 2;
	if (counted_bars>2) {cbi=Bars-counted_bars; }
//------------------------------------
for(int i=cbi; i>=0; i--){                              
if (Low[i]>=(sa[i+1]+di)) si=Low[i]-di;
if (High[i]<=(sa[i+1]-di)) si=High[i]+di;
si=NormalizeDouble(si,4);
//----------------------------------
if (i>Bars-5) si=(High[i]+Low[i])/2;
ha[i]=si+di;
la[i]=si-di;
sa[i]=si;
}   
//------------------------------------
return(0);  }



Эксперт:

//-------as_Test-ch_TS(LH)--------------------------
extern int d=20;
//-----------------------------
extern double TakeProfit = 200;
extern double StopLoss = 200;
extern double Lots = 1;
//-----------------------------
double ha,la,sa,sap,si,hi,li,di;
int nn,kk,fs; 
//***************************************************************
int start() {
int cnt, ticket, total;
//----------------------------------
sa=iCustom(NULL,0,"as_ch_TS(LH)",d,2,0); 
sap=iCustom(NULL,0,"as_ch_TS(LH)",d,2,1);
ha=iCustom(NULL,0,"as_ch_TS(LH)",d,0,0);
la=iCustom(NULL,0,"as_ch_TS(LH)",d,1,0);
if (sa>sap) fs=1;   
if (sa<sap) fs=2; 
//----------------------------------------
if (fs==1) {ObjectCreate("ar"+Bars,OBJ_ARROW,0,Time[0],sa); ObjectSet("ar"+Bars,OBJPROP_ARROWCODE,158); ObjectSet("ar"+Bars,OBJPROP_COLOR,Lime);}
if (fs==2) {ObjectCreate("ar"+Bars,OBJ_ARROW,0,Time[0],sa); ObjectSet("ar"+Bars,OBJPROP_ARROWCODE,158); ObjectSet("ar"+Bars,OBJPROP_COLOR,Yellow);}
ObjectCreate("ar2"+Bars,OBJ_ARROW,0,Time[0],ha); ObjectSet("ar2"+Bars,OBJPROP_ARROWCODE,158); ObjectSet("ar2"+Bars,OBJPROP_COLOR,Blue);
ObjectCreate("ar3"+Bars,OBJ_ARROW,0,Time[0],la); ObjectSet("ar3"+Bars,OBJPROP_ARROWCODE,158); ObjectSet("ar3"+Bars,OBJPROP_COLOR,Red);
//*******************************************************************************************
total=OrdersTotal();
if(total<1) { 
kk=0; 
//--------------------------
if (fs==1) nn=1;
if (fs==2) nn=2; 
if (nn==1) {ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"as_ch_TS(LH)",0,0,Blue);}
if (nn==2) {ticket=OrderSend (Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"as_ch_TS(LH)",0,0,Red);}
//--------------------------
return(0);}
//*******************************************************************************************
for(cnt=0;cnt<total;cnt++) {
nn=0; OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
//-------------------------------------------------------------
if(OrderType()==OP_BUY) {if (fs==2) {kk=2; nn=2;}
if (kk==2) {OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); nn=1; return(0);}}   
if(OrderType()==OP_SELL) {if (fs==1) {kk=1; nn=1;}
if (kk==1) {OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); nn=2; return(0);}}
}
//*******************************************************************************************
return(0);}
//+------------------------------------------------------------------+



А вот картинка результотов теста:



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

Заранее благодарю за ответ.
Поздравляю всю команду МТ с наступающим католическим Рождеством!
С уважением Александр.

 
ANG3110, дак это Ваш зигзаг на пауке мне понравился? Если да, то респект!
 
Уважаемый ANG3110,
а почему Вы в советнике берёте значение индикатора на нулевом баре
sa=iCustom(NULL,0,"as_ch_TS(LH)",d,2,0);


а точку рисуете на первом баре

ObjectCreate("ar"+Bars,OBJ_ARROW,0,Time[1],sa);
 
Renat, ну я тоже высылал в вашу поддержку полный код с полным описанием ошибки, логами и местом возникновения. И что? ни ответа ни привета а времени прошла масса. а отложенные ордера как иногда не открывались, так и не открываются.
 
Renat, ну я тоже высылал в вашу поддержку полный код с полным описанием ошибки, логами и местом возникновения. И что? ни ответа ни привета а времени прошла масса. а отложенные ордера как иногда не открывались, так и не открываются.

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

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

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

Конечно же, при нахождении фактических ошибок в MQL4 мы все исправляем.
 
Спасибо KIM что обнаружили несоответствие,- я много раз менял режимы, и забыл подправить, хотя где рисует в пределах одного бара это не так сильно важно. Но то что Вы заметили - сейчас подправлю. Да ЗигЗаги - мои.


Уважаемый ANG3110,
а почему Вы в советнике берёте значение индикатора на нулевом баре
sa=iCustom(NULL,0,"as_ch_TS(LH)",d,2,0);


а точку рисуете на первом баре

ObjectCreate("ar"+Bars,OBJ_ARROW,0,Time[1],sa);

 
...хотя где рисует в пределах одного бара это не так сильно важно

Я проверил. Так и есть. Не особо важно.

Попробовал на Вашем ЗигЗаге советника забацать. Точнее на каналах, которые там рисуются. Значения брал через iCustom(). Получилось много неправильных входов, суть неправильности которых понял благодаря этой Вашей теме. Сейчас с нетерпением жду ответа разработчиков и на всякий случай внедряю индюка в тело советника.
 
Как я сам понял - ошибка возникает из-за того, что на 0-м баре сигнал поступающий от тестера, в первое мгновение - содержит в себе Close, High, Low и Open - одновременно - что и вызывает переключение флага fs - в эксперте (спасибо разработчикам, в новой инструкции этот процесс описан более подробно). И чтобы этого не происходило и был бы помехоустойчивый режим, нужно задержать данные индикатора на один бар. То есть код в индикаторе после start должен выглядеть следующим образом:
for(int i=cbi; i>=0; i--){                              
if (Low[i+1]>=(si+di)) si=Low[i+1]-di;
if (High[i+1]<=(si-di)) si=High[i+1]+di;
si=NormalizeDouble(si,4);
//----------------------------------
if (i>Bars-5) si=(High[i]+Low[i])/2;
ha[i]=si+di;
la[i]=si-di;
sa[i]=si;
}   



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


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