Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 56

 

Je suis encore en train de l'affiner :

si la condition est vraie

ordre ouvert 1

si le prix a évolué comme il le devrait ou non

ordre ouvert 2

LastLot= ordre 2 (ou un nombre supérieur)

LastPrice= commande2 (ou un nombre supérieur)

Si le prix a ou n'a pas bougé là où il aurait dû...

LastLot= ordre 3 (ou un nombre supérieur)

LastPrice= commande 3 (ou un nombre supérieur)

Le problème est que le dernier ordre (ou pas) sera toujours entre un StopLoss et un TakeOut, ce qui signifie qu'il ne se réinitialisera pas lorsque les autres se fermeront car l'ordre lui-même sera toujours là. Comment le lier aux autres si nous ne connaissons pas le nombre de commandes ?

Le mécanisme consistant à lier le dernier ou l'avant-dernier aux autres s'est avéré inefficace puisque leur nombre change en même temps que les numéros.

Le résultat devrait être quelque chose comme "si un ordre de la série donnée a été fermé, fermez tous les autres".

Contrôle de la série - le premier ordre de la direction actuelle (un autre ordre ne s'ouvrira pas) - un identifiant supplémentaire ou d'autres méthodes de liaison devraient être utilisés ici. La clé - la première commande est ouverte selon les conditions, le reste des commandes sont des commandes auxiliaires.

Des idées ?

 
trader781:

Je suis encore en train de l'affiner :

si la condition est vraie

ordre ouvert 1

si le prix a évolué comme il le devrait ou non

ordre ouvert 2

LastLot= ordre 2 (ou un nombre supérieur)

LastPrice= commande2 (ou un nombre supérieur)

Si le prix a ou n'a pas bougé là où il aurait dû...

LastLot= ordre 3 (ou un nombre supérieur)

LastPrice= commande 3 (ou un nombre supérieur)

Le problème est que le dernier ordre (ou pas) sera toujours entre un StopLoss et un TakeOut, ce qui signifie qu'il ne se réinitialisera pas lorsque les autres se fermeront car l'ordre lui-même sera toujours là. Comment le lier aux autres si nous ne connaissons pas le nombre de commandes ?

Le mécanisme consistant à lier le dernier ou l'avant-dernier aux autres s'est avéré inefficace puisque leur nombre change en même temps que les numéros.

Le résultat devrait être quelque chose comme "si un ordre de la série donnée a été fermé, fermez tous les autres".

Contrôle de la série - le premier ordre de la direction actuelle (un autre ordre ne s'ouvrira pas) - un identifiant supplémentaire ou d'autres méthodes de liaison devraient être utilisés ici. La clé - la première commande est ouverte selon les conditions, le reste des commandes sont des commandes auxiliaires.

Des idées ?

Ce n'est pas clair. Essayez d'exprimer vos pensées plus clairement.

C'est le suivant :"Si le prix va dans le bon sens ou non, nous devrions ouvrir l'ordre 2" - comment comprendre quenous devrions ouvrir l'ordre 2 dans tous les cas ?

Et nous aurons de plus en plus de "ou sinon".

Et si nous ne voulons pas avoir des questions telles que"Comment le relier aux autres ordres lorsque le montant du prix est inconnu", nous devons d'abord déterminer le montant.

 
Vitalie Postolache:

C'est confus, incompréhensible. Essayez de rendre vos pensées plus claires.

Ce"si le prix a évolué dans la bonne direction ou non - ouvrir l'ordre2" - comment devons-nous comprendre que dans tous les cas"ouvrir l'ordre2" ?

Et nous aurons de plus en plus de "ou sinon".

Et si nous ne voulons pas entrer dans des questions telles que"Comment le relier aux autres commandes si nous ne connaissons pas le montant", nous devons d'abord trouver le montant.

OK, avec des chiffres

EURUSD=1.10000

une commande pour ouvrir un ordre d'achat en fonction du TP (déjà écrit)

si EURUSD=1.10200 nous donnons un ordre d'achat (déjà écrit)

si EURUSD=1.09800 pour "acheter" (c'est déjà écrit)

et ainsi de suite avec un pas de 200

si l'un des ordres est fermé (les arrêts et les reprises sont fixés, mais pas à tous)

Fermer la grille entière

à la recherche d'un moyen d'identifier la grille
 
trader781:

OK, avec des chiffres

EURUSD=1.10000

commande d'ouverture d'un ordre d'achat en fonction de l'ordre courant (déjà écrit)

si EURUSD=1.10200 est à remplir pour acheter (déjà écrit)

si EURUSD=1.09800 pour "acheter" (c'est déjà écrit)

et ainsi de suite avec un pas de 200

si l'un des ordres se ferme (les stops et les reprises ont déjà été placés)

fermer la grille entière

à la recherche d'un moyen d'identifier la grille
Vous pouvez ajouter des commentaires avec le numéro de commande. Et, si la série d'ordres est du même type, nous pouvons simplement les recalculer et fixer le montant.
 
Vitalie Postolache:
Des commentaires avec le numéro de commande peuvent être ajoutés. Et si toute la série de commandes d'un même type - alors ils doivent simplement les recalculer et fixer la quantité.

Je pensais aux commentaires, mais à en juger par les réactions, le chef pense qu'ils sont immangeables et les supprime ou les modifie à sa façon.

Et pour ce qui est de compter, je dois donc compter et enregistrer le nombre lorsque j'en ajoute un autre ?

 
trader781:

et à propos du comptage, dois-je compter et enregistrer la quantité lorsque j'en ajoute un autre ?

Oui. Et si le nombre a diminué depuis la dernière fois, fermez tous les autres.

Vous pouvez également suivre les ordres fermés dans l'historique. Et fermer la série lorsqu'un nouvel ordre répondant aux caractéristiques spécifiées apparaît.

Vous pouvez également ne pas définir de TP/SL dans l'ordre, mais calculer le TP/SL total dans le Conseiller Expert pour toute la série. Utilisez-les pour clore la série. Les avantages - la société de courtage ne voit pas les niveaux des points de rupture, et le problème de trouver les séries reste entier si un TP ou un SL s'est déclenché à un ordre.
 
Salutations ... Bonne année ... En vous souhaitant tout le meilleur ... Dans ce code s'il vous plaît changer le calcul du lot a été effectuée au maximum possible compte de levier
//+------------------------------------------------------------------+
double volume(string symbol,double risk,double sl)
  {
   double lot=0.0;
   double procent=0.0;
   double balans=0.0;
   double tc = SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE);
   double tv = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE);
   double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);

   if(Type_Balanse==Balance) balans=AccountInfoDouble(ACCOUNT_BALANCE);
   if(Type_Balanse==Equity) balans=AccountInfoDouble(ACCOUNT_EQUITY);
   if(Type_Balanse==FreeMargin) balans=AccountInfoDouble(ACCOUNT_FREEMARGIN);

   procent=(balans/100.0)*risk;

   switch((int)MarketInfo(symbol,MODE_PROFITCALCMODE))
     {
      case 0: if(sl!=0 && tv!=0) lot=procent/(sl*tv);break;
      case 1: if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break;
      case 2: if(sl!=0 && point!=0 && tv!=0 && ts!=0) lot=procent/(sl*point*(tv/ts));break;
     }
   return(NormalizeVolume(symbol,lot));
  }
 
Comment prescrire dans le conseiller expert le calcul automatique du lot, en fonction de l'effet de levier ... Disons que l'effet de levier 1:50 dépôt 3000.
 
Movlat Baghiyev:
OK, laissez-moi vous poser une question simple : comment puis-je configurer l'EA pour qu'il calcule automatiquement le lot en fonction de l'effet de levier... disons un effet de levier de 1:50, un dépôt de 3000....

Essayez comme ça :

void OnTick()
{
  Comment( cLot(100) );
}
//===============================================================================================
//------------------------------------ Расчет лота по риску ------------------------------------+
//===============================================================================================
double cLot(double Percent=0) {
double Free=AccountFreeMargin(),
        One_Lot=MarketInfo(_Symbol,MODE_MARGINREQUIRED),
        Min_Lot=MarketInfo(_Symbol,MODE_MINLOT),
        cStep=MarketInfo(_Symbol,MODE_LOTSTEP),
        Lots_New=0;
if(Percent > 100) {
    Percent = 100;
  }
  if(Percent == 0) {
    Lots_New = 0;
     return(0);
   } else {
    Lots_New = MathFloor(Free*Percent/100/One_Lot/cStep)*cStep;
   }
  if(Lots_New < Min_Lot) {
    Lots_New = Min_Lot;
  }
  if(Lots_New*One_Lot > Free) {
    return(0);
  }
   return(NormalizeDouble(Lots_New,LotDigit()));
}
//===============================================================================================
//-------------------- Кол-во знаков после точки в значении торгового лота ---------------------+
//===============================================================================================
int LotDigit(){
  double lotStep = MarketInfo(_Symbol,MODE_LOTSTEP);
return((int)MathCeil(MathAbs(MathLog(lotStep)/MathLog(10))));
}
 
Je suis désolé, j'ai besoin d'un choix de pourcentage de risque. J'ai juste besoin d'ouvrir le plus grand lot possible en une fois, par incréments de 0,01 maximum.