Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 810

 


Bonjour, pourriez-vous m'aider s'il vous plaît - J'ai un problème : le robot entre en position et sur le tick suivant il modifie son stop-loss au niveau le plus bas précédent et j'ai besoin que le stop-loss soit modifié seulement quand la bougie se ferme sur laquelle la position a été ouverte.

void TrailingStop()
{  
  for(int i=0;i<OrdersTotal();i++)
  {
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true);
    {
    if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
      {  
      if (OrderType()==OP_BUY)             
        {              
            double LOW_1 = iLow(NULL,0,1);       
            bool res=OrderModify(OrderTicket(),OrderOpenPrice(),LOW_1,OrderTakeProfit(),0,White);                
            if(!res)  Print("Ошибка модификации ордера. Код ошибки=",GetLastError());         
        }               
       if (OrderType()==OP_SELL)              
        {                  
            double HIGH_1 = iHigh(NULL,0,1);                    
            res=OrderModify(OrderTicket(),OrderOpenPrice(),HIGH_1,OrderTakeProfit(),0,White);                
            if(!res)  Print("Ошибка модификации ордера. Код ошибки=",GetLastError());          
        }                      
      }
    } 
  }     
 return;                   
}
 

ou comment se débarrasser de cette erreur


 
remjte:
Messieurs ! Pouvez-vous m'indiquer le code qui arrêtera de tester un EA lorsqu'il n'y a pas assez de marge pour ouvrir une position ?
Merci !
Si AccountFreeMarginCheck() est inférieur à une certaine valeur (par exemple, moins de 50% de AccountFreeMargin) - quitter la fonction de trading, le test se termine rapidement car les boucles vides sont presque impossibles à charger.
 
evillive:
Si AccountFreeMarginCheck() est inférieur à une certaine valeur (par exemple, moins de 50% de AccountFreeMargin) - sortie de la fonction commerciale, le test se termine rapidement, car les boucles vides ne se chargent presque pas.

Honnêtement, encore très vert, a trouvé ce morceau de code pouvez-vous me dire comment corriger

if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) return (-1) ;
if(GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2) ;
return (l_lots_4) ;

 
En termes plus simples : comment écrire cette condition - Ne pas modifier un ordre ouvert avant l'apparition d'une nouvelle bougie?
 
zhezheria:
Permettez-moi d'écrire de manière plus simple : comment écrire cette condition - Ne pas modifier un ordre ouvert avant l'apparition d'une nouvelle bougie.
Travaillez à l'ouverture d'une nouvelle barre dans un cadre temporel correspondant. De nombreux exemples de code
 
remjte:

Honnêtement, encore très vert, a trouvé ce morceau de code pouvez-vous me dire comment corriger

if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) return (-1) ;
if (GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2) ;
return (l_lots_4) ;

Vous n'avez pas besoin de le modifier, il fera l'affaire. A moins que vous ne remplaciez simplement les variables par vos propres noms.

Mais si nous avons besoin de moins de risque, alors si (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= AccountFreeMargin()*0.5) return (-1) ; - dans ce cas, si 50% ou moins d'argent gratuit reste après l'ouverture de la position avec le lot spécifié, alors return (-1)

 
Pouvez-vous me donner un indice, s'il vous plaît ? J'ai besoin d'écrire une partie de code où la deuxième commande de la liste sera sélectionnée puis supprimée (en attente). Renvoie 4051 lorsque OrderSelect(1, SELECT_BY_POS, MODE_TRADES)
 
remjte:
Messieurs ! Pouvez-vous m'indiquer le code qui arrêtera de tester un EA lorsqu'il n'y a pas assez de marge pour ouvrir une position ?
Merci !
      // проверяем доступность свободных средств
      if(AccountFreeMarginCheck(Symbol(),OP_BUY,OpenLot)<=0 || GetLastError()==134)
            {
               Print("It is impossible to open the order Buy, not enough money.");
               return(0);
            }
      // проверяем доступность свободных средств
      if(AccountFreeMarginCheck(Symbol(),OP_SELL,OpenLot)<=0 || GetLastError()==134)
            {
               Print("It is impossible to open the order Sell, not enough money.");
               return(0);
            }
doube OpenLot; // Лот который вы хотите открыть.
Insérez-le avant d'ouvrir un ordre au marché.
 
Pomid:
Pouvez-vous me donner un indice, s'il vous plaît ? J'ai besoin d'écrire une partie de code où la deuxième commande de la liste sera sélectionnée puis supprimée (en attente). Renvoie 4051 lorsque OrderSelect(1, SELECT_BY_POS, MODE_TRADES)
Le compte des commandes commence à partir de 0. Essayez, OrderSelect(0, SELECT_BY_POS, MODE_TRADES)