Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 155

 
Nikolai Semko:

Ho trovato uno studio interessante di due anni fa che confronta l'efficacia di diverse lingue

https://greenlab.di.uminho.pt/wp-content/uploads/2017/09/paperSLE.pdf



Oh, mio Dio!

Ada è davvero viva e in crescita! Se non mi sbaglio, il primo OOP. L'ho studiato nei primi anni '80. Non ne ho sentito parlare fino ad ora, pensavo che il linguaggio fosse morto come Modula. Entrambi sono aggiornamenti profondi di Pascal. Non avevo un compilatore Ada, e avevo Modula - un sette passi su DWK, se qualcuno si ricorda.

 

Per evitare errori di esecuzione nel tester, inviate ordini di mercato appropriati nel caso in cui un pendente o uno SL/TP debba essere piazzato alprezzo corrente:

  • Piazza un ordine pendente al prezzo corrente - aggiungilo dopo l'ordine a mercato OrderSend.
  • Posizionare la posizione SL/TP al prezzo corrente - aggiungere dopo la posizione OrderClose.
 
fxsaber:

Per evitare errori di esecuzione nel tester, inviate ordini a mercato appropriati nel caso in cui un ordine pendente o SL/TP debba essere piazzato al prezzo corrente:

  • Piazza un ordine pendente al prezzo corrente - aggiungilo dopo l'ordine a mercato OrderSend.
  • Piazza la posizione SL/TP al prezzo corrente - aggiungila dopo la posizione OrderClose.

Possiamo discuterne più in dettaglio? Non è molto chiaro:

  • per piazzare un ordine pendente al prezzo corrente, bisogna aggiungere qualcosa dopo aver inviato una richiesta di apertura di posizione (?????????)
  • per piazzare un ordine di stop (a cosa?) al prezzo corrente, bisogna aggiungere qualcosa dopo aver inviato una richiesta di chiudere una posizione (?????????)
Queste sono le domande che sorgono dopo aver cercato di decifrare ciò che avete scritto...
 
Artyom Trishkin:

Potrebbe essere più specifico? Non è molto chiaro:

  • per piazzare un ordine pendente al prezzo corrente, bisogna aggiungere qualcosa dopo aver inviato una richiesta di apertura di posizione (?????????)
  • per piazzare un ordine di stop (a cosa?) al prezzo corrente, bisogna aggiungere qualcosa dopo aver inviato una richiesta di chiudere una posizione (?????????)
Tali domande appaiono dopo aver cercato di decifrare ciò che avete scritto...

Il problema è mostrato qui. Soluzione.

// Делает более точными MT4/5-тестеры.
TICKET_TYPE MyOrderSend( const string Symb, int Type, const double dVolume, const double Price, const int SlipPage, const double SL, const double TP,
                         const string comment = NULL, const MAGIC_TYPE magic = 0, const datetime dExpiration = 0, color arrow_color = clrNONE )
{
  static const bool IsTester = MQLInfoInteger(MQL_TESTER);
  MqlTick Tick = {0};  
  
  bool Res = IsTester && SymbolInfoTick(Symb, Tick);
  
  if (Res && (Type > OP_SELL))
  {
    if ((Type == OP_BUYLIMIT) || (Type == OP_BUYSTOP))
    {
      if (Price == Tick.ask)
        Type = OP_BUY;
    }
    else if (Price == Tick.bid)
      Type = OP_SELL;
  }
  
  const TICKET_TYPE Ticket = OrderSend(Symb, Type, dVolume, Price, SlipPage, SL, TP, comment, magic, dExpiration, arrow_color);
  
  Res = Res && (Type <= OP_SELL) && (Ticket != -1) &&
        (Type ? (SL == Tick.ask) || (TP == Tick.ask) : (SL == Tick.bid) || (TP == Tick.bid)) &&
        OrderClose(Ticket, dVolume, Type ? Tick.ask : Tick.bid, SlipPage, arrow_color);
  
  return(Ticket);
}

// Делает более точными MT4/5-тестеры.
bool MyOrderModify( const long Ticket, const double Price, const double SL, const double TP, const datetime Expiration, const color Arrow_Color = clrNONE )
{
  static const bool IsTester = MQLInfoInteger(MQL_TESTER);
  
  bool Res = false;
  
  if (IsTester && OrderSelect(Ticket, SELECT_BY_TICKET) && !OrderCloseTime())
  {
    if (OrderType() <= OP_SELL)
    {
      Res = (OrderClosePrice() == SL) || (OrderClosePrice() == TP);
      Res = OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color) && (!Res || OrderClose(Ticket, OrderLots(), OrderClosePrice(), 0, Arrow_Color));
    }
    else if (OrderClosePrice())    
      Res = ((OrderClosePrice() == Price) &&
             (MyOrderSend(OrderSymbol(), OrderType() & 1, OrderLots(), Price, 0, SL, TP,
                          OrderComment(), OrderMagicNumber(), OrderExpiration(), Arrow_Color) != -1) && OrderDelete(Ticket)) ||
            OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color);
    else
    {
      MqlTick Tick = {0};
      
      if (SymbolInfoTick(OrderSymbol(), Tick))
        Res = (((bool)(OrderType() & 1) ? (Price == Tick.bid) : (Price == Tick.ask)) &&
               (MyOrderSend(OrderSymbol(), OrderType() & 1, OrderLots(), Price, 0, SL, TP,
                            OrderComment(), OrderMagicNumber(), OrderExpiration(), Arrow_Color) != -1) && OrderDelete(Ticket)) ||
               OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color);
      else
        Res = OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color);                     
    }
  }
  else
    Res = OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color); 
  
  return(Res);
}

#define OrderSend MyOrderSend
#define  OrderModify MyOrderModify
 
fxsaber:

Il problema è mostrato qui. Soluzione.

Questo non rende più chiaro a cosa serve o cosa fare. Dopo tutto, molte persone hanno bisogno di capire ciò che è scritto sul motivo per cui si scrive una soluzione prima di iniziare a leggere il codice per farne una propria o usarne una già pronta.

Ho chiesto una spiegazione più dettagliata di questo:

Il forum sul trading, i sistemi di trading automatico e il test delle strategie di trading

Caratteristiche del linguaggio mql5, complessità e tecniche

fxsaber, 2019.12.18 12:45

Per evitare errori di esecuzione nel Tester, inviate ordini di mercato appropriati nel caso in cui abbiate bisogno di piazzare un pending o uno SL/TP al prezzo corrente:

  • Piazzare un ordine in sospeso al prezzo corrente - aggiungere dopo OrderSend market order.
  • Piazza la posizione SL/TP al prezzo corrente - aggiungila dopo la posizione OrderClose.

E ha mostrato un esempio di come viene percepito da me, o forse da qualcun altro:

Forum sul trading, sistemi di trading automatico e test di strategia

Peculiarità di mql5, consigli e trucchi

Artyom Trishkin, 2019.12.18 12:53 pm

Come posso spiegarlo più dettagliatamente? Non capisco niente:

  • per piazzare un ordine pendente al prezzo corrente, è necessario aggiungere qualcosa dopo aver inviato una richiesta di apertura di posizione (?????????)
  • per piazzare un ordine di stop (a cosa?) al prezzo corrente, bisogna aggiungere qualcosa dopo aver inviato una richiesta di chiudere una posizione (?????????)
Queste sono le domande che appaiono dopo aver cercato di decifrare quello che hai scritto...

Comunque...

 
Artyom Trishkin:

Ti ho chiesto di essere più specifico

Piazzando un ordine pendente e SL/TP al prezzo corrente non si accetta l'esecuzione sul tick corrente nel MT5-Tester.

 

Ciao a tutti.

Potete consigliarmi quali strumenti sono disponibili in MT5 per visualizzare i grafici in tick?

In MT4 c'era un'opzione "aprire offline". Era comodo lavorare con le zecche creando i miei file hst della storia.

In MT5 non c'è un'opzione "apri stand-alone". Ma gli strumenti software per lavorare con le zecche sono eccellenti.

Non può essere impossibile che non ci sia la possibilità di mostrarli su un grafico

 
fxsaber:

Il problema è mostrato qui. Soluzione.

  const TICKET_TYPE Ticket = OrderSend();
  ...
  OrderClose(Ticket, dVolume, Type ? Tick.ask : Tick.bid, SlipPage, arrow_color);

Che mucchio di stronzate! Perché aprire con SL/TP al prezzo attuale?

Ebbene, la chiusura ponendo SL/TP al prezzo corrente, se del caso, è fatta intenzionalmente. Non c'è nemmeno bisogno di emulare un grilletto.

 
Andrey Khatimlianskii:

Che mucchio di stronzate! Perché aprire con SL/TP al prezzo attuale?

Ebbene, la chiusura ponendo SL/TP al prezzo corrente, se del caso, è fatta intenzionalmente. Non c'è bisogno di emulare l'innesco.

In questo modo si può facilmente ottenere un innesco in decine di minuti o ore.

Immaginate di dover chiudere per TP che è in qualche modo calcolato. E ora è uguale al prezzo attuale.

 
fxsaber:

devono chiudere al TP, che è in qualche modo calcolato. E ora è diventato uguale al prezzo attuale.

In questo caso, controllo sempre se questo TP non sia già scattato (il prezzo lo ha attraversato), e chiudo secondo il mercato.

Oppure, se è necessario uscire con un limite, lo tiro dietro il prezzo, finché non si riempie.

Motivazione: