¿Es posible combinar la depuración y el comprobador? Es decir, si inicio con F5, el probador no se inicia por supuesto. Y si inicio el exprrt en el tester, los puntos de ruptura son ignorados. ¿O estoy haciendo algo mal?
¿Sólo en tiempo real en la demo? ¿Qué pasa con la depuración en situaciones interesantes?
Al principio estaba muy entusiasmado con el depurador, pero estoy volviendo a depurar impresiones. No se ve ninguna otra técnica de depuración. - Frustrante.
Estudiando el Asesor Experto suministrado como ejemplo, MovingAverage. Todo en él es hermoso. Pregunta sobre el probador.
Este EA analiza la vela sólo en el primer tick. He notado que algunas situaciones se deslizan sin procesar. Resulta que un raro candelabro nace del primer tick. ¿Es un efecto de conectividad, un fallo mío o del probador?
Aparentemente, para procesar una vela sólo al nacer, es decir, una vez, la última vela procesada debería almacenarse en una variable estática?
P/S/ Apenas empiezo a aprender el idioma, de ahí las preguntas tan tediosas.
Hola, estoy escribiendo un EA para ver si puedo llegar a tiempo para el campeonato. Escribí un código simple, que utiliza 2 indicadores personalizados, pero el valor de estos indicadores es 0, por lo que el comercio no se hace.
//+------------------------------------------------------------------+//| trend_masim.mq5 |//| Copyright 2010, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2010, MetaQuotes Software Corp."#property link "http://www.mql5.com"#property version "1.00"inputint period =48;
inputint period1 =30;
inputint sl=200;
inputdouble lot=0.1;
inputlong magicBUY1=102;
inputint magicSELL1=202;
inputstring sim="eur";
double ind1[];
double ind2[];
int hind1;
int hind2;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
hind1=iCustom("EURUSD",PERIOD_H1,"trend_v3_5",period);
hind2=iCustom("EURUSD",PERIOD_H1,"trend_v3",4);
return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
IndicatorRelease(hind1);
IndicatorRelease(hind2);
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+int bar;
double MAX,MIN,H,A0,A1,A2;
voidOnTick()
{
int i, j,jj, k, g, q, ticket,l;
double stop;
MqlTradeRequest mrequest;
MqlTradeResult mresult;
MqlTick latest_price;
ArraySetAsSeries(ind1,true);
ArraySetAsSeries(ind2,true);
MAX=CopyBuffer(hind1,2,0,3,ind1);
MIN=CopyBuffer(hind2,0,0,3,ind2);
SymbolInfoTick(_Symbol,latest_price);
//BUYif (PositionSelect(_Symbol)==1 && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY ){jj=1;} //определяет если позиция BUYif (jj==0 ){
if ( ind2[1]>ind1[1]){ // условие на покупкуPrint("индикатор=",ind2[1]," ",ind1[1]);
mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // последняя цена ask
mrequest.sl = NormalizeDouble(latest_price.ask - sl*_Point,_Digits); // Stop Loss
mrequest.tp = NormalizeDouble(0,_Digits); // Take Profit
mrequest.symbol = _Symbol; // символ
mrequest.volume = lot; // количество лотов для торговли
mrequest.magic = magicBUY1; // Magic Number
mrequest.type = ORDER_TYPE_BUY; // ордер на покупку
mrequest.type_filling = ORDER_FILLING_AON; // тип исполнения ордера - все или ничего
mrequest.deviation=10; // проскальзывание от текущей цены//--- отсылаем ордерOrderSend(mrequest,mresult);
GlobalVariableSet( "k11"+sim,Bars2);
GlobalVariableSet( "bar11"+sim,Bars("EURUSD",NULL));
}}
}
//+------------------------------------------------------------------+
Este EA analiza una vela sólo en el primer tick. Me he dado cuenta de que algunas situaciones se cuelan sin procesar. Resulta que un raro candelabro nace del primer tick. ¿Es un efecto de conectividad, un fallo mío o del probador?
Aparentemente, para procesar una vela sólo al nacer, es decir, una vez, la última vela procesada debería almacenarse en una variable estática?
Es mejor seguir la aparición de una nueva barra cambiando el tiempo de la misma, almacenándolo previamente en una variable estática.
Pero esto es lo que no entiendo: cómo depurar los EAs. Está claro que no es el sistema lo que se está probando, sino los fallos del programa. Por ejemplo, no está claro por qué el programa no entra en una determinada rama, ¿por qué? ¿Tengo que poner diferentes sellos de depuración, luego buscarlos en el diario, luego poner otros sellos, esperar un tiempo determinado hasta que el programa funcione y volver a buscar en el diario?
¿Cuál es la mejor manera de buscar errores en los programas?
Hola, estoy escribiendo un EA para ver si puedo llegar a tiempo para el campeonato. Escribí un código simple, que utiliza 2 indicadores personalizados, pero el valor de estos indicadores es 0, por lo que el comercio no se hace.
Para depurar su código he sustituido los indicadores personalizados por MA:
if (PositionSelect(_Symbol)==1 && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY ){jj=1;} //определяет если позиция BUY if (jj==0 ){ if ( ind2[1]>ind1[1]){ // условие на покупку Print("индикатор=",ind2[1]," ",ind1[1]); mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // последняя цена ask mrequest.sl = NormalizeDouble(latest_price.ask - sl*_Point,_Digits); // Stop Loss mrequest.tp = NormalizeDouble(0,_Digits); // Take Profit mrequest.symbol = _Symbol; // символ mrequest.volume = lot; // количество лотов для торговли mrequest.magic = magicBUY1; // Magic Number mrequest.type = ORDER_TYPE_BUY; // ордер на покупку mrequest.type_filling = ORDER_FILLING_AON; // тип исполнения ордера - все или ничего mrequest.deviation=10; // проскальзывание от текущей цены //--- отсылаем ордер OrderSend(mrequest,mresult);
¿Así que se trata de los indicadores? El probador me da un error
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Array fuera de rango en 'trend_v3.mq5' (71,9) 2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Array fuera de rango en 'trend_v3_5.mq5' (83,9)
Creo que es más correcto comprobar la hándicap de las asas antes de copiar la información de los índices. También sería mejor comprobar la disponibilidad de estos datos ....
No sé si esta es la pregunta correcta.
¿Es posible combinar la depuración y el comprobador? Es decir, si inicio con F5, el probador no se inicia por supuesto. Y si inicio el exprrt en el tester, los puntos de ruptura son ignorados. ¿O estoy haciendo algo mal?
No sé si esta es la pregunta correcta.
¿Es posible combinar la depuración y un probador?
No por el momento.
¿Sólo en tiempo real en la demo? ¿Qué pasa con la depuración en situaciones interesantes?
Al principio estaba muy entusiasmado con el depurador, pero estoy volviendo a depurar impresiones. No se ve ninguna otra técnica de depuración. - Frustrante.
Estudiando el Asesor Experto suministrado como ejemplo, MovingAverage. Todo en él es hermoso. Pregunta sobre el probador.
Este EA analiza la vela sólo en el primer tick. He notado que algunas situaciones se deslizan sin procesar. Resulta que un raro candelabro nace del primer tick. ¿Es un efecto de conectividad, un fallo mío o del probador?
Aparentemente, para procesar una vela sólo al nacer, es decir, una vez, la última vela procesada debería almacenarse en una variable estática?
P/S/ Apenas empiezo a aprender el idioma, de ahí las preguntas tan tediosas.
Hola, estoy escribiendo un EA para ver si puedo llegar a tiempo para el campeonato. Escribí un código simple, que utiliza 2 indicadores personalizados, pero el valor de estos indicadores es 0, por lo que el comercio no se hace.
Lunatic:
Este EA analiza una vela sólo en el primer tick. Me he dado cuenta de que algunas situaciones se cuelan sin procesar. Resulta que un raro candelabro nace del primer tick. ¿Es un efecto de conectividad, un fallo mío o del probador?
Aparentemente, para procesar una vela sólo al nacer, es decir, una vez, la última vela procesada debería almacenarse en una variable estática?
Es mejor seguir la aparición de una nueva barra cambiando el tiempo de la misma, almacenándolo previamente en una variable estática.
Se pueden encontrar ejemplos en IsNewBar, y en el artículo Limitaciones y comprobaciones en los EAs.
La aparición de una nueva barra se rastrea mejor cambiando la hora de la barra, habiéndola guardado previamente en una variable estática.
Se pueden encontrar ejemplos en IsNewBar, y en el artículo Límites y controles en los EAs.
Gracias, está claro.
Pero esto es lo que no entiendo: cómo depurar los EAs. Está claro que no es el sistema lo que se está probando, sino los fallos del programa. Por ejemplo, no está claro por qué el programa no entra en una determinada rama, ¿por qué? ¿Tengo que poner diferentes sellos de depuración, luego buscarlos en el diario, luego poner otros sellos, esperar un tiempo determinado hasta que el programa funcione y volver a buscar en el diario?
¿Cuál es la mejor manera de buscar errores en los programas?
Hola, estoy escribiendo un EA para ver si puedo llegar a tiempo para el campeonato. Escribí un código simple, que utiliza 2 indicadores personalizados, pero el valor de estos indicadores es 0, por lo que el comercio no se hace.
Para depurar su código he sustituido los indicadores personalizados por MA:
Y se ha corregido el copiado de valores en el array:
Ahora hay valores indicadores:
Para depurar su código he sustituido los indicadores personalizados por MA:
Y corregido el copiado de valores en el array:
Ahora hay valores indicadores:
¿Así que se trata de los indicadores? El probador me da un error
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Array fuera de rango en 'trend_v3.mq5' (71,9)
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Array fuera de rango en 'trend_v3_5.mq5' (83,9)
A m_a_sim
Creo que es más correcto comprobar la hándicap de las asas antes de copiar la información de los índices. También sería mejor comprobar la disponibilidad de estos datos ....