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

 
Veuillez m'aider à corriger les erreurs dans cette fonction. Il a déjà pressé tout le jus de mon corps. L'essence de la fonction, lorsqu'elle atteint un certain profit, la fonction doit fermer la moitié de l'ordre.
void CloseHalfOrder(){

for (int i = 0; i<=OrdersTotal(); i++)
{
if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true)
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderProfit()>= NormalizeDouble (TP*Point,Digits))
{
if (OrderType() == OP_BUY)
double Lots = OrderLots();
double HalfLot = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);

if (OrderType() == OP_SELL)
double Lots1 = OrderLots();
double HalfLot1 = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot1,Ask,0,HotPink);
}
}
}
}

Oh, et comment faire pour que cette fonction ne fonctionne qu'une fois par ordre ouvert ?
 
Trader7777:
Veuillez m'aider à corriger les erreurs dans cette fonction. Il a déjà pressé tout le jus de mon corps. L'essence de la fonction, lorsqu'elle atteint un certain profit, la fonction doit fermer la moitié de l'ordre.
Oh, et comment faire pour que cette fonction ne fonctionne qu'une fois par ordre ouvert ?
Vous pouvez trouver le principe de la fermeture partielle ici.
 
Trader7777:
Veuillez m'aider à corriger les erreurs dans cette fonction. Il a déjà pressé tout le jus de mon corps. L'essence de la fonction, lorsqu'elle atteint un certain profit, la fonction doit fermer la moitié de l'ordre.

void CloseHalfOrder(){

for (int i = 0; i<=OrdersTotal(); i++)
{
if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true)
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic){//Нефига тут профиту делать, это так, для убыстрения....

if(OrderProfit()>= NormalizeDouble (TP*Point,Digits)) //А тут вообще непонятки что с чем сравниваете....
{
if (OrderType() == OP_BUY)
double Lots = OrderLots();
double HalfLot = NormalizeDouble (Lots*0.5,2);// Тут озаботится чтобы лот не стал меньше минимального
OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);

if (OrderType() == OP_SELL)
double Lots1 = OrderLots();
double HalfLot1 = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot1,Ask,0,HotPink);
}
}
}

}


}

Oh, et comment faire pour que cette fonction ne fonctionne qu'une fois par ordre ouvert ?
 
TarasBY:
Vous pouvez voir le principe des ordres de fermeture partielle ici.

Merci. Mais je veux d'abord et avant tout comprendre mes erreurs. Je suis encore en train d'apprendre. De plus, je pense que je suis très proche de la vérité.

 

une fois de plus... La fonction ne fonctionne pas. Je veux comprendre les erreurs. + comment faire pour qu'il ne se déclenche qu'une seule fois pour un ordre ouvert ? Merci beaucoup d'avance)

extern int TP         = 200; // это количество пунктов после которых должно произойти частичное закрытие
extern int Magic      = 77;


void CloseHalfOrder(){

for (int i = 0; i<=OrdersTotal(); i++)
  {
    if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true)
      {
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderProfit()>= NormalizeDouble (TP*Point,Digits))
          {
            if (OrderType() == OP_BUY) 
            double Lots = OrderLots(); 
            double HalfLot  = NormalizeDouble (Lots*0.5,2); // изначально ( при открытии ордера) лот рассчитывается так, что он не может быть меньше чем 0,02
            OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);
          
            if (OrderType() == OP_SELL)
            double Lots1 = OrderLots(); 
            double HalfLot1  = NormalizeDouble (Lots*0.5,2);
            OrderClose(OrderTicket(),HalfLot1,Ask,0,HotPink);
          }
        }
      }
    }
 
Trader7777:

une fois de plus... La fonction ne fonctionne pas. Je veux comprendre les erreurs. + comment faire pour qu'il ne se déclenche qu'une seule fois pour un ordre ouvert ?


La condition une fois pour une commande n'est pas très claire. Eh bien, nous devrons probablement utiliser des variables globales ici. Peut-être y a-t-il plus d'une commande, et une seule pour chacune d'elles ?
 
Trader7777:

une fois de plus... La fonction ne fonctionne pas. Je veux comprendre les erreurs. + comment faire pour qu'il ne se déclenche qu'une seule fois pour un ordre ouvert ?

Filtrer par taille de lot
 

Je suis dans la situation suivante. Il y a plusieurs modules dans l'EA, chaque module prend plusieurs fonctions personnalisées. Afin de ne pas me noyer dans le code, j'ai décidé de mettre chaque module dans des scripts. Voici la variante d'appel du script depuis le Conseiller Expert. Le problème suivant se pose toutefois : lorsque j'appelle le script, je dois lui transmettre certains paramètres. Nous pouvons utiliser des variables globales. Quelles autres variantes peuvent être suggérées ?

Je vous le dis tout de suite : la variante "plus simple" via iCustom() ne me convient pas, pour deux raisons. Tout d'abord, l'appel du module doit être occasionnel en mémoire, et non constant. Deuxièmement, je n'utilise pas de tableaux d'indicateurs.

 
Sepulca:

La condition une fois pour une commande n'est pas très claire. Vous devez probablement utiliser des variables globales ici. Peut-il y avoir plusieurs commandes et une seule fois pour chacune d'elles ?

Il ne peut y avoir qu'un seul ordre sur le marché. Pour l'instant, cette fonction ne fonctionne pas du tout... pour une raison quelconque. Mais s'il fonctionne correctement, je comprends qu'il sera déclenché tout le temps, tant que le bénéfice est supérieur au nombre de pips fixé. Bien sûr, nous avons besoin qu'il ferme une fois la moitié d'une position, et c'est tout. Mais j'aimerais que ça marche au moins une fois).
 
gyfto:

Je suis dans la situation suivante. Il y a plusieurs modules dans l'EA, chaque module prend plusieurs fonctions personnalisées. Afin de ne pas me noyer dans le code, j'ai décidé de mettre chaque module dans des scripts. Voici la variante d'appel du script depuis le Conseiller Expert. Le problème suivant se pose toutefois : lorsque j'appelle le script, je dois lui transmettre certains paramètres. Nous pouvons utiliser des variables globales. Quelles autres variantes peuvent être suggérées ?

Je vous le dis tout de suite : la variante "plus simple" via iCustom() ne me convient pas, pour deux raisons. Tout d'abord, l'appel du module doit être occasionnel en mémoire, et non constant. Deuxièmement, je n'utilise pas de tableaux d'indicateurs.


Une bibliothèque est une option.
Raison: