![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Buona giornata a tutti! Potete per favore consigliarmi come impostare la cancellazione di un ordine in un EA?
La situazione è la seguente:
Mettiamo 2ordini pendenti in direzioni diverse, non appena uno di essi scatta, l'altro viene rimosso e non viene più esposto.
Sarei molto grato per qualsiasi aiuto.
Grazie.
Per esempio:
// удаляет отложенные ордера по type +
//+------------------------------------------------------------------+
void DeleteOrders(int type)
{
int cnt = OrdersTotal();
for (int i=cnt-1; i>=0; i--) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
//По желанию
if (OrderSymbol() != Symbol()) continue;
//По желанию
if (OrderMagicNumber() != mn) continue;
if (OrderType() != type) continue;
if (type == OP_BUYSTOP || type == OP_SELLSTOP)
{
bool Del_1 = OrderDelete(OrderTicket());
if(!Del_1)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
if (type == OP_BUYLIMIT || type == OP_SELLLIMIT)
{
bool Del_2 = OrderDelete(OrderTicket());
if(!Del_2)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
}
}
//+------------------------------------------------------------------+
E prima di questo, determinare che c'è una posizione ed è il momento di uccidere l' ordine extra
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 16.06.2008 |
//| Описание : Удаление ордеров, противоположных позиции |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
void DeleteOppositeOrders(string sy="", int op=-1, int mn=-1) {
bool eb, es;
switch (op) {
case OP_BUY : eb=ExistPositions(sy, OP_BUY , mn); break;
case OP_SELL: es=ExistPositions(sy, OP_SELL, mn); break;
default: eb=ExistPositions(sy, OP_BUY , mn);
es=ExistPositions(sy, OP_SELL, mn); break;
}
if (eb) {
DeleteOrders(sy, OP_SELLLIMIT, mn);
DeleteOrders(sy, OP_SELLSTOP , mn);
}
if (es) {
DeleteOrders(sy, OP_BUYLIMIT, mn);
DeleteOrders(sy, OP_BUYSTOP , mn);
}
}
Per darvi un esempio:
// удаляет отложенные стоп ордера SELLSTOP или BUYSTOP по type +
//+------------------------------------------------------------------+
void DeleteOrders(int type)
{
int cnt = OrdersTotal();
for (int i=cnt-1; i>=0; i--) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
//По желанию
if (OrderSymbol() != Symbol()) continue;
//По желанию
if (OrderMagicNumber() != mn) continue;
if (OrderType() != type) continue;
if (type == OP_BUYSTOP || type == OP_SELLSTOP)
{
bool Del_1 = OrderDelete(OrderTicket());
if(!Del_1)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
if (type == OP_BUYLIMIT || type == OP_SELLLIMIT)
{
bool Del_2 = OrderDelete(OrderTicket());
if(!Del_2)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
}
}
//+------------------------------------------------------------------+
Qual è la segregazione per tipo? Cosa fa? Farebbe differenza se fosse scritto in questo modo?
{
bool Del_1 = OrderDelete(OrderTicket());
if(!Del_1)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
Perché le barre sono diverse in mt4 e mt5 sul mio iPhone? Anche se gli orari di apertura e chiusura dei bar sono gli stessi. Ovviamente ti impedisce di sfondare la linea di ieri alle 14:00 su MT4.
Perché le barre sono diverse in mt4 e mt5 sul mio iPhone? Anche se gli orari di apertura e chiusura dei bar sono gli stessi. Questo ovviamente interferisce perché la linea non ha sfondato ieri alle 14:00 su mt4.
Perché le barre sono diverse in mt4 e mt5 sul mio iPhone? Anche se gli orari di apertura e chiusura dei bar sono gli stessi. Ovviamente interferisce perché la linea non è stata rotta ieri alle 14:00 su MT4.
- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound, код которой необходимо вставить после каждой строчки "Print("..." в таком виде:
bool PlaySound(
stringa payment // nome del file
)
; ...
O è anche convertito in qualche modo?
Dichiarare
inoltre, cosa stamperà Print? E a quali condizioni?
Qual è lo scopo di questa azione? Suonare il suono quando l'ordine si chiude e scrivere il commento (su TP o SL) ?
Saluti. Ho chiesto in giro, ma non ho ancora trovato una risposta. Potresti dirmi perché con la seguente voce
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
Il sistema genera costantemente errori
ticket non valido per OrderDeletefunction
: errore OrderDelete 4051
Secondo il libro di riferimento è
Valore non valido del parametro della funzione
Anche se i parametri sembrano essere gli stessi.
Anche se se si rimuove la condizione e si lascia solo
OrderDelete(ticketD);
OrderDelete(ticketUP);
si cancella con successo (ma mi serve per condizione). Cosa faccio di sbagliato? Qui c'è tutta la storia:
https://www.mql5.com/ru/forum/160683/page31#comment_3911573
L'Expert Advisor legge i valori minimi e massimi delle ultime X barre e piazza gli ordini in base a questi valori. Poi, se il massimo o il minimo è diminuito, dovremmo cancellare l'ordine corrispondente e aprirlo usando i nuovi dati.
Ho appena iniziato a studiarlo e l'eliminazione piuttosto che la modifica è stata fatta per studiare la funzione e mi sono chiesto perché non funzionava.