[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 301

 
rustein:
J'ai cherché sur le forum mais je n'ai pas trouvé de solution rapide, pour aider à résoudre le problème, car si dans le testeur ça ne marche pas, dans la vie réelle ça marche.

Merci.

S'il bloque le testeur, alors il devrait le faire. (Veillez à décrire la sortie de la boucle).

Comme ceci

    while(Result == -1)
    {
      if(TotalOpenOrders() < TotalOrders)
      {
        if(TrendDetection() == BULL)
        {
          Result = OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask,Digits)-(StopLoss*Point),NormalizeDouble(Ask,Digits)+(TakeProfit*Point),OrderComments,Magic,0,CLR_NONE); 
         if((IsTesting()||IsOptimization())&&Result == -1)break;
        }
 
drknn:


C'est difficile de dire quel est votre problème. Prenez comme règle dans MQL4 que les nombres négatifs dans le code doivent toujours être mis entre parenthèses. Il arrive parfois que des erreurs se produisent sans parenthèses.

Cependant, dans les lignes de code commençant par extern, il n'est pas nécessaire de prendre des valeurs négatives entre parenthèses. Je ne sais pas pourquoi il en est ainsi.

Merci, mais cela ne fonctionne pas, pouvez-vous suggérer une construction pour se débarrasser de la boucle if(IsTesting()==true || IsOptimization()==true)
 
rustein:
Merci, mais cela ne fonctionne pas, pouvez-vous suggérer une construction pour se débarrasser de la boucle if(IsTesting()==true || IsOptimization()==true)

 while(Result == -1)
    {
      if(TotalOpenOrders() < TotalOrders)
      {
        if(TrendDetection() == BULL)
        {
          Result = OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask,Digits)-(StopLoss*Point),NormalizeDouble(Ask,Digits)+(TakeProfit*Point),OrderComments,Magic,0,CLR_NONE); 
         if((IsTesting()||IsOptimization())&&Result == -1)break;
        }

^^

 
drknn:
Il n'y a pas besoin d'une alerte - je crois comprendre que quelque part dans le code, le fichier est probablement déjà ouvert mais pas fermé. C'est probablement la raison pour laquelle le fichier ne peut pas être rouvert et que la fenêtre d'alerte continue de s'afficher. Mais peut-être que je me trompe - je ne suis pas membre du club des télépathes :(
La situation est la suivante : à un moment donné, l'expert regarde dans le fichier csv et voit quelle commande s'y trouve (achat, vente, fermeture), cette commande est écrite dans le fichier par EXCEL. Le problème est qu'en ce moment, lorsque l'expert lit le fichier, il peut être ouvert par EXCEL, ekspert donne une erreur et c'est tout, et j'ai besoin qu'il recommence et essaie jusqu'à ce qu'il lise la commande.
Je ne savais pas que pendant la construction...
Veuillez vérifier si je l'ai écrit correctement :
 
int init()
{
while(handle<1)
{ 
handle=FileOpen("premierfichier.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t') 
} 

}

 
sanches83:

}

Ouais, pourquoi demander, vous pouvez le tester avec un "combat" )).
 
rustein:
Merci, mais cela ne fonctionne pas, pouvez-vous suggérer une construction pour se débarrasser de la boucle if(IsTesting()==true || IsOptimization()==true)


Essayez sans boucle du tout, dites comme ça :

double  PR,SL,TP;
PR=NormalizeDouble(Ask,Digits);
SL=NormalizeDouble(PR-StopLoss*Point,Digits);
TP=NormalizeDouble(PR+TakeProfit*Point,Digits);
int Result=0;
Result = OrderSend(Symbol(),OP_BUY,Lots,PR,Slippage,SL,TP,OrderComments,Magic,0,CLR_NONE);
if(Result<=0){
        Print("Ошибка № ",GetLastError()," при открытии бай-ордера. PR = ",PR,"   SL = ",SL,"   TP = ",TP);
}

Ça aiderait au moins à comprendre pourquoi la pose ne s'ouvre pas.

 
costy_:

^^

Merci beaucoup :)

Merci à tous, c'est réparé, ça marche.

Merci beaucoup pour votre aide.

 
costy_:
Oui, pourquoi devons-nous demander, nous pouvons le vérifier en nous "battant" )).


En général, c'est correct, mais pour que cela fonctionne, nous devons initialiser la variable avant la boucle.

poignée=0;

while(handle<1)
{
handle=FileOpen("premierfichier.csv",FILE_CSV|FILE_READ|FILE_WRITE, '\t') ;
}

Eh bien, c'est juste pour être absolument sûr que l'exécution du code entrera dans le corps de la boucle et ne l'ignorera pas.

 
drknn:


En fait, c'est vrai, mais pour que cela fonctionne, la variable doit être initialisée avant la boucle.

poignée=0;

while(handle<1)
{
handle=FileOpen("premierfichier.csv",FILE_CSV|FILE_READ|FILE_WRITE, '\t') ;
}

Cela permet de s'assurer que l'exécution du code entre dans le corps de la boucle et ne l'ignore pas.

Oui, malheureusement je dois être comme une diseuse de bonne aventure, créer des scripts avec une partie du code sur la question, enfin ou tout le code et il sera plus facile pour vous de pointer l'erreur. (marc de café zakAchyVeTso).
 

Les amis, aidez-moi un peu ! !!

J'essaie d'écrire un EA en utilisant la stratégie du canal du matin. L'essentiel est le suivant : à 6h01 sur la paire EURGBP, nous déterminons le canal du mouvement des prix de 0h à 6h. Nous définissons deux ordres en attente et si l'ordre en attente déclenché est fermé par un stoppeur, nous ouvrons un ordre dans la direction opposée. C'est la deuxième partie de la stratégie qui ne fonctionne pas. C'est-à-dire que si un stop s'est déclenché, nous ne pouvons pas ouvrir un ordre dans la direction opposée.
Dossiers :