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

 
(NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2)-Lots*(CountTrades()+1));

J'ai créé une formule pour calculer le lot, pouvez-vous me dire où se trouve l'erreur ? L'ordre ne s'ouvre pas à cause d'une erreur.

La formule est toujours valable pour un dépôt de 100$ et plus, avec un effet de levier de 1-100 et plus. Et si le dépôt sans effet de levier est de 1 000$, il s'avère que la formule ne fonctionne pas car nous avons FreeMargin/Contract = 0.01 et nous ne pouvons pas déduire de cette valeur car nous ne remplirions pas les conditions de trading.


D'autre part, pourquoi devrions-nous la déduire si FR&Margin tient déjà compte des positions ouvertes? Alors cela ressemblerait à ceci

lot=NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2)

Je vais aller le tester.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...
 
geratdc: J'ai créé une formule pour calculer le lot, pouvez-vous me dire où se trouve l'erreur ? L'ordre ne s'ouvre pas à cause d'une erreur.
      Лот=NormalizeDouble(0.65*AccountBalance()*AccountLeverage()/          // Использую такую формулу
                             MarketInfo(_Symbol, MODE_LOTSIZE),2);
 
STARIJ:

Salutations)) Qu'est-ce que 0,65 ? D'où vient-il ?

Je pensais à l'effet de levier, mais je suis arrivé à la conclusion que l'équilibre est en théorie déjà fixé avec l'effet de levier. Ou ai-je tort ?


Est-ce que 0,65 est une réserve pour un glissement de 35% ou quoi ? C'est d'ailleurs une bonne idée, car si vous prenez beaucoup et que vous subissez ensuite des pertes, vous êtes fichu.

J'aime bien ! La formule a fonctionné après que j'ai supprimé les pertes, c'est cool)) en bref, le lot était de 0.02, puis lorsque trois positions sont passées en drawdown, le lot de secours a été calculé à 0.1, soit 5 fois ! Cependant, ma fonction est sensible à de nouvelles pertes lorsqu'un ordre d'urgence est ouvert, il ne devrait donc pas y avoir de problème.

Collègue, merci pour ces précieuses réflexions ! Je vais aller le tester !


J'ai également décidé de vérifier les conditions commerciales. Que pensez-vous de ce code ?


// Проверка Баланса
   if(cn==0 && TradeCheck==true && AccountBalance()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE)<SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN))
     {
      Print("Баланс счёта не обеспечивает торговые требования");
      SendMail("EA BJH","Баланс счёта не обеспечивает торговые требования");
      ExpertRemove();  // Снять советник с графика
     }
// Проверка Lots
   else if(cn==0 && TradeCheck==true && AccountBalance()/Lots<SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE))
     {
      Print("Lots не обеспечивает торговые требования");
      SendMail("EA BJH","Lots не обеспечивает торговые требования");
      ExpertRemove();  // Снять советник с графика
     }
Dossiers :
1.gif  10 kb
 
geratdc: Collègue, merci pour ces précieuses réflexions ! Je vais aller le tester !

Si vous inversez les choses - ACHETER au lieu de VENDRE et VENDRE au lieu d'ACHETER - ce sera mieux.

Essayez, Collègue ! !!

Le robot, au lieu d'énoncer un fait, doit émettre une recommandation : Patron, ajoutez de l'argent. J'ai déjà gaspillé ces...

 
STARIJ:

Si nous inversons les choses - ACHETER au lieu de VENDRE et VENDRE au lieu d'ACHETER - ce sera mieux.

Essayez, Collègue ! !!

Le robot, au lieu d'énoncer un fait, doit donner des recommandations : Patron, ajoutez de l'argent. Vous les avez déjà gaspillés...


C'est bon, il y avait des paramètres spécialement laissés pour déclencher une commande d'urgence - je devais voir ce que le lot ramasserait.

lot=NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2);

J'ai laissé celui-ci pour l'instant. J'ai essayé avec la balance, je pense qu'elle sera plus précise en termes de marge libre, mais le résultat est le même. Nous examinerons les résultats du test plus tard.

 
geratdc: C'est bon.

Internet est de retour ! Puis-je écrire à un courriel ?

 
STARIJ:

Est-ce que c'est comme ça que ça doit être ? Niveaux -0,75 et +0,75.

Il est plus facile d'utiliser une seule variable. D'abord 0. Puis +1 -1 +1 -1


Oui, comme ça. Comment dois-je l'écrire dans le conseiller expert de manière à ce que, lorsqu'il est lancé, si nous sommes dans un écart entre les niveaux, il prenne la valeur du dernier niveau à partir duquel nous avons rebondi ?

 
AlGuru: Mais comment l'écrire dans l'EA pour que, lorsqu'il démarre, si nous sommes dans l'écart entre les niveaux, il prenne la valeur du dernier niveau à partir duquel nous avons rebondi ?

Comment voulez-vous dire "repoussé" ? Il nous a attaqués ? Combattu quand - avant le lancement ? Comment pourrions-nous nous défendre si nous venions d'être lancés ? Lisez avant de l'envoyer - est-ce que tout a un sens ?

 
STARIJ:

Que voulez-vous dire par "se défendre" ? Il nous a attaqués ? Avons-nous été battus avant le lancement ? Comment pourrions-nous nous défendre si nous nous contentons de lancer ? Lisez-le avant de l'envoyer - a-t-il un sens ?


OK, pas rebondi, mais produit un rebond sur la ligne. A condition que l'EA soit placé sur une autre machine/terminal ou en cas d'arrêt de l'ordinateur, en redémarrant le terminal, il (l'EA) a commencé à travailler immédiatement en calculant le dernier niveau de prix et en fixant la bonne valeur variable, plutôt que d'attendre que le prix atteigne le niveau souhaité. J'espère l'avoir décrit clairement.

 
AlGuru OK, pas rebondi, mais produit un rebond sur la ligne. A condition que l'EA soit placé sur une autre machine/terminal ou en cas d'arrêt de l'ordinateur, en redémarrant le terminal, il (l'EA) a commencé à travailler immédiatement en calculant à quel niveau le prix était le dernier et en fixant la bonne valeur de variable, plutôt que d'attendre que le prix atteigne le niveau souhaité. J'espère l'avoir décrit clairement.

Qu'est-ce que cela a à voir avec une autre machine ou un autre terminal ? Ou arrêt - redémarrage. Voulez-vous dire qu'il faut allumer l'ordinateur ou redémarrer l'Expert Advisor ? Pourquoi faut-il que ce soit un rebond, mais si elle quitte la ligne de niveau et traverse en arrière ? Et s'il attend, il ne fait que sauter une opportunité lors de l'allumage. Vous pouvez l'écarter au début, et y revenir quand vous aurez terminé. Et puis d'où viennent les lignes, quand apparaissent-elles, qui les met ou comment l'EA les calcule. S'ils sont placés sur un autre ordinateur ou avant que l'ordinateur ne soit éteint, le prix peut partir très loin. Si les niveaux sont calculés par le conseiller expert lui-même, c'est une autre affaire. Regardez maintenant : le prix a rebondi depuis le niveau supérieur et a erré entre les niveaux pendant une heure. Nous avons ensuite allumé l'ordinateur et activé l'Expert Advisor. Évidemment, nous devons attribuer le temps d'action à ce rebond. Une heure s'est écoulée et le rebondissement est oublié. Vous voyez, il y a beaucoup de questions ! Et vous êtes clair. C'est clair pour vous, vous connaissez l'essence de la question. Mais de l'extérieur, c'est l'obscurité. L'art de la programmation est la capacité de poser beaucoup de questions et de trouver des réponses. Jetez un coup d'œil au script - il y a peut-être un point rationnel ici.

//+-------------------------------------------------------+
//| Проверка                                     PROBA.mq4|
//+-------------------------------------------------------+
#property strict

void OnStart()
{
  bool ДостигнутПервыйУровень=false,
       ДостигнутВторойУровень=false;
  int Переменная1=0, Переменная2=0;
  double Уровень;
  int x;

  Alert("----- Снизу вверх --------");
  for(x=13; x<27; x++)
  {
    Уровень=round(sin(x)*10)/10;

    if(Уровень>0.75)
    {
      Переменная1=1;
      Переменная2=0;
    }

    if(Уровень<-0.75)
    {
      Переменная1=0;
      Переменная2=1;
    }

    Alert("  ", x, "       ", Уровень, "        ", Переменная1, "        ", Переменная2);
  }
  Alert("Номер  Уров  Пер1  Пер2");
}