[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 814

 
Ouvrir [1] Fermer [1]
 

Balance 600-1199 lot 0.1

Balance 1200-1799 lot 0.2

Balance 1800-2399 lot 0.3 etc.

Comment s'organiser dans l'EA ? Merci.

 
Maniac:

Balance 600-1199 lot 0.1

Balance 1200-1799 lot 0.2

Balance 1800-2399 lot 0.3 etc.

Comment s'organiser dans l'EA ? Merci.

double Lot()
{
   double balance=AccountBalance();
   if (balance>600 && balance<1199) return(0.1);
   if (balance>1200 && balance<1799) return(0.2);
   if (balance>1800 && balance<2399) return(0.3);
return(MarketInfo(Symbol(), MODE_MINLOT));
}
 

appel : ticket=OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,Bid-25*Point,Ask+25*Point, "Mon ordre #",magic,0,CLR_NONE) ;
 
IgorM:

Appel : ticket=OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,Bid-25*Point,Ask+25*Point, "Mon ordre #",magic,0,CLR_NONE) ;

Dans le même temps, la balance peut être dans les nuages, et les actions peuvent connaître une forte baisse. Par conséquent, la taille du lot peut sembler plus grande qu'elle ne peut être ouverte et toute la structure dépassera...

Avant l'ouverture, il est préférable de corriger le lot pour qu'il soit vraiment possible.

J'ai créé une fonction à cet effet. Il a été légèrement corrigé par Viktor(Vinin) - essayez-le :

// ===========================================================================
// --- Функция рассчёта величины лота для открытия позиции. Редакция VininI---
// Если лот превышает возможный для открытия позы, то он корректируется 
// ===========================================================================

double CorrectLots(double lt)
{
   double ltcorr;
   double pnt =      MarketInfo(Symbol(),MODE_POINT);
   double mspr =     MarketInfo(Symbol(),MODE_SPREAD);
   double dig =      MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot =   MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot =   MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot =   MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot =   MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/4.0,dig);    // Свободные средства, разрешенные к торговле
   
   
   double Money=lt*OneLot+mspr*pnt;          // Вычисляем стоимость открываемой позы
   if (Money>=TradeMrg)                      // Если цена позиции равна или больше, чем есть свободных средств, то ...
      {
         lt=MathFloor(TradeMrg/OneLot/StpLot)*StpLot;  // ... рассчитаем допустимый лот
         Print("Func CorrectLots: полученный лот ",lt," скорректирован под допустимый ",lt); 
      }
      else 
         Print("Func CorrectLots: лот вернули без изменений");
   lt=MathMin(MaxLot, MathMax(MinLot, lt)); // Проверим превышение допустимых ...
   
   return(lt);                            
}

Dans la ligne.

double TradeMrg = NormalizeDouble(AccountFreeMargin()/4.0,dig);    // Свободные средства, разрешенные к торговле

... La marge libre est divisée par quatre et seul un quart des fonds libres est considéré comme éligible pour le trading.

Vous pouvez supprimer la division par 4 et mettre autant que vous voulez, même utiliser toute la marge.

Mais la fonction ne vous permettra pas d'utiliser une taille de lot supérieure à celle autorisée.

 
artmedia70:
Dans le même temps, l'équilibre peut être dans les nuages, tandis que l'équité est dans la grande descente. Respectivement, la taille du lot peut sembler plus grande qu'elle ne peut être ouverte et toute la structure va dépasser...


Pourquoi tout est si triste...

le dernier return() de ma fonction donnera le lot minimum disponible pour l'instrument. Si le compte est un compte en cents avec un gros effet de levier, alors quand le solde est inférieur à 600, le conseiller expert peut négocier un peu plus longtemps :)

SZZY : le problème est spécifique et la branche est de donner une direction au questionneur.

 
IgorM:


pourquoi est-ce si triste...

le dernier return() de ma fonction donnera le lot minimum disponible pour l'instrument. Si le compte est un compte en cents avec un gros effet de levier, alors quand le solde est inférieur à 600, le conseiller expert peut négocier un peu plus longtemps :)

SZZY : Le problème est spécifique, et la branche pour donner une direction à l'auteur de la question.

Eh bien, pardonnez-moi généreusement... :) Ne vous fâchez pas, monsieur... :)

Voici une fonction dans ma version :

// ==========================================================================
// ------------ Функция рассчёта величины лота для открытия позиции ---------
// Если лот превышает возможный для открытия позы, то он корректируется 
// ==========================================================================

double CorrectLots(double lt)
{
   double ltcorr;
   double pnt =      MarketInfo(Symbol(),MODE_POINT);
   double mspr =     MarketInfo(Symbol(),MODE_SPREAD);
   double dig =      MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot =   MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot =   MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot =   MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot =   MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/4.0,dig);      // Свободные средства, разрешенные к торговле
   
   lt=MathAbs(lt);
   ltcorr=lt;                       // Зададим начальное значением ltcorr равным значению lt
   
   if (lt>=MaxLot) ltcorr=MaxLot;   // Проверим превышение допустимых ...
   if (lt<=MinLot) ltcorr=MinLot;   // ... значений лота
   
   double Money=lt*OneLot+mspr*pnt; // Вычисляем стоимость открываемой позы

   if (Money<TradeMrg)              // Если свободных средств больше, чем цена позиции - 
      {
         return(ltcorr);            // ... возвращаем неизменённый лот
      }
   else if (Money>=TradeMrg)        // Если цена позиции равна или больше, чем есть свободных средств, то ...
      {
         ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot);       // ... рассчитаем допустимый лот
         double MoneyCorr=ltcorr*OneLot+mspr*pnt;                      
         Print("Func CorrectLots: лот ",lt," скорректирован до ",ltcorr,
               " Стоимость позы до корректировки = ",Money,
               " Стоимость позы после корректировки = ",MoneyCorr
               ); 
         return(ltcorr);                                                 // ... и вернём его значение
      }
   Print("Func CorrectLots: лот вернули без изменений");
   return(ltcorr);                                                       // Возврат изначального лота в непредусмотренных случаях с сообщением
}
 
IgorM:


Pourquoi est-ce si triste...

le dernier return() de ma fonction donnera le lot minimum disponible pour l'instrument. Si le compte est un compte en cents avec un gros effet de levier, alors quand le solde est inférieur à 600, le conseiller expert peut négocier un peu plus longtemps :)

SZZY : le problème est spécifique, et la branche pour donner une direction au questionneur

Tu vois, Igor, cet homme t'a posé une question, tu lui as donné la bonne réponse, et tu peux l'oublier. Mais danser sur la balance n'est pas bon. Pour la simple raison que l'équilibre peut être dans le ciel, et la situation réelle - il est temps d'économiser. Et nous voilà, hr-r-r-r-r-rating... ...et un gros lot en haut de l'ordre... et il est à terre... L'équité, aussi, même si elle est déjà
déjà là... Je vous ai donc dit qu'il valait mieux miser sur l'équité plutôt que sur l'équilibre... :)

 

Bonne journée !

Pouvez-vous s'il vous plaît conseiller un débutant, est-il possible d'écrireun indicateur personnalisé dans MQL4 , de sorte qu'il puisse gérer simultanément toutes les paires de devises ? D'après ce que je comprends, le nombre maximal de lignes dans un graphique indicateur est de 8, mais je n'ai besoin que d'une seule ligne. C'est-à-dire que je peux obtenir un tableau de tableaux ou de variables pour toutes les paires de devises simultanément pour cette ligne ?

Merci d'avance pour la réponse.

 
Igor_Sev:

C'est-à-dire que je peux obtenir un tableau pour cette ligne traitée à partir de tableaux ou de variables sur toutes les paires de devises en même temps ?


Théoriquement, je ne vois pas d'obstacles. Une autre question est de savoir si vous pouvez traiter spécifiquement ce tableau.
 
Roger:

Théoriquement, je ne vois pas d'obstacles. Une autre question est de savoir si vous serez en mesure de traiter ce tableau.


Comment puis-je traiter toutes les paires de devises dans le code du programme lorsque j'écris un outil ? J'ai regardé les exemples d'écriture d'un outil, il n'y a pas de référence à une paire de devises, celle qui est liée à un graphique de cotation spécifique est traitée par défaut.

Le problème est que maintenant Excel et VBA font tout, je reçois des informations sur 22 paires de devises par le serveur DDE et en utilisant le code VBA je veux dire le traitement simultané, mais ce n'est pas pratique, parce que d'abord je dois attendre 2 heures pour l'accumulation de l'historique des données pour effectuer l'analyse par les graphiques Excel. Et il n'est pas commode de passer d'un programme à l'autre, c'est pourquoi je réfléchis à la manière de tout transférer sur MT4.