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

 
Andrey Sokolov #:

Vous ne le voyez vraiment pas vous-même ?

"Comment dois-je écrire cela ?" - lorsqu'il est indiqué 0,01 lot, vous devez calculer le minimum disponible.

Je peux voir ça. Si vous le réglez sur 0,02, l'ordre avec un lot de 0,02 sera sélectionné. J'ai demandé comment le régler pour qu'il regarde d'abord le lot de 0,01, puis celui de 0,02 et ainsi de suite.

 
Sergey Gridnev #:
Vous avez besoin de 2 cycles : vous trouvez le volume minimum dans le premier, et vous le fermez dans le second. Et notez que lorsque vous fermez les ordres sont décalés d'une position, vous devez donc faire le cycle de la position maximale à 0.

Comment passe-t-on du maximum au minimum ?

 
Rustam Bikbulatov #:

Je demande comment faire pour qu'il regarde d'abord à 0,01, puis à 0,02 et ainsi de suite.

On vous a déjà dit deux fois comment.

 
Rustam Bikbulatov #:

Je peux voir ça. Si vous le réglez sur 0,02, il sélectionnera les ordres avec un lot de 0,02. Je demande comment le régler pour qu'il regarde d'abord 0,01, puis 0,02 et ainsi de suite.

Agréger le tableau en un tableau à deux dimensions, avec les lots dans la première dimension et les billets dans la seconde. Trier le tableau, et fermer tant que la première dimension a le plus petit lot. Ou si vous devez tout fermer, mais comme le lot augmente, fermez à la fin...

 
Sergey Gridnev #:
Vous avez besoin de 2 cycles : vous trouvez le volume minimum dans le premier et le fermez dans le second. Et notez que lorsque vous fermez les ordres sont décalés d'une position, vous devez donc faire le cycle de la position maximale à 0.

non. Du plus ancien au plus récent.

 

Je savais ce qu'ils disaient. Eh bien, je vais devoir apprendre par essais et erreurs, comme d'habitude.

 
Rustam Bikbulatov #:

Je savais ce qu'ils disaient. Eh bien, je vais devoir apprendre par essais et erreurs, comme d'habitude.

//+------------------------------------------------------------------+
//|                                                       Око_01.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#include <GrosBuch.mqh>
#property script_show_inputs

//input double Max_loss=0; //
extern int N=6;           // Количество ордеров
input int SLpips=0;      // Количество пунктов
//Вычисляем возможное оставшееся количество лотов при N лоссов от оставшихся свободных средств
// Buch bi;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double PipValue = MarketInfo(NULL, MODE_TICKVALUE),
          min_lot = MarketInfo(NULL, MODE_MINLOT),
          lot_step = MarketInfo(NULL, MODE_LOTSTEP),
          Margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED),
          Max_loss=N*SLpips*PipValue*min_lot,                 //Вычисляем сумму совокупного возможного лосса
          M_m=DBL_MIN;
   double remains= AccountFreeMargin()-Max_loss;  //Значение свободных средств для открыти ордера Margin*Lots;
   while(remains>Margin*min_lot&&!IsStopped())   //если они больше,чем необходимо для открытия 1 лота
     {
      min_lot=NormalizeDouble(min_lot+lot_step,2);  //добавим минлот
      M_m=Margin*min_lot;                           //получим значени св средств при вычисленном лоте и размере стопа
      // Lots*=min_lot;
      Print("remains = ",remains," Margin =",Margin," PipValue =",PipValue," N =",N,"min_lot =",min_lot," Max_loss =",Max_loss," M-m =",M_m);
     }
  }
//+------------------------------------------------------------------+
 

Bonsoir, chers experts !

S'il vous plaît, aidez-moi à comprendre une chose. Je suis en train d'écrire le début d'une fonction et j'ai décidé de vérifier une partie de son code avec un script :

//+------------------------------------------------------------------+
//|                                                            3.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   /* Создадим запрос на сервер и получим ответ с результатом */
   MqlTradeRequest request= {};
   MqlTradeResult result= {0};
   /* запустим цикл для перебора всех установленных отложенных ордеров */
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      /* определим параметры установленного ордера */
      string symbol=OrderGetString(ORDER_SYMBOL);                        // символ ордера
      int    digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);        // количество знаков после запятой
      double point=SymbolInfoDouble(symbol,SYMBOL_POINT);                // значение одного пункта
      ulong  ticket=OrderGetTicket(i);                                   // тикет ордера
      ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); // тип ордера
      double volume=OrderGetDouble(ORDER_VOLUME_INITIAL);                // объём ордера
      ulong  magic=OrderGetInteger(ORDER_MAGIC);                         // MagicNumber ордера
      double price_current=OrderGetDouble(ORDER_PRICE_CURRENT);          // текущая цена по символу ордера
      double price_order_open=OrderGetDouble(ORDER_PRICE_OPEN);          // цена открытия указанная в ордере
      double sl=OrderGetDouble(ORDER_SL);                                // стоп лосс ордера
      double tp=OrderGetDouble(ORDER_TP);                                // тейк профит ордера
      /* выведем информацию об установленных отложенных ордерах */
      PrintFormat("#%I64u %s  %s  %.2f price_current: %.5f price_order_open: %.5f sl: %.5f tp: %.5f magic: %d",
                  ticket,symbol,EnumToString(type),volume,price_current,price_order_open,sl,tp,magic);
     }
  }
//+------------------------------------------------------------------+


Mais le résultat est imprimé dans l'onglet Experts, ce qui laisse un peu perplexe. L'ordre en attente ORDER_TYPE_BUY_STOP a le symbole, mais l'ORDER_TYPE_SELL_STOP ne l'a pas pour une raison quelconque.

Avec quoi peut-il être relié ? Salutations, Vladimir.



 
MrBrooklin #:

Bonsoir, chers experts !

S'il vous plaît, aidez-moi à comprendre une chose. Je suis en train d'écrire le début d'une fonction et j'ai décidé de vérifier une partie de son code avec un script :


Mais le résultat imprimé dans l'onglet Experts est un peu déroutant. L'ordre en attente ORDER_TYPE_BUY_STOP a le symbole, mais l'ORDER_TYPE_SELL_STOP ne l'a pas pour une raison quelconque.

Avec quoi peut-il être relié ? Salutations, Vladimir.



Cela est dû au fait que vous n'avez pas sélectionné un billet, mais que vous essayez d'obtenir ses caractéristiques.
 
Sergey Gridnev #:
Il s'agit du fait que vous n'avez pas sélectionné un billet, mais que vous essayez d'obtenir ses caractéristiques.

Merci, Sergey, pour votre réponse ! Votre réponse m'a laissé encore plus perplexe. Comment est-ce possible ? Lorsque je lance le script, tous les ordres en attente sont interrogés. Comme on peut le voir sur l'image, il y en a deux sur le graphique, et en même temps, un ticket est sélectionné et l'autre non ? Ce n'est pas très clair.

Pouvez-vous l'expliquer plus en détail ?

Je ne pose pas cette question par pure curiosité, mais dans le but de poursuivre l'auto-apprentissage.

Salutations, Vladimir.

Raison: