Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
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
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?
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
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.");
}
}
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.
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?
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 (es handelt sich um schwebende Kauf-Limit- und Verkaufs-Stop-Aufträge ) und PositionsTotal() gibt ebenfalls 2 zurück (Kauf- und Verkaufspositionen).
)) Das ist cool!!!! Was gibt die Funktion OrdersTotal() zurück?
)) 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":
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 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
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.
So kann ein Block aufgebaut werden, in dem Markt- und Pending-Aufträge analysiert werden:
{ //отражённым в терминале
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.
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