Sviluppatori! Testate anche quello che create? - pagina 9

 
Mikalas:

C-4 Secondo me, ottenere informazioni operative è molto più

più interessante della storia. Dobbiamo sapere due cose sullo strumento:

1. mandati.

2. Posizione

Mi sembra che sia molto più importante analizzare i trade, perché sono al livello più basso e da essi si possono conoscere gli ordini e le posizioni, ma non è vero il contrario. Ma non è vero il contrario.

Nel vostro caso, OnInit() viene eseguito una volta all'inizio del programma. Ma ci deve essere solo un blocco di controlli. Sincronizza lo stato dell'EA con la situazione attuale. E non importa dove sono arrivati i nuovi dati, dalla storia degli ordini al momento dell'inizializzazione, dalla storia al momento dell'esecuzione o dall'evento OnTradeTransaction. Il risultato deve essere identico, perché c'è un solo blocco responsabile anche di questo.

 

Vasiliy - questo è un pezzo di codice "primitivo".

È semplice - si prende un ordine e poi si lavora con esso....

my_order = temp_order;

Una linea!

 
papaklass:

L'evento OnTradeTransaction è necessario nella sua forma attuale?

Si scopre che non è così, dato che dobbiamo ancora prendere informazioni dalla storia.
 

Mikalas:

Ho appena notato che il prodotto DEVE essere testato (lo sto testando per i MIEI soldi)!

Suppongo che questo vada fuori tema.

allora, mi dai la rivista e il codice?

Sono in vena di aiutare qui.

 
C-4:
Si scopre che non è così, dato che dobbiamo ancora prendere informazioni dalla storia.

Oh, mio Dio! È valido nella storia?

papaklass probabilmente intendeva dire che OnTradeTransaction restituisce errori?

 

sergeev ->Sono in vena di aiutare qui.

Mi dispiace, ma non ho bisogno di aiuto.

 
Mikalas:

sergeev ->Sono in vena di aiutare qui.

Mi dispiace, ma non ho bisogno di aiuto.

perché devi sbavare per 9 pagine?
 
Mikalas:

Vasiliy - questo è un pezzo di codice "primitivo".

È semplice - si prende un ordine e poi si lavora con esso....

Una linea!

Non è una questione di una linea o di cento. Si tratta dell'approccio. Ecco il codice come esempio per vedere cosa intendo. È garantito per tenere traccia dei nuovi ordini in arrivo con o senza evento TradeTransaction, sia che si tratti di un'inizializzazione o di un nuovo ordine in arrivo:

/*Какое бы событие не наступило, оно будет обработано OnRefresh()*/

OnInit()
{
    OnRefresh();
}

void OnTimer(void)
{
    OnRefresh();
}

void  OnTradeTransaction(
      const MqlTradeTransaction&    trans,
      const MqlTradeRequest&        request,
      const MqlTradeResult&         result
   )
{
     OnRefresh();
}

///
/// Следит за поступлением новых трейдов и ордеров.
///

void OnRefresh()
{
    HistorySelect(0, TimeCurrent());
    for(; ordersCountNow < HistoryOrdersTotal(); ordersCountNow++)
    {  
       printf(HistoryOrderGetTicket(dealsCountNow));
    }
}

///
/// Текущее количество ордеров.
///
int ordersCountNow;
 
papaklass:

Ecco di cosa sto parlando.

Perché questo OnTradeTransaction non è separato in eventi separati:

- OnOrderCreate //emettere un ordine;

- OnOrderModify // modifica di un ordine attivo;

- OnOrderDelete //cancellare l'ordine;

- OnPositionOpen //aprire la posizione;

- OnPositionModify //impostare/modificare gli arresti, cambiare il volume della posizione;

- OnPositionClosed //chiude una posizione usando uno Stop Loss o un ordine di mercato;

e così via.

Con questo approccio, il trader si iscrive e gestisce gli eventi che gli interessano.

Ricevo tutti gli eventi che mi interessano, c'è una divisione lì!
 

C-4, sarà elaborato, naturalmente, ma perché OnRefresh() è necessario?

Tutto è condiviso in OnTradeTransaction(). Non ho carenza di informazioni.