Fehler, Irrtümer, Fragen - Seite 3163

 
Roman #:

Für Forex Last gibt es keinen Preis.
Das muss eine ganz schöne Tracht Prügel sein ))

Die Lösung lautet wie folgt.
Konfigurieren Sie alle Anzeigeeigenschaften des Diagramms nach Belieben und speichern Sie es in der Vorlage als default.tpl

Wie machen Sie das?

Ich verstehe nicht, warum diese letzte Preislinie hinzugefügt wurde, sie ist in der Praxis nutzlos.

 
user4321 #:

Wie mache ich das?

PCM auf Grafik -> Vorlagen -> Vorlage speichern
Dateiname: default.tpl

 
In einigen Fällen (ich habe nie ein Muster gefunden) warntMetaEditor5 beim Kompilieren von Code mit einer unbenutztendeklarierten Variable nicht vor der unbenutzten Variable.
 

Forum für Handel, automatisierte Handelssysteme und Strategietests

Alle Fragen von Neulingen zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes

MrBrooklin, 2022.02.25 07:15

Guten Morgen, liebe Experten!

Heute bin ich auf zwei weitere Probleme gestoßen, die ich nicht verstehe, aber dieses Mal sind sie im Code, der vollständig aus der MQL5-Referenz stammt. Diesmal habe ich nichts selbst geschrieben, sondern einfach ein fertiges Beispiel genommen.

Ich öffne MQL5 Referenz / Konstanten, Aufzählungen und Strukturen / Datenstrukturen / Struktur einer Handelsanfrage. Ich finde sie dort:

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

Das ist klar. Es folgt ein Beispiel mit folgendem Code:

#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);
        }
     }
  }
//+------------------------------------------------------------------+

Ich versuche, die gelb markierte Zeile zu verstehen. Eine Frage stellt sich sofort: Was hat PositionGetDouble(POSITION_PRICE_OPEN) damit zu tun, wenn sich dieses Beispiel auf schwebende Aufträge bezieht? Vielleicht sollte es eine Zeile wie diese geben:

DoubleToString(OrderGetDouble(ORDER_PRICE_OPEN),digits)
Dies ist der erste Punkt. Das zweite Problem tritt auf, wenn ich versuche, dieses Skript auf einem Diagramm mit einer BUY_STOP Pending Order, die ich eingestellt habe, auszuführen (obwohl bei anderen Arten von Pending Orders Ähnliches passiert). Was passiert also? Nichts passiert! Ich sehe keine Änderung eines anhängigen Auftrags. Vielleicht verstehe ich etwas nicht?

Ich finde dies nur auf der Registerkarte Experten:
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]
Liebe Experten, bitte helfen Sie mir, dieses Beispiel zu verstehen, warum es im Verzeichnis ist, aber sein Code nicht funktioniert?

Mit freundlichen Grüßen, Vladimir.

 
Guten Tag. Können Sie mir sagen, wie ich eine Einzahlung auf eine Karte abheben kann?
 
801765632 #:
Hallo. Können Sie mir sagen, wie ich die Einzahlung auf die Karte abheben kann?

Dies ist die Website des Entwicklers der Handelsplattform. Es ist kein Broker, es ist kein DC, es gibt keine echten Handelskonten.

Das steht ganz unten auf der Seite:


Bitte stellen Sie solche Fragen an Ihren Broker - wer hat Ihnen Geld auf Ihr Handelskonto überwiesen.

 
801765632 #:
Guten Tag. Können Sie mir sagen, wie ich die Einzahlung auf die Karte abheben kann?
Bitte wenden Sie sich an den Broker, bei dem Sie ein Realkonto eröffnet haben.
 

Liebe Entwickler! Warum ist im zweiten und dritten Aufruf (T* const Ptr) überladen statt (T* & Ptr)?

Ist dies ein Fehler oder eine Funktion? 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 auf Grafik -> Vorlagen -> Vorlage speichern
Dateiname: default.tpl

Eine solche Vorlage ist standardmäßig vorhanden. Ich habe sie ersetzt. Das hat leider nicht geholfen. Das ist auch dann so, wenn man zu oder von ihm wechselt.

Wissen Sie, wie Sie die Entwickler anschreiben können? Sicherlich wurde es ihnen schon ein paar hundert Mal gemeldet, aber ich werde es noch einmal schreiben.

 

Beim Scrollen fährt die Kopfzeile in den Signalen