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

 
MrBrooklin #:

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.

Qui, avete un ciclo in cui cambiate l'iteratore i dall'indice massimo a 0. Cosa succede dentro? Bene, ecco cosa succede: il primo comando che prova a ottenere il parametro ORDER_SYMBOL. Ma da quale ordine stai cercando di ottenerlo, perché l'ordine sarà selezionato tre righe sotto!
 
Sergey Gridnev #:
Quindi, avete un ciclo in cui cambiate l'iteratore i dall'indice massimo a 0. Cosa sta succedendo al suo interno? Bene, ecco cosa succede: al primo comando si cerca di ottenere il parametro ORDER_SYMBOL. Ma, da quale ordine stai cercando di ottenerlo, perché l'ordine sarà selezionato tre righe sotto!

Grazie, Sergey, per la spiegazione molto dettagliata e comprensibile! Ho messo la linea con il biglietto dell'ordine pendente subito dopo l'inizio del ciclo e tutto ha funzionato bene.

Sì... Prestate attenzione e prestate attenzione ancora una volta. Questo è quello che mi manca davvero. Grazie ancora!

Sinceramente, Vladimir.

 

Buongiorno, stimati esperti!

Oggi ho affrontato altri due problemi che non capisco, ma in un codice interamente preso da MQL5 Reference. Questa volta non ho scritto niente io, ma ho solo preso un esempio già pronto.

Apro MQL5 Reference / Constants, Enumerations and Structures / Data Structures / Structure of a Trade Request. Lo trovo lì:

Struttura della richiesta di scambio
Modify Pending Order
Торговый приказ на модификацию уровней цен отложенного ордера. Требуется указание 7 полей:
    action
    order
    price
    sl
    tp
    type_time
    expiration
 Пример торговой операции TRADE_ACTION_MODIFY для модификации уровней цен отложенного ордера:

Questo è chiaro. Sono seguito da un esempio con il seguente codice:

#define  EXPERT_MAGIC 123456  // MagicNumber эксперта
//+------------------------------------------------------------------+
//| Модификация отложенных ордеров                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//-- объявление и инициализация запроса и результата
   MqlTradeRequest request={};
   MqlTradeResult  result={};
   int total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебор всех установленных отложенных ордеров
   for(int i=0; i<total; i++)
     {
      //--- параметры ордера
      ulong  order_ticket=OrderGetTicket(i);                             // тикет ордера
      string order_symbol=Symbol();                                      // символ
      int    digits=(int)SymbolInfoInteger(order_symbol,SYMBOL_DIGITS);  // количество знаков после запятой
      ulong  magic=OrderGetInteger(ORDER_MAGIC);                         // MagicNumber ордера
      double volume=OrderGetDouble(ORDER_VOLUME_CURRENT);                // текущий объем ордера
      double sl=OrderGetDouble(ORDER_SL);                                // текущий Stop Loss ордера
      double tp=OrderGetDouble(ORDER_TP);                                // текущий Take Profit ордера
      ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); // тип ордера
      int offset = 50;                                                   // отступ от текущей цены для установки ордера, в пунктах
      double price;                                                      // цена срабатывания ордера
      double point=SymbolInfoDouble(order_symbol,SYMBOL_POINT);          // размер пункта
      //--- вывод информации об ордере
      PrintFormat("#%I64u %s  %s  %.2f  %s  sl: %s  tp: %s  [%I64d]",
                  order_ticket,
                  order_symbol,
                  EnumToString(type),
                  volume,
                  DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
                  DoubleToString(sl,digits),
                  DoubleToString(tp,digits),
                  magic);
      //--- если MagicNumber совпадает, Stop Loss и Take Profit не заданы
      if(magic==EXPERT_MAGIC && sl==0 && tp==0)
        {
         request.action=TRADE_ACTION_MODIFY;                           // тип торговой операции
         request.order = OrderGetTicket(i);                            // тикет ордера
         request.symbol   =Symbol();                                   // символ
         request.deviation=5;                                          // допустимое отклонение от цены
        //--- установка уровня цены, тейк-профит и стоп-лосс ордера в зависимости от его типа
         if(type==ORDER_TYPE_BUY_LIMIT)
           {
            price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point; 
            request.tp = NormalizeDouble(price+offset*point,digits);
            request.sl = NormalizeDouble(price-offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                // нормализованная цена открытия
           }
         else if(type==ORDER_TYPE_SELL_LIMIT)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_BID)+offset*point; 
            request.tp = NormalizeDouble(price-offset*point,digits);
            request.sl = NormalizeDouble(price+offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // нормализованная цена открытия
           }
         else if(type==ORDER_TYPE_BUY_STOP)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset*point; 
            request.tp = NormalizeDouble(price+offset*point,digits);
            request.sl = NormalizeDouble(price-offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // нормализованная цена открытия
           }
         else if(type==ORDER_TYPE_SELL_STOP)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_BID)-offset*point; 
            request.tp = NormalizeDouble(price-offset*point,digits);
            request.sl = NormalizeDouble(price+offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // нормализованная цена открытия
           }
         //--- отправка запроса
         if(!OrderSend(request,result))
            PrintFormat("OrderSend error %d",GetLastError());  // если отправить запрос не удалось, вывести код ошибки
         //--- информация об операции   
         PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
         //--- обнуление значений запроса и результата
         ZeroMemory(request);
         ZeroMemory(result);
        }
     }
  }
//+------------------------------------------------------------------+

Sto cercando di capire la linea evidenziata in giallo. Una domanda sorge subito: cosa c'entra PositionGetDouble(POSITION_PRICE_OPEN) se questo esempio si riferisce agli ordini pendenti? Forse dovrebbe esserci una linea come questa:

DoubleToString(OrderGetDouble(ORDER_PRICE_OPEN),digits)
Questa è la prima cosa. Il secondo problema si presenta quando cerco di eseguire questo script su un grafico con un ordine pendente BUY_STOP che ho impostato (anche se tutto ciò che è simile accade per altri tipi di ordini pendenti). Quindi, cosa succede? Non succede niente! Non vedo alcuna modifica di un ordine pendente. Forse non capisco qualcosa?

Lo trovo solo nella scheda Esperti:
2022.02.25 08:41:38.491 4 (EURUSD,M1)   #4727791  EURUSD  ORDER_TYPE_BUY_STOP  0.10  0.00000  sl: 0.00000  tp: 0.00000  [0]
Cari esperti, per favore aiutatemi a capire questo esempio, perché è nella directory, ma il suo codice non funziona?

Saluti, Vladimir.
 
MrBrooklin #:
...
Cari esperti, per favore aiutatemi a capire questo esempio, perché è nel libro di riferimento, ma il suo codice non funziona?

Sinceramente, Vladimir.

Ne ho scritto qualche pagina fa.

Questo è il forum per il trading, i sistemi di trading automatico e il test delle strategie.

Tutte le domande dei neofiti su MQL4 e MQL5, aiuto e discussione di algoritmi e codici

Alexey Viktorov, 2022.02.20 10:24

Sasha, non puoi pensare a niente di peggio che usare esempi dalla documentazione o esempi tumblr. E avete anche perso il flag di terminazione forzata del ciclo while da qualche parte. Tutto sommato... senza parole.
Dubito che gli esempi scritti nella documentazione e persino nella libreria standard siano controllati a fondo. Ci sono molti errori di questo tipo. Gli esempi, secondo me, possono essere usati solo come campioni...
 
Alexey Viktorov #:

Ho scritto su questo qualche pagina fa

Dubito che gli esempi scritti nella documentazione e persino la libreria standard siano controllati a fondo. Ci sono molti errori di questo tipo. Gli esempi, secondo me, possono essere usati solo come esempi...

Ciao Alexey!

È molto triste che un'azienda così seria abbia un atteggiamento così povero nei confronti dei manuali.

Sinceramente, Vladimir.

 
MrBrooklin #:

Ciao Alexey!

È molto triste che un'azienda così seria abbia un atteggiamento così poco serio nei confronti del manuale.

Sinceramente, Vladimir.

C'è un altro errore in questo esempio. O completamente cieco.

Tra i campi obbligatori elencati c'è una scadenza, ma nel codice dell'esempio non vedo dove viene assegnata la scadenza. Invece, viene assegnata la deviazione ammissibile dal prezzo.

 
Alexey Viktorov #:

C'è ancora un errore in questo esempio. O sono diventato completamente cieco...

Tra i campi obbligatori elencati c'è la scadenza, ma nel codice di esempio non vedo dove viene assegnata la scadenza. Invece, viene specificata la deviazione ammissibile dal prezzo.

Non solo il tempo di scadenza, ma dovrebbe essere anche lì:

type_time - тип истечения

Sinceramente, Vladimir.

 
MrBrooklin #:

Non solo, ma ci dovrebbe essere anche un tempo di scadenza:

Sinceramente, Vladimir.

Mi rivolgo ad Artem Trishkin, il moderatore e organizzatore di questo ramo!

Da parte vostra, avete la possibilità di passare tutte le domande relative alla guida MQL5 a MQL?

Se non è troppo disturbo, puoi aggiornare almeno questa pagina?

Sinceramente, Vladimir.
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Типы торговых операций - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
MrBrooklin #:

Mi rivolgo ad Artem Trishkin, il moderatore e organizzatore di questo thread!

Da parte vostra, avete la possibilità di passare a MQL5 tutte le domande relative alla Guida MQL5?

Se non ti dispiace, almeno questa pagina può essere aggiornata?

Con rispetto, Vladimir.

Puoi anche segnalarlo in questo thread.

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2022.02.24
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Alexey Viktorov #:

Puoi segnalarlo anche in questo thread.

Grazie per il suggerimento, Alexey! Aspetterò prima la risposta in questo thread, ma se non succede nulla, lo segnalerò nel topic Errori, bug, domande.

Sinceramente, Vladimir.