Come si apre correttamente un ordine a mercato? - pagina 8

 
Dmitry Fedoseev:
Non sei tu che hai bisogno di una pausa.
E' proprio questo.
 
Comunque, la linea di fondo, imho, è questa.

A livello globale, ci sono due modi:

1) analisi dell'ambiente (aspirando la storia delle transazioni, controllando la posizione aperta o il volume della posizione);

2) analisi delle transazioni.

Il primo funziona più lentamente. Ma è più affidabile. Abbiamo bisogno di un compromesso. Forse, dobbiamo guardare la strategia e dipendere da essa.

Sì, FORTS ha un ticker completo, quindi non si dovrebbe lavorare con i tick ma con l'evento BookEvent.

È strano che Vasily Sokolov non abbia commentato questo argomento. Il suo punto di vista è interessante...
 
Dennis Kirichenko:
Comunque, la linea di fondo, imho, è questa.

A livello globale, ci sono due modi:

1) analisi dell'ambiente (aspirando la storia delle transazioni, controllando la posizione aperta o il volume della posizione);

2) analisi delle transazioni.

Il primo funziona più lentamente. Ma è più affidabile. Abbiamo bisogno di un compromesso. Forse, dobbiamo guardare la strategia e dipendere da essa.

Sì, FORTS ha un ticker completo, quindi non si dovrebbe lavorare con i tick ma con l'evento BookEvent.

È strano che Vasily Sokolov non abbia commentato questo argomento. Il suo punto di vista è interessante...
Forse presto passerò al vetro, ma per ora .... alla vecchia maniera.
 
Dennis Kirichenko:
Comunque, la linea di fondo, imho, è questa.

A livello globale, ci sono due modi:

1) analisi dell'ambiente (aspirando la storia delle transazioni, controllando la posizione aperta o il volume della posizione);

2) analisi delle transazioni.

Il primo funziona più lentamente. Ma è più affidabile. Abbiamo bisogno di un compromesso. Forse, dobbiamo guardare la strategia e dipendere da essa.

Sì, FORTS ha un ticker completo, quindi non si dovrebbe lavorare con i tick ma con l'evento BookEvent.

È strano che Vasily Sokolov non abbia commentato questo argomento. Il suo punto di vista è interessante...
A proposito, ho una domanda: possiamo usare l'eventoBookEvent nello stesso modo in cui usiamo Tick o Timer?
Cioè posso trasferirvi completamente la mia strategia?
 
Mi sono appena ricordato sull'argomento...

Una volta ho lavorato su questo ordine e ho scritto la classe CiOnTrade:
class CiOnTrade : public CTrade
Era un compito interessante. Io e il mio cliente ci siamo irritati a vicenda e ci siamo spezzati il cuore. Per quanto mi ricordo, il compito principale era quello di comprare/vendere il volume garantito. E se una parte del volume non veniva riempita, dovevamo cancellare questi ordini e vendere il resto a un prezzo diverso...

Quindi, la soluzione ottimale che ho trovato è stata nell'elaborazione degli stati. E ce n'erano così tanti:
enum ENUM_TRADE_STATE
  {
   TRADE_STATE_NONE=0,      // "ничего"
   TRADE_STATE_ORDERS=1,    // "только ордера"
   TRADE_STATE_POSITION=2,  // "только позиция"
   TRADE_STATE_ALL=3,       // "все"
  };
1) "Niente" - questo è lo stato iniziale, quando nulla è stato fatto.

2) "Solo ordini" - questo è lo stato quando gli ordini vengono effettuati.

3) "Solo posizione" è lo stato in cui gli ordini sono completamente eseguiti.

4) "Tutti" è lo stato in cui gli ordini non sono stati eseguiti completamente e c'è già una posizione sul mercato.

Quindi ogni stato doveva essere elaborato. Sì, a proposito, ammetto che ci sono anche stati intermedi. Quindi la mia classe potrebbe essere migliorata.
 
Gennady Mazur:
A proposito, è sorta una domanda: l'eventoBookEvent può essere usato allo stesso modo del Tick o del Timer?
cioè posso trasferirvi completamente la mia strategia?
Sì, ma si noti che BookEvent genera eventi più spesso. Ecco perché abbiamo bisogno di un filtro per setacciare quelli inutili. Per esempio, i prezzi non sono cambiati, ma solo i volumi di alcune offerte...
 
Dennis Kirichenko:
Sì, ma considera che il vetro ha più probabilità di generare eventi. Pertanto, avete bisogno di qualche filtro per setacciare gli eventi non necessari. Per esempio, i prezzi non sono cambiati, ma solo i volumi di alcune offerte...
Capisco grazie... e in alcuni casi il cambiamento di volume è più importante del cambiamento di prezzo, specialmente vicino a livelli forti.
 
Dennis Kirichenko:
La linea di fondo, imho, è questa.

A livello globale, ci sono due modi:

1) l'analisi dell'ambiente (risucchiando la storia degli scambi, controllando la posizione aperta o il volume della posizione);

2) l'analisi delle transazioni.

Il primo funziona più lentamente. Ma è più affidabile. Ci deve essere un compromesso. Forse dobbiamo guardare la strategia e dipendere da essa.
La variante OrderSend+Sleep(0) non funziona più lentamente di OrderSend+OnTradeTransaction. L'ho misurato. Quindi non uso la seconda variante non per le transazioni asincrone.
 
Dennis Kirichenko:
Presumo che le informazioni sull'accordo non siano ancora arrivate. Qui (segnato in rosso), ci si affida alla fortuna. Ed è una signora capricciosa :-))

bool OpenSellPosition(string symbol, double volume, string comment="", ulong deviation=10, ENUM_ORDER_TYPE_FILLING filling=ORDER_FILLING_FOK)
{
  MqlTradeRequest Request;
  MqlTradeResult Results;
  ZeroMemory(Request);
  ZeroMemory(Results);
  Request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
  Request.action=TRADE_ACTION_DEAL;
  Request.type=ORDER_TYPE_SELL;
  Request.symbol=symbol;
  Request.volume=volume;      
  Request.deviation=deviation;
  Request.comment=comment;  
  Request.type_filling=filling;
  bool res=false;
  res=OrderSend(Request,Results);
  if(res)
  {
    if(Results.deal>0) return(true);
    else return(false);

  }
  return(false);
}

Anche conORDER_STATE_FILLED, Results.order può avere un problema - Results.deal è zero. La riproduzione al 100% di questa situazione si ottiene sul server FXOpen-MT5.

Raccomando di aprire molte demo su diversi server e raggiungere la piena funzionalità del codice. L'ho fatto per MT4 biblica. Ecco perché non c'è nessun problema con il sottogioco.

 
fxsaber:
OrderSend+Sleep(0) non è più lento di OrderSend+OnTradeTransaction. L'ho misurato. Pertanto, non uso la seconda variante non per le transazioni asincrone.

La variante OrderSend+Sleep(0) è temporanea, perché è una lacuna degli sviluppatori (non usarla come esempio :) ).

Quando sarà corretto, rimarrà solo OrderSend

Motivazione: