Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 29

 
yaaarik777:

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);
  }
}
 
Vladimir Zubov:

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?

if (type > 1 && type < 6)
   {
     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. Questo è chiaramente un ostacolo perché la linea non è stata rotta ieri alle 14:00 su MT4.
File:
image.png  82 kb
image.png  81 kb
 
Buon pomeriggio, potreste dirmi, per favore, che ho scaricato la versione mt4 636 su Android, ma non vede la lista dei broker. La versione del terminale non è più supportata?(( Se è così, dove posso scaricarne una funzionante?
 
MetaGSss:
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.
Vogliono che tu sappia in anticipo dove andrà il prezzo
 
MetaGSss:
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.
lo spread è per persone estreme, naturalmente)))
 
MetaGSss:
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.
i simboli sono anche leggermente diversi)
 

- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound,  код которой необходимо вставить после каждой строчки "Print("..." в таком виде: 

bool PlaySound(

stringa payment // nome del file

)

; ...

O è anche convertito in qualche modo?

Dichiarare

bool PlaySound( nell'intestazione del programma - avrete l'opportunità di attivare e disattivare il suono nel file impostato extern bool Play = TRUE;

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) ?






GrazieA1exPit per la risposta dettagliata e chiara ... "Il punto dell'azione" è di suonare gli eventi di "chiusura degli ordini a Takeprofit e Staploss" = un suono diverso per ogni ...
 

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.