[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 1127
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Merci beaucoup pour votre aide =)
N'oubliez pas que dans le testeur, l'indicateur ne fait pas apparaître la fenêtre d'alerte, mais écrit des messages d'alerte dans les journaux. Il est préférable de déboguer de tels morceaux de code avec des scripts - c'est plus rapide.
De plus, les messages de l'indicateur, curieusement, ne sont pas écrits dans le testeur dans les journaux du testeur, mais dans les journaux en temps réel.
http://www.google.ru/search?as_sitesearch=mql4.com&as_q=%EA%EE%EC%E8%F1%F1%E8%FF+%E2+%F2%E5%F1%F2%E5%F0%E5
"Ce n'est pas une tâche simple.
Vous pourriez le faire de cette façon.
Ou j'ai aussi trouvé ceci
Merci !
Je ne comprends pas bien comment les conditions fonctionnent.
J'ai décidé de découvrir comment fonctionne un indicateur fractal, quelle est la différence entre MODE_UPPER et MODE_LOWER, et j'ai écrit le code suivant
int start()
{int y ;
y= WindowFirstVisibleBar();Alert ("y",y) ;
for (;y>=0;y--)
{ double up=iFractals(Symbol(),PERIOD_M15,MODE_UPPER,y) ;
double down=iFractals(Symbol(),PERIOD_M15,MODE_LOWER,y) ;
if (up>=1|down>=1){
Alert("La fractale supérieure précédente est :", up, " La fractale inférieure précédente est :", down);Alert ("y",y);}}
WindowFirstVisibleBar() donne le nombre de barres sur le graphique, ce truc fonctionne si vous rayez si (up>=1||down>=1) de l'EA, cela donne une belle série de barres comptées, seulement il y en a tellement.
C'est comme un signe || ou, l'opérateur semble faire les crochets {} si au moins une des conditions est vraie, ou si les deux sont vraies en même temps, non ?
Rien n'a changé du tout au tout pour moi !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Je crois que j'ai bien compris. Aide-moi à comprendre. ! !!!!!!
Je ne comprends pas bien comment les conditions fonctionnent.
J'ai décidé de comprendre comment fonctionne un indicateur fractal, quelle est la différence entre MODE_UPPER et MODE_LOWER.
int start()
{int y ;
y= WindowFirstVisibleBar();Alert ("y",y) ;
pour (;y>=0;y--)
{ double up=iFractals(Symbol(),PERIOD_M15,MODE_UPPER,y) ;
double down=iFractals(Symbol(),PERIOD_M15,MODE_LOWER,y) ;
si (up>=1||down>=1){
Alert("La fractale supérieure précédente est :", up, " La fractale inférieure précédente est :", down);Alert ("y",y);}}
WindowFirstVisibleBar() donne le nombre de barres sur le graphique, cette chose fonctionne si vous croisez si (up>=1|down>=1), cela donne une belle série de barres calculées, mais il y en a beaucoup.
C'est comme un signe || ou, l'opérateur semble faire les crochets {} si au moins une des conditions est vraie, ou si les deux sont vraies en même temps, non ?
Rien n'a changé du tout au tout pour moi !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Je pense que tout est correct. Aidez-moi !!!!!!!
place du code normal via le contre-alt - M - réponse plus rapide...pas d'exclamations.
C'est comme si...
https://docs.mql4.com/ru/basis/operations/bool
Une opération logique OU.
Zy counter-alt - M est comme un bouton poussoir SRC et le code passe par là.
J'ai essayé le code que vous avez suggéré. Le résultat est toujours le même - il continue à ouvrir des transactions pendant la journée. Encore une fois, j'aimerais conserver l'option marche/arrêt.
Voici les variantes essayées :
extern bool WaitForNewDay = true ;
void init()
{
SMB=Symbole() ;
retour ;
}
void start()
{
bool Trade=true ;
if(WaitForNewDay){if(HistoryBuy(MAGICMA)+HistorySell(MAGICMA)!=0) Trade=false;}
if(CalculateCurrentOrders(Symbol())==0 && Trade)
{CheckForOpen() ; return;}
}
//-----------------------------------------------------------------
int HistoryBuy(int MAGICMA)
{int BuyOrders=0 ;
for (int i=OrdersHistoryTotal()-1;i>=0;i--) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
Print(" ",GetLastError()," ",i) ;
}
else {
if(OrderSymbol()!= SMB || OrderMagicNumber()!= MAGICMA){ continue;}
if(OrderType()==OP_BUY){
si(OrderOpenTime()>=iTime(SMB,PERIOD_D1,0)){
BuyOrders++ ;
}
}
}
}
return(BuyOrders) ;
}
//-----------------------------------------------------------------
int HistorySell(int MAGICMA){
int SellOrders=0 ;
for (int i=OrdersHistoryTotal()-1;i>=0;i--){
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
Print(" ",GetLastError()," ",i) ;
}
else {
if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGICMA){ continue;}
if(OrderType()==OP_SELL){
si(OrderOpenTime()>=iTime(SMB,PERIOD_D1,0)){
SellOrders++ ;
}
}
}
}
retourner(SellOrders) ;
}
//////////////Autre option/////////////////////
extern bool WaitForNewDay = true ;
Commerce=vrai ;
void init()
{
SMB=Symbole() ;
if(WaitForNewDay) {Trade=false;}
retour ;
}
void start()
{
if(WaitForNewDay) {if(HistoryBuy(MAGICMA)+HistorySell(MAGICMA)==0) Trade=true;}
if(CalculateCurrentOrders(Symbol())==0 && Trade)
{CheckForOpen() ; Trade=false ; return;}
}