É possível combinar depuração e teste? Isto é, se eu começar com F5, o testador não começa, claro. E se eu começar o exprrt no testador, os pontos de ruptura são ignorados. Ou estou a fazer algo de errado?
Então só em tempo real na demonstração? E a depuração em situações interessantes?
No início estava tão entusiasmado com o depurador, mas estou a deslizar de volta para as impressões de depuração. Nenhuma outra técnica de depuração é visível. - Frustrante.
O estudo do Expert Advisor fornecido como exemplo, MovingAverage. Tudo sobre ele é bonito. Pergunta sobre o testador.
Esta EA analisa o candelabro apenas no primeiro tick. Notei que algumas situações são escorregadias sem processamento. Acontece que um castiçal raro nasce do primeiro tique. É um efeito de conectividade, a minha falha ou a do testador?
Aparentemente, para processar uma vela apenas no nascimento, ou seja, uma vez, a última vela processada deve ser armazenada numa variável estática?
P/S/ Apenas a começar a aprender a língua, daí as perguntas tão enfadonhas.
Olá, estou a escrever um EA para ver se consigo chegar a tempo do campeonato. Escrevi algum código simples, utiliza 2 indicadores personalizados, mas o valor destes indicadores é 0, pelo que a troca não é feita.
//+------------------------------------------------------------------+//| 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));
}}
}
//+------------------------------------------------------------------+
Esta EA analisa uma vela apenas no primeiro tique. Notei que algumas situações escapam sem processamento. Acontece que um castiçal raro nasce do primeiro tique. É um efeito de conectividade, a minha falha ou a do testador?
Aparentemente, para processar um castiçal apenas no nascimento, ou seja, uma vez, o último castiçal processado deve ser armazenado numa variável estática?
É melhor acompanhar o aparecimento de um novo bar alterando o tempo do bar, armazenando-o previamente numa variável estática.
Mas eis o que eu não entendo: como depurar EAs. É evidente que não é o sistema que está a ser testado, mas sim os bugs no programa. Por exemplo, não é claro porque é que o programa não entra num determinado ramo - porquê? Preciso de colocar selos de depuração diferentes, depois procurá-los no diário, depois colocar outros selos, esperar um certo tempo até que o programa esteja a funcionar e depois procurar novamente no diário?
Qual é a melhor maneira de procurar erros de programa?
Olá, estou a escrever um EA para ver se consigo chegar a tempo do campeonato. Escrevi algum código simples e usei 2 indicadores personalizados, mas os valores destes indicadores são 0 e nenhuma negociação é executada.
Para depurar o seu código, substituí 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);
Então é tudo sobre os indicadores? O testador está a dar-me um erro
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:00:01 Array fora de alcance em 'trend_v3.mq5' (71,9) 2010.09.01 19:44:36 Core 1 2010.06.01 00:00:00:01 Array fora de alcance em 'trend_v3_5.mq5' (83,9)
Acho que é mais correcto verificar a deficiência das pegas antes de copiar a informação dos índices. Seria também melhor verificar a disponibilidade destes dados ....
Não sei se esta é a pergunta certa.
É possível combinar depuração e teste? Isto é, se eu começar com F5, o testador não começa, claro. E se eu começar o exprrt no testador, os pontos de ruptura são ignorados. Ou estou a fazer algo de errado?
Não sei se esta é a pergunta certa.
É possível combinar a depuração e um testador?
Neste momento, não.
Então só em tempo real na demonstração? E a depuração em situações interessantes?
No início estava tão entusiasmado com o depurador, mas estou a deslizar de volta para as impressões de depuração. Nenhuma outra técnica de depuração é visível. - Frustrante.
O estudo do Expert Advisor fornecido como exemplo, MovingAverage. Tudo sobre ele é bonito. Pergunta sobre o testador.
Esta EA analisa o candelabro apenas no primeiro tick. Notei que algumas situações são escorregadias sem processamento. Acontece que um castiçal raro nasce do primeiro tique. É um efeito de conectividade, a minha falha ou a do testador?
Aparentemente, para processar uma vela apenas no nascimento, ou seja, uma vez, a última vela processada deve ser armazenada numa variável estática?
P/S/ Apenas a começar a aprender a língua, daí as perguntas tão enfadonhas.
Olá, estou a escrever um EA para ver se consigo chegar a tempo do campeonato. Escrevi algum código simples, utiliza 2 indicadores personalizados, mas o valor destes indicadores é 0, pelo que a troca não é feita.
Lunatic:
Esta EA analisa uma vela apenas no primeiro tique. Notei que algumas situações escapam sem processamento. Acontece que um castiçal raro nasce do primeiro tique. É um efeito de conectividade, a minha falha ou a do testador?
Aparentemente, para processar um castiçal apenas no nascimento, ou seja, uma vez, o último castiçal processado deve ser armazenado numa variável estática?
É melhor acompanhar o aparecimento de um novo bar alterando o tempo do bar, armazenando-o previamente numa variável estática.
Exemplos podem ser encontrados no artigo IsNewBar, e no artigo Limitações e verificações em EAs.
O aparecimento de um novo bar é melhor rastreado alterando o tempo do bar, tendo-o previamente guardado numa variável estática.
Exemplos podem ser encontrados em IsNewBar, e o artigo Limites e verificações em EAs.
Obrigado, isso é claro.
Mas eis o que eu não entendo: como depurar EAs. É evidente que não é o sistema que está a ser testado, mas sim os bugs no programa. Por exemplo, não é claro porque é que o programa não entra num determinado ramo - porquê? Preciso de colocar selos de depuração diferentes, depois procurá-los no diário, depois colocar outros selos, esperar um certo tempo até que o programa esteja a funcionar e depois procurar novamente no diário?
Qual é a melhor maneira de procurar erros de programa?
Olá, estou a escrever um EA para ver se consigo chegar a tempo do campeonato. Escrevi algum código simples e usei 2 indicadores personalizados, mas os valores destes indicadores são 0 e nenhuma negociação é executada.
Para depurar o seu código, substituí indicadores personalizados por MA:
E cópia corrigida de valores em matriz:
Agora existem valores indicadores:
Para depurar o seu código, substituí os indicadores personalizados por MA:
E corrigiu a cópia dos valores para a matriz:
Agora existem valores indicadores:
Então é tudo sobre os indicadores? O testador está a dar-me um erro
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:00:01 Array fora de alcance em 'trend_v3.mq5' (71,9)
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:00:01 Array fora de alcance em 'trend_v3_5.mq5' (83,9)
Para m_a_sim
Acho que é mais correcto verificar a deficiência das pegas antes de copiar a informação dos índices. Seria também melhor verificar a disponibilidade destes dados ....