Est-il possible de combiner le débogage et le testage ? Par exemple, si je commence avec F5, le testeur ne commence pas bien sûr. Et si je lance l'exercice dans le testeur, les points d'arrêt sont ignorés. Ou est-ce que je fais quelque chose de mal ?
Donc seulement en temps réel sur la démo ? Qu'en est-il du débogage dans des situations intéressantes ?
J'étais tellement excité par le débogueur au début, mais je suis en train de revenir au débogage des impressions. Aucune autre technique de débogage n'est visible. - C'est frustrant.
Si l'on étudie le conseiller expert fourni à titre d'exemple, MovingAverage, tout est beau. Question sur le testeur.
Cet EA analyse le chandelier uniquement sur le premier tick, j'ai remarqué que certaines situations sont glissées sans traitement. Il s'avère qu'un chandelier rare naît dès le premier tick. Est-ce un effet de connectivité, mon défaut ou celui du testeur ?
Apparemment, afin de ne traiter une bougie qu'à sa naissance, c'est-à-dire une seule fois, la dernière bougie traitée devrait être stockée dans une variable statique?
P/S/ Je commence tout juste à apprendre la langue, d'où des questions aussi fastidieuses.
Bonjour, je suis en train d'écrire un EA pour voir si je peux le faire à temps pour le championnat. J'ai écrit un code simple et utilisé 2 indicateurs personnalisés, mais les valeurs de ces indicateurs sont à 0 et aucune transaction n'est exécutée.
//+------------------------------------------------------------------+//| 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));
}}
}
//+------------------------------------------------------------------+
Cet EA analyse une bougie uniquement sur le premier tick. J'ai remarqué que certaines situations passent sans être traitées. Il s'avère qu'un chandelier rare naît dès le premier tick. Est-ce un effet de connectivité, mon défaut ou celui du testeur ?
Apparemment, pour traiter un chandelier uniquement à la naissance, c'est-à-dire une fois, nous devrions stocker le dernier chandelier traité dans une variable statique?
Il est préférable de suivre l'apparition d'une nouvelle barre en modifiant l'heure de la barre, en la stockant préalablement dans une variable statique.
On peut mieux suivre l'apparition d'une nouvelle barre en changeant l'heure de la barre, en l'ayant préalablement enregistrée dans une variable statique.
Mais voici ce que je ne comprends pas : comment déboguer les EA. Il est clair que ce n'est pas le système qui est testé, mais les bogues du programme. Par exemple, il n'est pas clair pourquoi le programme n'entre pas dans une certaine branche - pourquoi ? Dois-je mettre différents tampons de débogage, puis les chercher dans le journal, puis mettre d'autres tampons, attendre un certain temps jusqu'à ce que le programme fonctionne, puis regarder à nouveau dans le journal ?
Quelle est la meilleure façon de rechercher des erreurs de programme ?
Bonjour, je suis en train d'écrire un EA pour voir si je peux le faire à temps pour le championnat. J'ai écrit un code simple, il utilise 2 indicateurs personnalisés, mais la valeur de ces indicateurs est 0, donc le trade n'est pas fait.
Pour déboguer votre code, j'ai remplacé les indicateurs personnalisés par 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);
Je pense qu'il est plus correct de vérifier le caractère handicapant des poignées avant de copier les informations des indices. Il serait également préférable de vérifier la disponibilité de ces données .....
Je ne sais pas si c'est la bonne question.
Est-il possible de combiner le débogage et le testage ? Par exemple, si je commence avec F5, le testeur ne commence pas bien sûr. Et si je lance l'exercice dans le testeur, les points d'arrêt sont ignorés. Ou est-ce que je fais quelque chose de mal ?
Je ne sais pas si c'est la bonne question.
Est-il possible de combiner le débogage et un testeur ?
Pas pour le moment.
Donc seulement en temps réel sur la démo ? Qu'en est-il du débogage dans des situations intéressantes ?
J'étais tellement excité par le débogueur au début, mais je suis en train de revenir au débogage des impressions. Aucune autre technique de débogage n'est visible. - C'est frustrant.
Si l'on étudie le conseiller expert fourni à titre d'exemple, MovingAverage, tout est beau. Question sur le testeur.
Cet EA analyse le chandelier uniquement sur le premier tick, j'ai remarqué que certaines situations sont glissées sans traitement. Il s'avère qu'un chandelier rare naît dès le premier tick. Est-ce un effet de connectivité, mon défaut ou celui du testeur ?
Apparemment, afin de ne traiter une bougie qu'à sa naissance, c'est-à-dire une seule fois, la dernière bougie traitée devrait être stockée dans une variable statique?
P/S/ Je commence tout juste à apprendre la langue, d'où des questions aussi fastidieuses.
Bonjour, je suis en train d'écrire un EA pour voir si je peux le faire à temps pour le championnat. J'ai écrit un code simple et utilisé 2 indicateurs personnalisés, mais les valeurs de ces indicateurs sont à 0 et aucune transaction n'est exécutée.
Lunatic:
Cet EA analyse une bougie uniquement sur le premier tick. J'ai remarqué que certaines situations passent sans être traitées. Il s'avère qu'un chandelier rare naît dès le premier tick. Est-ce un effet de connectivité, mon défaut ou celui du testeur ?
Apparemment, pour traiter un chandelier uniquement à la naissance, c'est-à-dire une fois, nous devrions stocker le dernier chandelier traité dans une variable statique?
Il est préférable de suivre l'apparition d'une nouvelle barre en modifiant l'heure de la barre, en la stockant préalablement dans une variable statique.
Vous trouverez des exemples dans l'article IsNewBar et dans l'article Limitations et contrôles dans les EA.
On peut mieux suivre l'apparition d'une nouvelle barre en changeant l'heure de la barre, en l'ayant préalablement enregistrée dans une variable statique.
Vous trouverez des exemples dans IsNewBar et dans l'article Limites et contrôles dans les EA.
Merci, c'est clair.
Mais voici ce que je ne comprends pas : comment déboguer les EA. Il est clair que ce n'est pas le système qui est testé, mais les bogues du programme. Par exemple, il n'est pas clair pourquoi le programme n'entre pas dans une certaine branche - pourquoi ? Dois-je mettre différents tampons de débogage, puis les chercher dans le journal, puis mettre d'autres tampons, attendre un certain temps jusqu'à ce que le programme fonctionne, puis regarder à nouveau dans le journal ?
Quelle est la meilleure façon de rechercher des erreurs de programme ?
Bonjour, je suis en train d'écrire un EA pour voir si je peux le faire à temps pour le championnat. J'ai écrit un code simple, il utilise 2 indicateurs personnalisés, mais la valeur de ces indicateurs est 0, donc le trade n'est pas fait.
Pour déboguer votre code, j'ai remplacé les indicateurs personnalisés par MA :
Et correction de la copie des valeurs dans le tableau :
Il existe maintenant des valeurs indicatrices :
Pour déboguer votre code, j'ai remplacé les indicateurs personnalisés par des MA :
Et corrigé la copie des valeurs dans le tableau :
Il existe maintenant des valeurs indicatrices :
Tout est donc une question d'indicateurs ? Le testeur me donne une erreur
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Tableau hors limites dans 'trend_v3.mq5' (71,9)
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Tableau hors limites dans 'trend_v3_5.mq5' (83,9)
A m_a_sim
Je pense qu'il est plus correct de vérifier le caractère handicapant des poignées avant de copier les informations des indices. Il serait également préférable de vérifier la disponibilité de ces données .....