Errori, bug, domande - pagina 3163

 
Roman #:

Non c'è prezzo sul forex Ultimo.
Dev'essere una tale bastonata ))

La soluzione è la seguente.
Configura tutte le proprietà di visualizzazione del grafico come ti piace, e salvalo nel modello come default.tpl

Come si fa?

Non capisco perché è stata aggiunta quest'ultima linea di prezzo, in senso pratico è inutile.

 
user4321 #:

come faccio?

PCM su grafico -> Modelli -> Salva modello
Nome del file: default.tpl

 
In alcuni casi (non ho mai trovato uno schema), quando si compila del codice con unavariabile dichiarata inutilizzata,MetaEditor5 non avverte della variabile inutilizzata.
 

Forum sul trading, sistemi di trading automatico e test di strategia

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

MrBrooklin, 2022.02.25 07:15

Buongiorno, cari esperti!

Oggi ho affrontato altri due problemi che non capisco, ma questa volta sono nel codice preso dal MQL5 Reference nella sua interezza. 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)
Questo è il primo punto. 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.

 
Buon pomeriggio. Potete dirmi come prelevare un deposito su una carta?
 
801765632 #:
Salve. Potete dirmi come ritirare il deposito sulla carta?

Questo è il sito web dello sviluppatore della piattaforma di trading. Non è un broker, non è un DC, non ci sono conti di trading reali.

Lo dice chiaramente in fondo alla pagina:


Faccia queste domande al suo broker - chi ha trasferito denaro sul suo conto di trading.

 
801765632 #:
Buon pomeriggio. Potete dirmi come ritirare il deposito sulla carta?
Contatta il broker con cui hai aperto un conto reale.
 

Cari sviluppatori! Perché nella seconda e terza chiamata è (T* const Ptr) sovraccaricata invece di (T* & Ptr)?

È un bug o una caratteristica? b3213.


template <typename T>
void f1(T* const Ptr) {Print(__FUNCSIG__);}

template <typename T>
void f1(T* & Ptr) {Print(__FUNCSIG__);}


class X {};

void OnStart()
  {
   const X* Ptr = new X;

   f1(Ptr);                                //void f1<const X>(const X*&)
   f1((X*)Ptr);                            //void f1<X>(X*const)
   f1((const X*) Ptr);                     //void func_902::f1<const X>(const X*const)

   delete Ptr;
  }
 
Roman #:

PCM su grafico -> Modelli -> Salva modello
Nome del file: default.tpl

C'è un tale modello di default. L'ho sostituito. Non ha aiutato, ahimè. È ancora lo stesso quando si passa a o da esso.

Sai come scrivere agli sviluppatori? Sicuramente è già stato segnalato loro qualche centinaio di volte, beh, scriverò di nuovo.

 

Quando si scorre, l'intestazione nei segnali cavalca


Motivazione: