Calcul correct du lot à partir du % de la caution - page 3

 
7bec:

mais il est certain que ce devrait être AccountBalance et non AccountFreeMargin ici, alors soudainement l'expert ne fonctionne pas dans un lot ?

Avez-vous réfléchi longtemps avant de poser une question à un poste de quatre ans ? Pensez-vous vraiment qu'il va vous répondre ?
 
zoritch:

Avez-vous réfléchi longuement avant de poser une question à un poste de quatre ans ? Pensez-vous vraiment qu'il vous répondra ?
Et si vous avez de la chance ?
 
7bec:

mais il est certain que ce devrait être AccountBalance ici et non AccountFreeMargin, alors soudainement l'expert ne fonctionne pas dans un lot ?

Vous ne devriez pas utiliser cette fonction, je veux dire toute la fonction ici que j'ai aimée à l'été 2010. Parce qu'il peut être imprimé d'une meilleure façon
 
wenay:

Vous ne devriez pas utiliser cette fonction, je veux dire toute la fonction ici que j'ai aimée à l'été 2010. Parce qu'il y a de meilleures façons d'imprimer


par exemple ? De ce que j'ai trouvé sur le net pendant la nuit, c'est celui que j'ai préféré.

Bien sûr, tout code peut être affiné à l'infini, mais le mieux est l'ennemi du bien ;)

 

Je ne suis pas un expert en programmation MQL4, je cherche donc quelques conseils...

C'est le troisième jour que je me gratte la tête pour écrire un script de calcul de lot. Mon idée est la suivante : avec un dépôt (conditionnel) de 1000 $, le lot sera de 0,05 (en fait divisé par 20000).

C'est correct lorsque vous travaillez avec EURUSD, GBPUSD, AUDUSD, NZDUSD (c'est-à-dire que vous achetez dans la devise de dépôt) ..... Je ne sais pas comment obtenir un lot en USDJPY (ou USDRUR)... Je ne sais pas comment obtenir des lots en USDJPY... Si je m'ennuie, qu'est-ce qui me manque ????, dites-moi où chercher autre chose.

 
gochu:

Je ne suis pas un expert en programmation MQL4, je cherche donc des conseils...

C'est le troisième jour que je me gratte la tête pour écrire un script de calcul de lot. Mon idée est la suivante : avec un dépôt (conditionnel) de 1000 $, le lot sera de 0,05 (en fait divisé par 20000).

C'est correct lorsque vous travaillez avec EURUSD, GBPUSD, AUDUSD, NZDUSD (c'est-à-dire que vous achetez dans la devise de dépôt) ..... Comment calculer le lot pour CADJPY (ou USDRUR) ? 1000 livres se transforment (pour aujourd'hui) en 113000 yens ou 38700 roubles, le lot ne sera pas de 5.65 et 0.19 dans ce cas ... Je travaille trop dur, qu'est-ce que je rate ???? conseiller où aller ... Laissez votre badinage et la traîne pour plus tard !


Examinez le problème sous un angle légèrement différent : utiliser un lot équivalent à une certaine somme d'argent dans la devise du dépôt.

Voici un script pour calculer la taille du lot en fonction de la taille du contrat. La taille du contrat est fixée dans la devise du dépôt.

Dossiers :
 

Voici ma façon de calculer le lot pour une transaction (code avant la mise à jour de MQL4 donc pas de #property strict) :

extern double DealLevel = 5.0; // процент свободной маржи для сделки
//---
double LotDeal = NormalizeDouble(TradedLotFunc(DealLevel),2);

//--- TradedLotFunc() - start ----- сама функция
double TradedLotFunc(double Deal_f)
{  
   double MinLot_f  =MarketInfo(Symbol(),MODE_MINLOT);
   double MaxLot_f  =MarketInfo(Symbol(),MODE_MAXLOT);
   double LotStep_f =MarketInfo(Symbol(),MODE_LOTSTEP);
   double LotSize_f =MarketInfo(Symbol(),MODE_LOTSIZE);
   int    Leverage_f=AccountLeverage();
   //---
   int    i, coef; 
   double HighBorder;
   //---
   if(Deal_f<=0.0)  return(MinLot_f);
   if(Deal_f>100.0) Deal_f=100.0;
   double TradedLot=(AccountFreeMargin()*Deal_f/100)*Leverage_f/LotSize_f;
   if(TradedLot<=MinLot_f) return(MinLot_f);
   if(LotStep_f==0.001 || LotStep_f==0.01 || LotStep_f==0.1 || LotStep_f==1.0)
      TradedLot=MathRound(TradedLot/LotStep_f)*LotStep_f;
   else
   {  if(((TradedLot-MinLot_f)/LotStep_f)<=5.0) coef=1;
      else coef=MathRound((TradedLot-MinLot_f)/LotStep_f)-3;
      for(i=0; i<=100; i++)
      {  HighBorder=MinLot_f+(LotStep_f*coef)+(LotStep_f*i);
         if(TradedLot> HighBorder) continue;
         if(TradedLot==HighBorder) break;
         if(TradedLot< HighBorder)
         {  if(MathAbs(HighBorder-TradedLot)<=MathAbs(TradedLot-(HighBorder-LotStep_f)))
            {  TradedLot=HighBorder; break; }
            else
            {  TradedLot=HighBorder-LotStep_f;  break; }
   }  }  }
   if(TradedLot>=MaxLot_f) return(MaxLot_f);
   return(TradedLot);
}
//--- TradedLotFunc() - end -----
 

TradedLotFunc() renvoie-t-il toujours un résultat supérieur à zéro ?

Si non, alors le code se transforme en une connerie if(Deal_f<=0.0) return(MinLot_f) ; - vous êtes membre d'un parti ? ...et encore des tirs de mitrailleuses...

Et le reste est encore plus drôle if(TradedLot<=MinLot_f) return(MinLot_f ) ; - Vous êtes un fêtard ? ...et la mitrailleuse est repartie...

---------------------

en général, si l'on suppose que la fonction fonctionne correctement, elle est à peine suffisante pour ouvrir le premier et unique ordre d'un compte de trading...

Difficilement, car il ne tient pas compte des positions ouvertes existantes ni du stop loss de l'ordre à ouvrir, c'est-à-dire qu'il s'agit d'une version d'écolier.

Et aucune personne saine d'esprit n'utiliserait cette bonté lorsqu'elle négocie sur un compte réel...

 

Merci pour les conseils, mais je n'ai pas formulé ma question correctement..... Je veux baser mon calcul sur le montant de l'argent perdu/volé. Il est évident que la garantie pour les euro.quid et les pound.quid est différente, mais ce n'est pas exactement ce à quoi je veux arriver. Idéalement, je devrais avoir une fonction qui prendrait des paramètres en entrée :

1- déposer la monnaie (je vais vérifier pour les quidams et les euros),

2 - Montant du dépôt (1000)

3 - ma paire de devises de négociation (je voudrais vérifier CADJPY et USDCHF)

4 - le pourcentage de retrait de mon dépôt (supposons 2 %) et

5- un certain nombre de points (100 pips pour les plateformes à 4 chiffres et 1000 pour celles à 5 chiffres).

Paramètre de sortie Je veux obtenir la taille du lot.

C'est-à-dire (tout est clair pour les paires avec des cotations inverses, EURUSD, GBPUSD, AUDUSD, NZDUSD, c'est-à-dire si la devise de cotation est la devise du dépôt)... afin de

pour un dépôt de 1000 livres, je perds / gagne 2% (soit 20 livres) lorsque la devise passe 100(4 chiffres)/1000 pips (5 chiffres), je dois utiliser 0,02 lot.

(Je tiens à répéter que je devrais utiliser plus d'argent pour trader la GBPUSD que pour l'EURUSD, ou surtout la NZDUSD, mais ma question ne porte pas sur l'utilisation de l'argent, mais sur la perte et/ou le profit nominal ... s'il vous plaît, conseillez-moi ... je perds la tête ... je travaille avec ce problème depuis moins d'une semaine). Je suis arrivé au point que je devais calculer la valeur de la perte dans les cotations de la monnaie ... mais comment le transformer (la perte) dans le moi désiré beaucoup de la monnaie de dépôt..... tout ici je trébuche ... Merci pour votre aide !

 
gochu:

Merci pour les conseils, mais je n'ai pas formulé ma question correctement..... Je veux calculer un lot basé sur le montant de l'argent perdu/volé. ...

Regardez la fonction https://docs.mql4.com/ru/marketinformation/marketinfo avec l'identifiant de requête MODE_TICKVALUE