Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 11
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Grazie!
Poiché "L'ordine è un ordine di compravendita", solo gli ordini in sospeso possono essere classificati come "ordini attivi", e le "Posizioni - comprare e vendere" non sono ordini di compravendita. O mi "manca qualcosa"?
Un ordine è un ordine in russo. Si dà un ordine e può essere qualsiasi di 8.
1, 2, 3, 4 -buystop, sellstop, bylimit e selllime - dopo l'attivazione dell'ordine appare una posizione
5, 6 - comprare o vendere - questi non sono ordini
7, 8 - stopLoss e TakeProfit - questi sono gli ordini; questi sono gli ordini delle società di brokeraggio per uscire dal mercato.
Casi 1, 2, 3, 4 - ordini pendenti
5, 6 - per catturare il mercato), cioè per prendere una certa posizione nel mercato, è proprio come in guerra: ognuno ha la sua posizione al fronte dove sono stati mandati dai comandanti
Grazie!
Dato che "Un ordine è un ordine commerciale", solo gli ordini in sospeso possono essere classificati come "ordini attivi", e le "Posizioni - comprare e vendere" non sono un ordine commerciale. O mi "manca qualcosa"?
5, 6 - comprare o vendere - questi non sono più ordini
Il codice qui sotto mostra che questi sono gli ordini reali.
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Caratteristiche del linguaggio mql5, sottigliezze e trucchi
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.");
}
}
Gli ordini attivi sono ordini di compravendita che sono in attesa di esecuzione o cancellazione, ad eccezione degli ordini TP/SL e MarginCall. Gli ordini validi possono essere BUY e SELL.
Per quanto ho capito il termine "ordine attivo" si riferisce a posizioni di ACQUISTO e/o VENDITA così come a ordini pendenti impostati (accettati da un broker).
Se ho: posizioni Long e Short aperte, e Buy Limit e Sell Stop impostati, allora OrdersTotal() restituirà il valore =4. Giusto?
Grazie!
Da quanto ho capito, "ordine attivo" si riferisce a posizioni di ACQUISTO e/o VENDITA così come a ordini pendenti impostati (accettati dal broker).
Se ho: posizioni Long e Short aperte, e Buy Limit e Sell Stop impostati, allora OrdersTotal() restituirà il valore =4, giusto?
No.OrdersTotal() restituirà 2 (si tratta di ordini pendenti Buy Limit e Sell Stop) e anche PositionsTotal() restituirà 2 (posizioni Buy e Sell).
)) Questo è cool!!!! Cosa restituisce la funzione OrdersTotal()?
)) Questo è cool!!!! Cosa restituisce la funzione OrdersTotal()?
Leggete già l'aiuto :).
Studiatelo:
//| 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++;
}
}
//+------------------------------------------------------------------+
Ecco lo stato della scheda "Commercio":
Come puoi vedere ci sono due posizioni aperte (EURUSD buy 0.03 e USDCAD buy 0.02) e ci sono tre ORDINI LOCALI (USDJPY buy limit, USDJPY sell limit e EURUSD buy limit),
e una stampa dello script:
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
Possiamo adottare la seguente terminologia: una posizione è qualcosa che è già stato comprato/venduto o manualmente o un ordine pendente è stato attivato e un ordine è un ordine pendente per aprire una posizione se il prezzo raggiunge un livello specificato.
Ecco come si può costruire un blocco in cui si analizzano gli ordini a mercato e in sospeso:
{ //отражённым в терминале
if(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
{
// Здесь должен выполняться ..
// ..анализ характеристик ордеров
}
} //Конец тела цикла
Il valore iniziale i=1 è specificato nell'intestazione dell'istruzione del ciclo, e la condizione per la fine del ciclo è l'espressione i<=OrdersTotal(). La funzione OrdersTotal() restituisce l'importo totale degli ordini a mercato e in sospeso, cioè gli ordini che sono visualizzati nel terminale nella scheda Trade. Pertanto, il numero di iterazioni nel ciclo sarà uguale al numero di ordini presenti nella negoziazione.
Tutto è stato accettato da tempo, e prima di scrivere la documentazione, probabilmente non sarebbe male leggere il tutorial di Sergei Kovalev (è integrato in MQL4):
Ecco come si può costruire un blocco in cui si analizzano gli ordini a mercato e in sospeso:
Il valore iniziale i=1 è specificato nell'intestazione dell'istruzione del ciclo, e la condizione per la fine del ciclo è l'espressione i<=OrdersTotal(). La funzione OrdersTotal() restituisce l'importo totale degli ordini a mercato e in sospeso, cioè quegli ordini che sono visualizzati nel terminale nella scheda Trade. Pertanto, il numero di iterazioni nel ciclo sarà il numero di ordini che sono presenti nel commercio.
Non c'è bisogno di ricottura)
Questo è il codice MT4 e non c'è alcuna divisione di ordini e posizioni - tutto è mescolato insieme in esso