Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1918

 
Andrey Sokolov #:

Davvero non lo vedi anche tu?

"Come faccio a scriverlo?" - dove c'è scritto 0,01 lotto, devi calcolare il minimo disponibile.

Lo vedo. Se lo imposti a 0,02, verrà selezionato l'ordine con lotto 0,02. Ho chiesto come impostarlo per guardare prima il lotto 0,01, poi il 0,02 e così via.

 
Sergey Gridnev #:
Hai bisogno di 2 cicli: trovi il volume minimo nel primo, e lo chiudi nel secondo. E notate che quando chiudete gli ordini sono spostati di 1 posizione, quindi dovete fare il ciclo dalla posizione massima a 0.

Come si passa dal massimo allo 0?

 
Rustam Bikbulatov #:

Sto chiedendo come farlo guardare prima a 0,01, poi a 0,02 e così via.

Vi è già stato detto come due volte.

 
Rustam Bikbulatov #:

Lo vedo. Se lo imposti a 0,02, selezionerà gli ordini con lotto 0,02. Sto chiedendo come impostarlo per guardare prima 0,01, poi 0,02 e così via.

Aggregare la matrice in una bidimensionale, con i lotti nella prima dimensione e i biglietti nella seconda. Ordinare l'array, e chiudere mentre la prima dimensione ha il lotto più piccolo. O se dovete chiudere tutto, ma come il lotto aumenta, chiudete fino alla fine...

 
Sergey Gridnev #:
Hai bisogno di 2 cicli: trovi il volume minimo nel primo e lo chiudi nel secondo. E notate che quando chiudete gli ordini sono spostati di 1 posizione, quindi dovete fare il ciclo dalla posizione massima a 0.

no. Dal più antico al più recente.

 

Sapevo cosa dicevano. Beh, dovrò imparare per tentativi ed errori come al solito.

 
Rustam Bikbulatov #:

Sapevo cosa dicevano. Beh, dovrò imparare per tentativi ed errori come al solito.

//+------------------------------------------------------------------+
//|                                                       Око_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);
     }
  }
//+------------------------------------------------------------------+
 

Buona sera, cari esperti!

Per favore, aiutatemi a capire una cosa. Sto scrivendo l'inizio di una funzione e ho deciso di controllare una parte del suo codice con uno 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);
     }
  }
//+------------------------------------------------------------------+


Ma il risultato è stampato nella scheda Esperti è un po' sconcertante. L'ordine pendente ORDER_TYPE_BUY_STOP ha il simbolo, ma l'ORDER_TYPE_SELL_STOP non lo ha per qualche motivo.

Con cosa può essere collegato? Saluti, Vladimir.



 
MrBrooklin #:

Buona sera, cari esperti!

Per favore, aiutatemi a capire una cosa. Sto scrivendo l'inizio di una funzione e ho deciso di controllare una parte del suo codice con uno script:


Ma il risultato è stampato nella scheda Esperti è un po' sconcertante. L'ordine pendente ORDER_TYPE_BUY_STOP ha il simbolo, ma l'ORDER_TYPE_SELL_STOP non lo ha per qualche motivo.

Con cosa può essere collegato? Saluti, Vladimir.



Questo perché non hai selezionato un biglietto, ma stai cercando di ottenere le sue caratteristiche.
 
Sergey Gridnev #:
Ha a che fare con il fatto che non hai selezionato un biglietto, ma stai cercando di ottenere le sue caratteristiche.

Grazie, Sergey, per la tua risposta! La sua risposta mi ha lasciato ancora più perplesso. Come può essere? Quando eseguo lo script, tutti gli ordini pendenti impostati vengono interrogati. Come possiamo vedere nell'immagine, ce ne sono due sul grafico, e allo stesso tempo, un biglietto è selezionato e l'altro no? Non è del tutto chiaro.

Puoi spiegarlo in modo più dettagliato?

Faccio questa domanda non per pura curiosità, ma per continuare l'auto-apprendimento.

Saluti, Vladimir.

Motivazione: