Servizi, nuove funzionalità nell'architettura MT5, il funerale di MT4 è proprio dietro l'angolo. - pagina 5

 
Petros Shatakhtsyan:


È interessante notare che ieri volevo usare le caratteristiche di MarketBookAdd e OnBookEvent per fare un EA multivaluta.

Ma per qualche motivo MarketBookAdd sul tester non funziona. Dà un errore 4901-La piladei prezzi non può essere aggiunta.

Ma funziona solo in tempo reale...
 
Alexey Kozitsyn:
Funziona solo in tempo reale.


E non ho bisogno di ottenere una pila di prezzi, ma di avere caratteristiche così semplici:

1. cancellare il contenuto di Market Watch.

2. Aggiungere lì i caratteri desiderati (questo è disponibile)

3. Usa la funzione o l'evento per ricevere tutti i tick che vengono visualizzati in Market Watch da ogni simbolo, o fai OptiScope insieme alla funzione Multi-tick.

 
Petros Shatakhtsyan:


E non ho bisogno di ottenere la pila di prezzi, ma di avere delle possibilità così semplici:

1. cancellare il contenuto di Market Watch.

2. Aggiungere lì i caratteri desiderati (questo è disponibile)

3. Utilizzare la funzione o l'evento per ricevere tutti i tick che vengono visualizzati in Market Watch da ogni simbolo, o fare Optiсk insieme alla funzione MultiTick.

Non è abbastanza chiaro perché hai deciso di passare attraverso la profondità del mercato se vuoi lavorare con Market Watch e ticks?
 
Alexey Kozitsyn:
Non è abbastanza chiaro perché hai deciso di passare attraverso lo stack dei prezzi se vuoi lavorare con la panoramica del mercato e i tick?

E dove andrete a prendere i dati di tutte le quotazioni che sono visibili o aggiunte alla panoramica del mercato.
 
Petros Shatakhtsyan:

E dove andrete a prendere i dati di tutte le quotazioni che sono visibili o aggiunte alla panoramica del mercato.
Ehm... OnTimer(), OnTick(), OnCalculate()...
 
Petros Shatakhtsyan:

E dove andrete a prendere i dati di tutte le quotazioni che sono visibili o aggiunte alla panoramica del mercato.

MqlTick tickEUR;
MqlTick tickGBP;
MqlTick tickEURGBP;

GetSymbolByName(string symbol)   {    string symbol_name="";   // Имя символа на сервере //--- Если передали пустую строку, вернем пустую строку    if(symbol=="")       return(""); //--- Пройтись по списку всех символов на сервере    for(int s=0; s<SymbolsTotal(false); s++)      {       //--- Получим имя символа       symbol_name=SymbolName(s,false);       //--- Если искомый символ есть на сервере       if(symbol==symbol_name)         {          //--- Выберем его в окне "Обзор рынка"          SymbolSelect(symbol,true);          //--- Вернем имя символа          return(symbol);         }      } //--- Если искомого символа нет, вернем пустую строку    Print("Символ "+symbol+" не найден на сервере!");    return("");   } int OnInit()   { //---    GetSymbolByName("EURUSD"+SymbolSuffix);    GetSymbolByName("GBPUSD"+SymbolSuffix);    GetSymbolByName("EURGBP"+SymbolSuffix); }

void OnTimer() // или OnTick   {       if(!SymbolInfoTick("EURUSD"+SymbolSuffix,tickEUR)) {Print("EURUSD price has not been received"); return;}    if(!SymbolInfoTick("GBPUSD"+SymbolSuffix,tickGBP)) {Print("GBPUSD price has not been received"); return;}    if(!SymbolInfoTick("EURGBP"+SymbolSuffix,tickEURGBP)) {Print("EURGBP price has not been received"); return;} if(tickEUR.ask!=0 && tickEUR.bid!=0) {} // ну и все в этом духе }

 
Maxim Dmitrievsky:

Come puoi essere così empiamente ottuso per così tanti post?
Puoi riconoscere le persone che offrono qualcosa di utile dalle frecce che spuntano dalla loro schiena. Qualsiasi cosa nuova viene sempre accolta con una risposta ostile. Soprattutto quelli che fanno soldi vendendo consulenti di arbitraggio copiati da hrenfx poiché il loro uso diretto sul mercato è impossibile a causa dell'opposizione di questa società di brokeraggio.
 
Maxim Dmitrievsky:


Sarebbe inefficiente se EA gestisse ogni tick, anche se i millisecondi sono usati nel timer.

Serve un modo più semplice per ottenere tutti i tick direttamente dalla panoramica del mercato.

Non è possibile un OpTisk passante, perché funziona solo quando il prossimo tick arriva dove si trova l'EA.

 
Petros Shatakhtsyan:

Dovrete comunque farlo tramite un timer. Il timer ha semplicemente bisogno di un algoritmo in modo che non faccia una richiesta se l'ultimo tick è uguale al tick precedente.

BookEvent non vi aiuterà in questo caso.

 
Alexey Kozitsyn:

Dovrete comunque farlo tramite un timer. Il timer ha semplicemente bisogno di un algoritmo in modo che non faccia una richiesta se l'ultimo tick è uguale al tick precedente.

BookEvent non vi aiuterà in questo caso.


Sì, ma dovresti anche tener conto del fatto che qui c'è solo un timer, non così, così VC++, e se hai molti controlli del timer, potresti perdere un sacco di tick e tutto diventerebbe poltiglia.

Motivazione: