Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 363

 
Tapochun:
Non credo che tu stia facendo la domanda qui. Crea un thread separato, allega il codice dell'indicatore e spera che qualcuno ti aiuti. Senza il codice... è improbabile che qualcuno vi aiuti.
L'indicatore non compra e non vende).
 
Scrivendo il ToR, mi sono imbattuto in una situazione in cui non capisco come descrivere correttamente l'algoritmo. Potete dirmi se è possibile chiudere parzialmente una posizione nel lavoro dell'EA?
 
Nikolay Lampickiy:
Scrivendo il ToR, mi sono imbattuto in una situazione in cui non capisco come descrivere correttamente l'algoritmo. Potete consigliarmi sulla possibilità di chiudere parzialmente una posizione nel lavoro dell'EA?
Per farlo, nell'ordine di chiudere una posizione, specificate un lotto più piccolo del lotto della posizione (questo è se MT4, in MT5 potete aprire una posizione opposta con un lotto più piccolo, e alla fine si sovrapporranno). La posizione con il lotto rimanente rimarrà sul mercato.
 
Nikolay Lampickiy:
Scrivendo il ToR, mi sono imbattuto in una situazione in cui non capisco come descrivere correttamente l'algoritmo. Potete dirmi se una chiusura parziale di una posizione è possibile nel lavoro di un EA?
Cosa c'è di così complicato? Se la posizione non è equamente divisa (es. 0.09) allora chiudi la maggior parte di essa (0.05) e sposta lo stop a pareggio, poi un'altra metà della posizione chiusa (0.02) e metti put a profitto e viceversa finché l'intera posizione è chiusa o in pareggio. Il passo può essere fisso o calcolato da qualsiasi intervallo, dipende dal sistema di trading.
 
Vladimir Zubov:
Cosa c'è di così complicato? Se la posizione non è equamente divisa (es. 0,09) allora chiudete la maggior parte di essa (0,05) e spostate lo stop a breakeven, poi un'altra distanza di chiusura e di nuovo la metà di quella rimasta (0,02) e spostate lo stop al prossimo passo di chiusura in positivo e così via fino a quando l'intera posizione è chiusa o raggiunge lo stop. Il passo può essere fisso o calcolato da qualsiasi intervallo, dipende dal sistema di trading.

Ho capito bene? Il linguaggio di programmazione MQL4 permette di formalizzare la chiusura solo della metà del volume degli ordini di mercato... come il lotto 10 e chiudere 5 lotti quando il prezzo raggiunge un certo livello.

O è possibile chiudere 1/3?

Oppure, sarebbe più facile implementare questa idea in un EA mettendo diversi ordini. Quando il prezzo raggiunge un livello richiesto, un ordine viene chiuso e l'altro rimane al posto della chiusura parziale del volume dell'ordine di mercato. Cosa ne pensate?

 
Vitalie Postolache:
Per fare questo, è necessario specificare un lotto più piccolo del lotto della posizione nell'ordine di chiusura (questo è se MT4, in MT5 è possibile aprire la posizione opposta con un lotto più piccolo, e si sovrapporranno alla fine). La posizione con il lotto rimanente rimarrà sul mercato.
Non sono soddisfatto della posizione opposta... grazie per la sua risposta.
 
Nikolay Lampickiy:

Ho capito bene? Il linguaggio di programmazione MQL4 permette di formalizzare la chiusura solo della metà del volume degli ordini di mercato... come il lotto 10 e chiudere 5 lotti quando il prezzo raggiunge un certo livello.

O è possibile chiudere 1/3?

Oppure, sarebbe più facile implementare questa idea in un EA mettendo diversi ordini. Quando il prezzo raggiunge un livello richiesto, un ordine viene chiuso e l'altro rimane al posto della chiusura parziale del volume dell'ordine di mercato. Cosa ne pensate?

Possiamo fare entrambe le cose. OrderClose permette di chiudere il volume che gli viene indicato. https://docs.mql4.com/ru/trading/orderclose

Naturalmente è possibile aprire diversi ordini con diversi livelli di profitto. In caso di fallimento della connessione sarà ancora più affidabile, perché i livelli di TP sono memorizzati sul server e saranno eseguiti se il prezzo li interseca.

OrderClose - Документация на MQL4
  • docs.mql4.com
OrderClose - Документация на MQL4
 
Vladimir Zubov:

Puoi fare entrambe le cose. OrderClose permette di chiudere il volume che gli è stato indicato. https://docs.mql4.com/ru/trading/orderclose

Naturalmente, puoi anche aprire diversi ordini con diversi livelli di profitto. In caso di fallimento della connessione questo sarà ancora più affidabile, perché i livelli TP sono memorizzati sul server e saranno eseguiti se il prezzo li attraversa.

Grazie per la risposta)))
 

Ciao a tutti, sto affrontando un problema, mi piacerebbe sentire il parere di professionisti o utenti MT5 più esperti. Ho scritto un indicatore e una classe CEventBase, che permette all'indicatore di generare eventi. Quando si eseguono Expert Advisors che elaborano questi eventi prima o poi, quando si eseguono in tempo reale, ottengo errori: 4001, 4102, 4104. Quando cominciano ad "ammucchiarsi", non smettono di farlo) allego il codice della funzione Generate, che in realtà è la fonte di tutti questi problemi. Sarei molto felice di sentire la tua opinione...)

Buona giornata a tutti!


bool CEventBase::Generate(long _chart_id, int _id_ind, SEventData &_data,
                          const bool _is_custom=true)
  {
   bool is_generated = true;
   // если индекс id события в массиве не верен
   if (_id_ind < 0 || _id_ind >= aEvents.Total())
    {
     Print("Не верно задан индекс ID события");
     return (false);
    }
   // заполняем поля 
   CEvent *event = aEvents.At(_id_ind);
   this._id = (ushort)(CHARTEVENT_CUSTOM+event.id);
   this._data = _data;
   this._data.sparam = event.name; // сохраняем имя события
   
   if(_is_custom)
     {
      ResetLastError();
      is_generated = EventChartCustom(_chart_id, event.id, this._data.lparam,
                                      this._data.dparam, this._data.sparam);
      if(!is_generated && _LastError != 4104)
         {
          Print("is_generated = ", is_generated);
          PrintFormat("%s Error while generating a custom event: %d", __FUNCTION__,_LastError);
          Print( ChartSymbol(_chart_id)," ",PeriodToString(ChartPeriod(_chart_id)), "Ошибка! _chart_id =", _chart_id, " event.id = ", event.id, " data.dparam = " ,this._data.dparam, " data.sparam = ", this._data.sparam);
          
         }
     }
   return is_generated;
  }


 
dariamap:

Ciao a tutti, sto affrontando un problema, mi piacerebbe sentire il parere di professionisti o utenti MT5 più esperti. Ho scritto un indicatore e una classe CEventBase, che permette all'indicatore di generare eventi. Quando si eseguono Expert Advisors che elaborano questi eventi prima o poi, quando si eseguono in tempo reale, ottengo errori: 4001, 4102, 4104. Quando cominciano ad "accumularsi", non smettono di accadere) allego il codice della funzione Generate, che in realtà è la fonte di tutti questi problemi. Sarò molto felice di sentire la tua opinione al riguardo...)

Buona giornata a tutti!

Ovviamente, il metodo che hai presentato è un metodo di transito. L'errore molto probabilmente non è in esso. Non è chiaro dai dati che avete presentato cosa sta succedendo. Ci possono essere diverse varianti:

  • Identificatore di carta non corretto (che è quello che dice l'errore 4101).
  • Domande troppo frequenti;
  • Altri parametri errati (ID degli eventi per esempio).

A giudicare dal livello del codice che hai scritto, possiamo dire che l'errore può essere ovunque e in qualsiasi momento.