Sviluppatori! Testate anche quello che create? - pagina 6

 
Mikalas:

Potreste dirmi come controllate se un ordine viene modificato (senza risposta del server)?

La modifica di un ordine innesca diversi eventi e io controllo tutti questi eventi e controllo anche il tempo in cui il compito pendente è nella lista pendente.

Ho un robot forts che fa 500-600 scambi per sessione e nessuna perdita di eventi finora, cioè tutti i compiti nella lista di attesa sono eseguiti e non raggiungono il controllo del timer.

 
Yurich:

Per definizione, un modello di eventi non può essere completamente affidabile; se un evento non è arrivato non significa che non sia accaduto.

Se alcuni eventi arrivano e altri no, allora sono necessari blocchi di codice duplicati per garantire l'elaborazione dei risultati dei comandi, che controllerebbero lo stato confrontandolo con quello precedente, ecc. Allora la domanda è: se il codice duplicato funziona in modo assolutamente affidabile, perché usare il codice costruito sugli eventi? Perché usare due codici invece di uno che non è guidato dagli eventi? Per allevare la ridondanza?
 
Yurich:

La modifica di un ordine innesca diversi eventi e io controllo tutti questi eventi e controllo anche il tempo in cui il compito della lista d'attesa è nella lista d'attesa.

Il mio robot forts fa 500-600 scambi per sessione e non ci sono stati eventi di perdita finora, cioè tutti i compiti nella lista di attesa sono eseguiti e non raggiungono il controllo del timer.

Ora questo è più interessante... Quindi non c'è stato un caso in cui l'evento atteso non è arrivato alla fine?
 
C-4:
Ora questo è più interessante... Quindi non c'è mai stato un caso in cui un evento atteso non è arrivato?
Quando ho detto che non c'è stata perdita di eventi, volevo dire che i compiti che sono stati messi in lista d'attesa, hanno aspettato il loro evento (almeno uno della catena di eventi significativi). Forse ci sono perdite di eventi che Michael dice, non tengo un registro degli eventi, ma non influenzano il funzionamento generale del mio modello di eventi.
 

a:Michael.

In generale, finché la situazione non è risolta in qualche modo, è più facile per voi fare un ulteriore controllo:

int dealsCount = 0;
///
/// С заданной периодичностью синхронизируем количество обработанных и поступивших трейдов.
///
void OnTimer(void)
{
   if(dealsCount != HistoryDealsTotal())
   {
      //Пришли новые трейды. их нужно обработать
      for(int i = dealsCount; i < HistoryDealsTotal(); i++)
      {
          ulong ticket = HistoryDealGetTicket(i);
          DealChecking(ticket);
      } 
   }
}

///
/// Поступило новое событие о поступлении трейда.
///
void  OnTradeTransaction(
      const MqlTradeTransaction&    trans,
      const MqlTradeRequest&        request,
      const MqlTradeResult&         result
   )
{
   if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
     DealChecking(trans.deal);
   ...
}

///
/// Обработчик трейдов.
/// \param ticket - Уникальный идентификатор трейда, который надо обработать.
void DealChecking(int ticket)
{
   
   // Далее идет нужная обработка.
   ...
   //Трейд обработан - увеличиваем количество обработанных трейдов.
   dealsCount++;
}

Non c'è ridondanza in questa implementazione perché c'è solo un gestore effettivo dell'evento "new trade". Ma è chiamato in due modi diversi: via timer e via evento OnTradeTransaction. Se il nuovo trade non ha chiamato l'evento OnTradeTransaction per qualche motivo, si verificherà una non-sincronizzazione dell'importo totale e dell'importo dei trade processati. Tutte le compravendite non elaborate in questo caso arriveranno ancora al gestore DealChecking attraverso il ciclo for.

Questo schema può essere limitato per qualsiasi evento, non solo per TRADE_TRANSACTION_DEAL_ADD.
 
Mikalas:

...

P/S E non c'è bisogno di "strappare il testo" e l'intera frase inizia così:

Conoscendo il tipo di commercio, puoi decidere di analizzare lo stato attuale degli ordini, delle posizioni e dei commerci nel tuo conto di trading.

Puoi sempre trovare maggiori dettagli nell'Aiuto.

Sono d'accordo conYurich su tutto il resto. Probabilmente dovreste riconsiderare anche il vostro schema.

 

Cari colleghi!

Grazie mille a tutti voi per le vostre opinioni!

Solo un tarlo mi rode: a cosa serve allora la PIATTAFORMA?

 

Mikalas:

Perché avete bisogno di una PIATTAFORMA allora?

Probabilmente era una domanda retorica :) Se no, la risposta è già stata data in questo thread:

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

Sviluppatori! Testate anche quello che create?

C-4, 2013.12.10 12:08

Non lo consiglio. È molto più facile risolvere questo bug insieme a MQ che costruire un nuovo terminale per la piazza da soli. Vi impantanerete in infinite correzioni di bug e nella scrittura di "funzionalità standard". Parlo per esperienza personale. Ho sviluppato parzialmente uno di questi complessi autocostruiti basati su Stock# - il risultato è un'altra "bicicletta" per compiti specifici. È meglio combattere con il servizio di supporto, sarà più facile ed economico.
Nemmeno io sono contento di tutto quello che c'è nel terminale, per esempio l'atteggiamento "ultimo prezzo". Ma spero che quando si riunirà una massa critica di agenti di cambio, MQ comincerà ad ascoltare le loro esigenze.
 
Ok. Qual è la vera alternativa a MT5?
 
Armen:
Ok. Qual è la vera alternativa a MT5?

Questa è esattamente la domanda che dovete porvi prima di creare questi thread. Prima dell'arrivo di MT5, per fare trading su FORTS, bisognava almeno scrivere il proprio terminale di trading. Se volete fare trading su FORTS non ci sono soluzioni pronte in questo campo, a parte Quick che è praticamente inutile per l'algotrading (chi una volta ha scritto programmi su QPile più lunghi di 1000 linee capirà di cosa sto parlando). C'è un set ausiliario di librerie Stock#, ma non si è sviluppato in un vero e proprio terminale di trading "out of the box" (esegui e scambia). In realtà ci vorranno fino a 6 mesi per un programmatore di media o alta abilità per creare una piattaforma di trading usando Stock#. Il programmatore principiante sarà sopraffatto da questo prodotto. Ci sono anche terminali come Kofite, TSLab, WealthLab. Ma devi capire chiaramente che non sono direttamente supportati dai broker, quindi devi avere a che fare con Quick + la tua Super Piattaforma di Trading (con tutti i problemi associati al trasferimento dei dati tramite DDE). E se vuoi lavorare attraverso il protocollo PlazaII - per 3 000 rubli al mese, il broker ti fornirà una tale opportunità.

Nel segmento borghese, le cose non vanno meglio. Non tutti i broker americani forniscono una piattaforma di trading con la possibilità di algotrading. Non è possibile lavorare con tutti i broker americani dalla Russia. È bene che vi diano un'API. E di nuovo siamo tornati a scrivere la nostra bicicletta per questa API. Non solo, ma le piattaforme fornite sono troppo diverse, orientate a diversi segmenti di mercato. Basta confrontare Wealth-Lab con ThinkOrSwim. Nessuno standard, nessuna interfaccia unificata.

In generale, se il tuo motto è "sogno solo la pace" o "faccio trading per testare nuovi software e scrivere la prossima bicicletta" - allora dovresti davvero cercare qualche altra piattaforma che MetaTrader5.