È possibile combinare debug e tester? Cioè se inizio con F5, il tester non parte ovviamente. E se avvio l'exprrt nel tester, i breakpoint vengono ignorati. O sto facendo qualcosa di sbagliato?
Quindi solo in tempo reale sulla demo? E il debugging in situazioni interessanti?
All'inizio ero così entusiasta del debugger, ma sto scivolando indietro al debug delle stampe. Non sono visibili altre tecniche di debug. - Frustrante.
Studiando l'Expert Advisor fornito come esempio, MovingAverage, tutto è bellissimo. Domanda sul tester.
Questo EA analizza la candela solo sul primo tick. Ho notato che alcune situazioni sono scivolate senza elaborazione. Si scopre che una rara candela nasce dal primo tick. È un effetto della connettività, un mio difetto o quello del tester?
Apparentemente, per elaborare una candela solo alla nascita, cioè una volta, l'ultima candela elaborata dovrebbe essere memorizzata in una variabile statica?
P/S/ Sto iniziando a imparare la lingua, da qui queste domande noiose.
Ciao, sto scrivendo un EA per vedere se riesco a fare in tempo per il campionato. Ho scritto del semplice codice e ho usato 2 indicatori personalizzati, ma i valori di questi indicatori sono 0 e non vengono eseguiti trade.
//+------------------------------------------------------------------+//| 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));
}}
}
//+------------------------------------------------------------------+
Questo EA analizza una candela solo sul primo tick. Ho notato che alcune situazioni scivolano senza essere elaborate. Si scopre che una rara candela nasce dal primo tick. È un effetto della connettività, un mio difetto o quello del tester?
Apparentemente, per elaborare una candela solo alla nascita, cioè una volta, l'ultima candela elaborata dovrebbe essere memorizzata in una variabile statica?
È meglio tracciare l'apparizione di una nuova barra cambiando il tempo della barra, memorizzandolo precedentemente in una variabile statica.
Ma ecco quello che non capisco: come fare il debug degli EA. È chiaro che non è il sistema ad essere testato, ma i bug del programma. Per esempio, non è chiaro perché il programma non entra in un certo ramo - perché? Devo mettere diversi timbri di debug, poi cercarli nel diario, poi mettere altri timbri, aspettare un certo tempo finché il programma funziona e poi cercare di nuovo nel diario?
Qual è il modo migliore per cercare gli errori del programma?
Ciao, sto scrivendo un EA per vedere se riesco a fare in tempo per il campionato. Ho scritto del semplice codice, usa 2 indicatori personalizzati, ma il valore di questi indicatori è 0, quindi il trade non viene fatto.
Per eseguire il debug del tuo codice ho sostituito gli indicatori personalizzati con 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);
Quindi è tutta una questione di indicatori? Il tester mi dà un errore
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Array out of range in 'trend_v3.mq5' (71,9) 2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Array out of range in 'trend_v3_5.mq5' (83,9)
Penso che sia più corretto controllare l'handicap delle maniglie prima di copiare le informazioni dagli indici. Sarebbe anche meglio controllare la disponibilità di questi dati ....
Non so se questa è la domanda giusta.
È possibile combinare debug e tester? Cioè se inizio con F5, il tester non parte ovviamente. E se avvio l'exprrt nel tester, i breakpoint vengono ignorati. O sto facendo qualcosa di sbagliato?
Non so se questa è la domanda giusta.
È possibile combinare il debug e un tester?
Non al momento.
Quindi solo in tempo reale sulla demo? E il debugging in situazioni interessanti?
All'inizio ero così entusiasta del debugger, ma sto scivolando indietro al debug delle stampe. Non sono visibili altre tecniche di debug. - Frustrante.
Studiando l'Expert Advisor fornito come esempio, MovingAverage, tutto è bellissimo. Domanda sul tester.
Questo EA analizza la candela solo sul primo tick. Ho notato che alcune situazioni sono scivolate senza elaborazione. Si scopre che una rara candela nasce dal primo tick. È un effetto della connettività, un mio difetto o quello del tester?
Apparentemente, per elaborare una candela solo alla nascita, cioè una volta, l'ultima candela elaborata dovrebbe essere memorizzata in una variabile statica?
P/S/ Sto iniziando a imparare la lingua, da qui queste domande noiose.
Ciao, sto scrivendo un EA per vedere se riesco a fare in tempo per il campionato. Ho scritto del semplice codice e ho usato 2 indicatori personalizzati, ma i valori di questi indicatori sono 0 e non vengono eseguiti trade.
Lunatic:
Questo EA analizza una candela solo sul primo tick. Ho notato che alcune situazioni scivolano senza essere elaborate. Si scopre che una rara candela nasce dal primo tick. È un effetto della connettività, un mio difetto o quello del tester?
Apparentemente, per elaborare una candela solo alla nascita, cioè una volta, l'ultima candela elaborata dovrebbe essere memorizzata in una variabile statica?
È meglio tracciare l'apparizione di una nuova barra cambiando il tempo della barra, memorizzandolo precedentemente in una variabile statica.
Esempi possono essere trovati nell'articolo IsNewBar e nell'articolo Limitazioni e controlli negli EA.
L'apparizione di una nuova barra è meglio tracciata cambiando il tempo della barra, avendolo precedentemente salvato in una variabile statica.
Esempi possono essere trovati in IsNewBar, e nell'articolo Limiti e controlli negli EA.
Grazie, è chiaro.
Ma ecco quello che non capisco: come fare il debug degli EA. È chiaro che non è il sistema ad essere testato, ma i bug del programma. Per esempio, non è chiaro perché il programma non entra in un certo ramo - perché? Devo mettere diversi timbri di debug, poi cercarli nel diario, poi mettere altri timbri, aspettare un certo tempo finché il programma funziona e poi cercare di nuovo nel diario?
Qual è il modo migliore per cercare gli errori del programma?
Ciao, sto scrivendo un EA per vedere se riesco a fare in tempo per il campionato. Ho scritto del semplice codice, usa 2 indicatori personalizzati, ma il valore di questi indicatori è 0, quindi il trade non viene fatto.
Per eseguire il debug del tuo codice ho sostituito gli indicatori personalizzati con MA:
E copia corretta dei valori nell'array:
Ora ci sono valori indicatori:
Per eseguire il debug del tuo codice ho sostituito gli indicatori personalizzati con MA:
E ha corretto la copia dei valori nell'array:
Ora ci sono valori indicatori:
Quindi è tutta una questione di indicatori? Il tester mi dà un errore
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Array out of range in 'trend_v3.mq5' (71,9)
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Array out of range in 'trend_v3_5.mq5' (83,9)
A m_a_sim
Penso che sia più corretto controllare l'handicap delle maniglie prima di copiare le informazioni dagli indici. Sarebbe anche meglio controllare la disponibilità di questi dati ....