#include <Trade\Trade.mqh>
CTrade Trade;
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---int total=PositionsTotal();
int Ordertotal=OrdersTotal();
while(!IsStopped() && (total <= 1)) // Закончим, когда появится более одной позиции.if(total == 1)
Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.elseif(Ordertotal!=0)
Trade.Buy(0.01); // Если нет позиции и ордера - открываем позицию.
}
//+------------------------------------------------------------------+
Credo che le due posizioni siano aperte e chiuse. Non sarebbe male cercare di ottenere i tipi di queste due posizioni. Se sono diretti in modo diverso, ciò confermerà i miei sospetti...
Bene ottenere lo stato di questo ordine, se il biglietto è noto.
L'operazione è fallita, il prezzo di esecuzione è 0.
Struttura del risultato della richiesta di compravendita (MqlTradeResult)
In risposta a una richiesta di compravendita, il server commerciale restituisce dati contenenti il risultato dell'elaborazione della richiesta di compravendita come una speciale struttura predefinita MqlTradeResult.
structMqlTradeResult
{
uint retcode; // Код результата операцииulong deal; // Тикет сделки, если она совершенаulong order; // Тикет ордера, если он выставленdouble volume; // Объем сделки, подтверждённый брокеромdouble price; // Цена в сделке, подтверждённая брокеромdouble bid; // Текущая рыночная цена предложения (цены реквота)double ask; // Текущая рыночная цена спроса (цены реквота)string comment; // Комментарий брокера к операции (по умолчанию заполняется расшифровкой кода возврата торгового сервера)uint request_id; // Идентификатор запроса, устанавливается терминалом при отправке uint retcode_external; // Код ответа внешней торговой системы
};
Quindi ottenere lo stato di questo ordine, se il biglietto è noto.
L'operazione è fallita, il prezzo di esecuzione è 0.
Questo è il punto: è passato. Quando lo script finisce, una o due posizioni rimangono sospese (a seconda di quante stampanti si inseriscono nel codice).
Codice:
#define PRINT(A) Print(#A + " = " + (string)(A))
#include <Trade\Trade.mqh>
voidOnStart()
{
CTrade Trade;
while (!IsStopped() && (PositionsTotal() <= 1)) // Закончим, когда появится более одной позиции.if (PositionsTotal() == 1)
{
Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.Print("Закрытие, т. к. PositionsTotal() равно 1");
}
elseif (!OrdersTotal())
{
printf("Перед открытием. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
Trade.Buy(0.01); // Если нет позиции и ордера - открываем позицию.
PRINT(Trade.ResultRetcodeDescription());
PRINT(Trade.ResultDeal());
PRINT(Trade.ResultOrder());
PRINT(Trade.ResultComment());
if (OrderSelect(Trade.ResultOrder()))
PRINT(OrderGetInteger(ORDER_STATE));
printf("После открытия. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
}
Print("Выход. PostionsTotal: ", PositionsTotal());
}
Risultato:
2021.05.0514:25:14.738 Test (EURUSD,M1) Перед открытием. PositionsTotal: 0, OrdersTotal: 02021.05.0514:25:14.821 Test (EURUSD,M1) Trade.ResultRetcodeDescription() = done at 0.000002021.05.0514:25:14.821 Test (EURUSD,M1) Trade.ResultDeal() = 02021.05.0514:25:14.821 Test (EURUSD,M1) Trade.ResultOrder() = 22498886812021.05.0514:25:14.821 Test (EURUSD,M1) Trade.ResultComment() = Request executed
2021.05.0514:25:14.821 Test (EURUSD,M1) EnumToString(ENUM_ORDER_STATE(OrderGetInteger(ORDER_STATE))) = ORDER_STATE_PLACED2021.05.0514:25:14.821 Test (EURUSD,M1) После открытия. PositionsTotal: 1, OrdersTotal: 12021.05.0514:25:14.899 Test (EURUSD,M1) Закрытие, т. к. PositionsTotal() равно 12021.05.0514:25:14.899 Test (EURUSD,M1) Выход. PostionsTotal: 2
Penso che le due posizioni siano aperte e vicine. Non sarebbe male cercare di ottenere i tipi di queste due posizioni. Se sono diretti in modo diverso, ciò confermerebbe i miei sospetti...
questo funziona bene - (dipende da quale scopo!?)
che funziona bene - (dipende da quale scopo!?)
Non farti coinvolgere. Lì c'è un detective speciale che costruisce ogni sorta di intrighi per catturare gli insetti di MT.
Un DC speciale che costruisce ogni sorta di intrighi per catturare gli insetti MT.
La maggior parte dei broker lavora secondo lo stesso schema: Result.deal == 0.
Per esempio, Signals è il broker più popolare per lo scalping.
Tra i broker rispettabili è abbastanza difficile trovare dove MT5 funziona secondo uno schema diverso.
questo funziona bene - (dipende da quale scopo!?)
La maggior parte dei broker lavora secondo lo stesso schema: Result.deal == 0.
Signals, per esempio, è il broker più popolare per lo scalping.
Tra i broker conosciuti è abbastanza difficile trovare dove MT5 funziona secondo uno schema diverso.
Non so che tipo di scalping funziona così tanto da non avere il tempo di chiudere una posizione...
Se non ti dispiace, prova ancora ad aggiungere il controllo del numero di posizioni
Credo che le due posizioni siano aperte e chiuse. Non sarebbe male cercare di ottenere i tipi di queste due posizioni. Se sono diretti in modo diverso, ciò confermerà i miei sospetti...
Fatto:
Risultato:
Bene ottenere lo stato di questo ordine, se il biglietto è noto.
L'operazione è fallita, il prezzo di esecuzione è 0.
Struttura del risultato della richiesta di compravendita (MqlTradeResult)
In risposta a una richiesta di compravendita, il server commerciale restituisce dati contenenti il risultato dell'elaborazione della richiesta di compravendita come una speciale struttura predefinita MqlTradeResult.
Quindi ottenere lo stato di questo ordine, se il biglietto è noto.
L'operazione è fallita, il prezzo di esecuzione è 0.
Questo è il punto: è passato. Quando lo script finisce, una o due posizioni rimangono sospese (a seconda di quante stampanti si inseriscono nel codice).
Codice:
Risultato:
Non so che tipo di scalping lavora così tanto da non poter chiudere una posizione in tempo...
Lì tutto è a tempo. Solo una caratteristica architettonica di MT5.
Se non vi dispiace, provate ad aggiungere il controllo del numero di posizioni
Questo controllo è presente nel codice sorgente.
Penso che le due posizioni siano aperte e vicine. Non sarebbe male cercare di ottenere i tipi di queste due posizioni. Se sono diretti in modo diverso, ciò confermerebbe i miei sospetti...
Non esiste una posizione di chiusura.
Non ho ancora trovato il tempo di pubblicarlo. Lo pubblicherò entro 24 ore.
Non ha funzionato, ho trovato dei problemi.
Non ha funzionato, ha trovato problemi.
Non vedo l'ora. Se c'è qualcosa per cui hai bisogno di aiuto, per favore scrivi.