Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 11

 
Leo59:
Ich danke Ihnen!
Da es sich bei "Order is a trade order" um einen Handelsauftrag handelt, können nur schwebende Aufträge als "aktive Aufträge" eingestuft werden, und "Positionen - Kauf und Verkauf" sind keine Aufträge für einen Handel. Oder "übersehe" ich etwas?

Ein Befehl ist ein Befehl auf Russisch. Du gibst einen Auftrag, und es kann einer von 8 sein.

1, 2, 3, 4 -Kauf-Stopp, Verkauf-Stopp, Kauf-Limit und Verkauf-Limit - nach Auslösung des Auftrags erscheint eine Position

5, 6 - kaufen oder verkaufen - dies sind keine Aufträge

7, 8 - stopLoss und TakeProfit - das sind die Aufträge, die die Maklerfirmen zum Ausstieg aus dem Markt erteilen.

Fälle 1, 2, 3, 4 - anhängige Aufträge

5, 6 - den Markt zu erobern), d.h. eine bestimmte Position auf dem Markt einzunehmen, ist wie im Krieg: jeder hat seine eigene Position an der Front, wohin er von den Befehlshabern geschickt wurde

 
Leo59:
Danke!
Da "ein Auftrag ein Handelsauftrag ist", können nur schwebende Aufträge als "aktive Aufträge" eingestuft werden, und "Positionen - Kauf und Verkauf" sind keine Handelsaufträge. Oder "übersehe" ich etwas?
Sie können auch den ersten Abschnitt "Handelsbedingungen" über den Link einsehen.
 
Vitaly Muzichenko:

5, 6 - kaufen oder verkaufen - dies sind keine Aufträge mehr

Der nachstehende Code zeigt, dass es sich um die tatsächlichen Aufträge handelt.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Merkmale der Sprache mql5, Feinheiten und Tricks

fxsaber, 2017.02.25 16:30

// Триггер срабатывания SL/TP - работает только на демо/реале (не в тестере).
void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{
  if ((Trans.type == TRADE_TRANSACTION_ORDER_ADD) &&
       PositionSelectByTicket(Trans.position) && OrderSelect(Trans.order) &&
       (PositionGetInteger(POSITION_TYPE) == 1 - OrderGetInteger(ORDER_TYPE)))
  {
    const double Price = OrderGetDouble(ORDER_PRICE_OPEN);
    
    if (Price == PositionGetDouble(POSITION_TP))
      Print("Position #" + (string)Trans.position + " - triggered TP.");    
    else if (Price == PositionGetDouble(POSITION_SL))
      Print("Position #" + (string)Trans.position + " - triggered SL.");    
  }
}
 
fxsaber:
Aktive Aufträge sind Handelsaufträge, die zur Ausführung oder Stornierung anstehen, mit Ausnahme von TP/SL- und MarginCall-Aufträgen. Gültige Aufträge können BUY und SELL sein.
Ich danke Ihnen!
Soweit ich weiß, bezieht sich der Begriff "aktiver Auftrag" auf KAUF- und/oder VERKAUFS-Positionen sowie auf schwebende (von einem Makler angenommene) Aufträge.
Wenn ich: Long- und Short-Positionen eröffnet habe und Buy Limit und Sell Stop gesetzt habe, dann wird OrdersTotal() den Wert =4 zurückgeben, richtig?
 
Leo59:
Ich danke Ihnen!
So wie ich es verstehe, bezieht sich "aktiver Auftrag" auf KAUF- und/oder VERKAUFS-Positionen sowie auf schwebende (vom Makler akzeptierte) Aufträge.
Wenn ich: Long- und Short-Positionen eröffnet habe und Buy Limit und Sell Stop gesetzt habe, dann wird OrdersTotal() den Wert =4 zurückgeben, richtig?
Nein.OrdersTotal() gibt 2 zurück (das sind Buy Limit und Sell Stop pending orders ) und PositionsTotal() gibt ebenfalls 2 zurück (Buy und Sell positions).
 
Wladimir Karputow:
Nein.OrdersTotal() gibt 2 zurück (es handelt sich um schwebende Kauf-Limit- und Verkaufs-Stop-Aufträge ) und PositionsTotal() gibt ebenfalls 2 zurück (Kauf- und Verkaufspositionen).
)) Dies ist bereits cool!!!! Was gibt die Funktion OrdersTotal() zurück?
 
Leo59:
)) Das ist cool!!!! Was gibt die Funktion OrdersTotal() zurück?
Wir können die folgende Terminologie verwenden: Position - etwas, das bereits gekauft/verkauft wurde oder ein schwebender Auftrag wurde ausgelöst, während ein Auftrag - ein schwebender Auftrag zur Eröffnung einer Position, wenn der Preis ein bestimmtes Niveau erreicht.
 
Leo59:
)) Das ist cool!!!! Was gibt die Funktion OrdersTotal() zurück?

Lesen Sie bereits die Hilfe :).

Studieren Sie es:

//+------------------------------------------------------------------+
//|                                    OrdersTotalPositionsTotal.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\OrderInfo.mqh>
CPositionInfo  m_position;                   // trade position object
COrderInfo     m_order;                      // pending orders object
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int total=0;
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties
        {
         //if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
         Print("position ",total,": ",m_position.Symbol()," ",EnumToString(m_position.PositionType()),
               " ",DoubleToString(m_position.Volume(),2)," ",DoubleToString(m_position.PriceOpen(),8));
         total++;
        }
   total=0;
   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
        {
         //if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic)
         Print("pending order ",total,": ",m_order.Symbol()," ",EnumToString(m_order.OrderType()),
               " ",DoubleToString(m_order.VolumeInitial(),2)," ",DoubleToString(m_order.PriceOpen(),8));
         total++;
        }
  }
//+------------------------------------------------------------------+

Hier ist der Status der Registerkarte "Handel":

Handel

Wie Sie sehen können, gibt es zwei offene Positionen (EURUSD buy 0.03 und USDCAD buy 0.02) und drei LOCAL ORDERS (USDJPY buy limit, USDJPY sell limit und EURUSD buy limit),

und einen Ausdruck des Drehbuchs:

2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   position 0: USDCAD POSITION_TYPE_BUY 0.02 1.32797000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   position 1: EURUSD POSITION_TYPE_BUY 0.03 1.06088000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   pending order 0: EURUSD ORDER_TYPE_BUY_LIMIT 0.03 1.05879000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   pending order 1: USDJPY ORDER_TYPE_SELL_LIMIT 0.01 112.71100000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   pending order 2: USDJPY ORDER_TYPE_BUY_LIMIT 0.01 111.74500000
 
Maxim Khrolenko:
Wir können uns die folgende Terminologie zu eigen machen: Eine Position ist etwas, das bereits gekauft/verkauft wurde oder manuell oder durch einen schwebenden Auftrag ausgelöst wurde, und ein Auftrag ist ein schwebender Auftrag zur Eröffnung einer Position, wenn der Preis ein bestimmtes Niveau erreicht.
All dies ist seit langem akzeptiert, und bevor Sie eine Dokumentation schreiben, wäre es wahrscheinlich lohnenswert, das Tutorial von Sergei Kovalev zu lesen (es ist in MQL4 integriert):


So kann ein Block aufgebaut werden, in dem Markt- und Pending-Aufträge analysiert werden:

   for (int i=1; i<=OrdersTotal(); i++)       //Цикл по всем ордерам,..
     {                                        //отражённым в терминале
      if(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
        {                                    
         // Здесь должен выполняться ..
         // ..анализ характеристик ордеров
        }
     }                                        //Конец тела цикла

Der Anfangswert i=1 wird im Kopf der Schleifenanweisung angegeben, und die Bedingung für das Ende der Schleife ist der Ausdruck i<=OrdersTotal(). Die Funktion OrdersTotal() gibt die Gesamtzahl der Market- und Pending-Orders zurück, d.h. die Orders, die im Terminal auf der Registerkarte Trade angezeigt werden. Daher ist die Anzahl der Iterationen in der Schleife gleich der Anzahl der Aufträge im Handel.

 
Leo59:
Alles ist längst akzeptiert, und bevor man eine Dokumentation schreibt, kann es nicht schaden, das Tutorial von Sergei Kovalev zu lesen (es ist in MQL4 integriert):


So kann ein Block aufgebaut werden, in dem Markt- und Pending-Aufträge analysiert werden:

Der Anfangswert i=1 wird im Kopf der Schleifenanweisung angegeben, und die Bedingung für das Ende der Schleife ist der Ausdruck i<=OrdersTotal(). Die Funktion OrdersTotal() gibt die Gesamtzahl der Market- und Pending-Orders zurück, d.h. die Orders, die im Terminal auf der Registerkarte Trade angezeigt werden. Daher entspricht die Anzahl der Iterationen in der Schleife der Anzahl der Aufträge, die im Handel vorhanden sind.

Ein Ausglühen ist nicht erforderlich)

Dies ist MT4-Code und es gibt keine Trennung von Aufträgen und Positionen - alles ist darin vermischt

Grund der Beschwerde: