Consulente multivaluta. Preferibilmente l'opinione degli sviluppatori. - pagina 3

 
Reshetov:
LeoV:
YuraZ ha scritto (a): Per essere onesti e non è molto bello ... diciamo che il tick non è arrivato per queste coppie e lo mancherai di nuovo

Se si mostrasse un pezzo di codice che genera l'input, si potrebbe trovare l'errore logico più velocemente

Ma dovrebbe esserci una soluzione comunemente accettata in MQL, giusto? Come "sincronizzare" l'apertura delle barre per diversi simboli? Beh, a quanto pare, dovremmo aspettare l'apertura di una nuova barra per tutti i simboli che vengono utilizzati. Ma come farlo correttamente?

Non c'è bisogno di sincronicità e altre invenzioni in bicicletta. Tutto è già stato inventato da tempo. La presenza di una nuova barra formata viene controllata solo per quello strumento su cui è installato l'Expert Advisor all'arrivo del primo tick. E anche l'evento start() si attiva solo su quel simbolo all'arrivo di un nuovo tick. Ti ho dato un pezzo di codice che esegue questo controllo in modo che la posizione successiva, in caso di requotes, non venga aperta sulla barra successiva e dopo un fallimento cerchi di aprire sulla stessa barra. Tutto funziona bene per me sia in modalità singola che multicurrency. L'affare in caso di requotes viene aperto sulla stessa barra, ma solo con un certo ritardo, e quindi non sempre al prezzo aperto della barra, ma con un certo offset. Cioè ci saranno differenze con il tester, ma non in barre, ma nel prezzo di apertura.


Yuri, l'inizio di una nuova ora avverrà anche se la zecca non è arrivata!

Inizieremo una nuova ora anche se la zecca non è arrivata!


è possibile calcolare una nuova barra da un tick in una nuova barra di QUALSIASI strumento


LeoV attende un nuovo tick in modo sincrono per tutte le coppie utilizzate

 
YuraZ:
Il nucleo:

YuraZ ha scritto (a):

francamente e non è esattamente bello ... Se la spunta non è arrivata per queste coppie e ti mancherà ancora

Se il tick non è arrivato, non puoi piazzare un ordine subito, a meno che tu non usi uno script,

E solo se le zecche arrivano alle società di intermediazione e non le trasmettono al tuo terminale (di giorno).

Ecco perché, quando stavo implementando un Expert Advisor multivaluta, stavo facendo una State Machine di Miles (o Moore),

che ha monitorato gli stati aperti dell'ordine per le coppie necessarie. Naturalmente non è stato sempre possibile

Naturalmente, non era sempre possibile aprire al prezzo giusto, ma questo approccio garantiva che gli ordini sarebbero stati ESATTAMENTE aperti.

facile! è possibile effettuare un ordine :-) se la spunta non è arrivata

Pensaci bene! Se non lo fai, ti darò un suggerimento!

Di solito con gli EA multivaluta la situazione è tale che se non c'è garanzia al 100% di arrivo dell'ordine

allora la logica del lavoro del consigliere sarà distrutta.

A proposito, non dimenticate che il vostro EA sta lavorando sui tick della coppia su cui è in bilico,

Quindi, anche se ci fosse un tick su un'altra coppia, e non ci fosse un tick sulla coppia con il tuo EA attaccato,

allora la sincronizzazione sarà interrotta.

Non dimenticate le cose spiacevoli come la perdita di connessione con le società di intermediazione e le requote (se avete a che fare con un conto reale).

A proposito, su micro-reali ho spesso situazioni in cui un ordine non viene mai passato finché il terminale non viene ricaricato.

Anche in modalità manuale. Stanno aspettando qualcosa, aspettando...

Ecco perché ho abbandonato da tempo i sistemi basati sugli ordini di coppia.

È troppo fastidioso.

 
thecore:
YuraZ:
il nucleo:

YuraZ ha scritto (a):

francamente e non è esattamente bello ... Se la spunta non è arrivata per queste coppie e ti mancherà ancora

Se il tick non è arrivato, non puoi piazzare un ordine subito, a meno che tu non usi uno script,

E solo se le zecche arrivano alle società di intermediazione e non le trasmettono al tuo terminale (di giorno).

Ecco perché, quando stavo implementando un Expert Advisor multivaluta, stavo facendo una State Machine di Miles (o Moore),

che ha monitorato gli stati aperti dell'ordine per le coppie necessarie. Naturalmente non è stato sempre possibile

Naturalmente, non ero sempre in grado di aprire al prezzo necessario, ma questo approccio garantiva che gli ordini sarebbero stati SEMPRE aperti.

facile! è possibile effettuare un ordine :-) se la spunta non è arrivata

Pensaci bene! Se non lo fai, ti darò un suggerimento!

Di solito con gli EA multivaluta la situazione è tale che se non c'è garanzia al 100% di arrivo dell'ordine

allora la logica del lavoro del consigliere sarà distrutta.

A proposito, non dimenticate che il vostro EA sta lavorando sui tick della coppia su cui è in bilico,

Quindi, anche se ci fosse un tick su un'altra coppia, e non ci fosse un tick sulla coppia con il tuo EA attaccato,

allora la sincronizzazione sarà interrotta.

Non dimenticate le cose spiacevoli come la perdita di connessione con le società di intermediazione e le requote (se avete a che fare con un conto reale).

A proposito, su micro-reali ho spesso situazioni in cui un ordine non viene mai passato finché il terminale non viene ricaricato.

Anche in modalità manuale. Stanno aspettando qualcosa, aspettando...

Ecco perché ho abbandonato da tempo i sistemi basati sugli ordini di coppia.

Dolorosamente fastidioso.

Probabilmente volevi scrivere TIC... ma hai appena scritto ordine.


Lei capisce che un EA può entrare su EURUSD e usare USDCHF.

Basta scrivere

LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK);

... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...



Pezzo di codice che funziona

OpenLevel = MarketInfo( sSymbol, MODE_BID );
se ( TDARELOCK == 0 )
ticket=OrderSend( sSymbol,OP_SELL,Lots,OpenLevel,3,0,0,sComment,mMagic,0,Red);


----

E il TIC per USDCHF potrebbe non essere sufficiente per ottenere un tick per qualsiasi coppia.


Spero che MQL5 non abbia bisogno di ricevere tick per far funzionare il programma

hanno promesso di fare eventi, il che significa che qualsiasi pezzo di codice può essere passato su un evento

----



la seconda domanda riguardante i blocchi nel terminale - questo problema può essere risolto riavviando - questo è più probabile per gli sviluppatori.

Ho visto anche questo

questo è anche un trattamento e c'è un esempio qui sul forum

Ну вот и все - отлично работает процедруа программного реконнекта :)
НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ4.
//В начале советника подключаем необходимые ДЛЛ-ки и модули
#include <winuser32.mqh>
#import "user32.dll"
int GetParent(int hWnd);
#import
 
//Копируем процедуру в наш советник или библиотеку и вызываем ее там, где вам нравиться
//Лично я вызываю перед рассчетом данных - но можно перед установкой ордеров. Правда тогда
//возможно нужно будет делать задержку в пару секунд
//У меня все работает
int Reconnect()
{
int result;
int hwnd = WindowHandle(Symbol(), Period()); // получаем хендл окна графика
hwnd = GetParent(hwnd); // получаем хендл родительского окна
hwnd = GetParent(hwnd); // ...
hwnd = GetParent(hwnd); //добираемся до главного окна
result = SendMessageA(hwnd, WM_COMMAND, 37400, 0);
Print("SendMessageA = " + result); //посылаем сообщене
return;
}

---

quindi se inviate un ordine ma non si apre, potete inviare questo pezzo di codice per risolvere

 

YuraZ писал (а):

Di solito con gli EA multivaluta è il caso che se non c'è garanzia di un ordine al 100% in arrivo,

Probabilmente volevi scrivere TIC... ma hai scritto ordine.

Mi riferivo all'immissione di un ordine al 100%.

 
thecore:

YuraZ ha scritto (a):

Di solito con gli EA multivaluta è il caso che se non c'è garanzia di un ordine al 100% in arrivo,

Probabilmente volevi scrivere TIC... Devi aver voluto dire TIC

Mi riferivo a un ordine del 100%.


Ma capite che questo non è solo in un sistema multivalutario

Non si ottiene una garanzia del 100% in un normale Expert Advisor... mai una garanzia al 100%

perché ci sono fattori

INTERNET

IL TUO FORNITORE

IL TUO FORNITORE DI DC

il tuo hardware

Attrezzatura DC

ecc.

---

è a questo che servono le fermate... o un computer di riserva con un provider diverso (se il problema è dalla vostra parte)

---


ma se si tratta di un errore nella logica del programma!!! allora è un altro discorso e si può curare

---


e la logica non dovrebbe crollare perché l'entrata non era alle 15:00 ma alle 15:05 o alle 15:02

questo è esattamente quello che vediamo con l'autore del thread! sta cercando di entrare alle 15:00:00:00

(i numeri sono arbitrari)


Non sta facendo pips quindi entrare alle 15:00 o 15:01 - 15:07 non dovrebbe essere troppo difficile per lui


Questo è quello che sto cercando di dire - non si può fissare strettamente l'inizio di una barra per tutti i simboli necessari - è sufficiente ottenere l'inizio di una barra in uno qualsiasi di essi

 
YuraZ:
il nucleo:
YuraZ:
il nucleo:

YuraZ ha scritto (a):

francamente e non è esattamente bello ... Se la spunta non è arrivata per queste coppie e ti mancherà ancora

Se il tick non è arrivato, non puoi piazzare un ordine subito, a meno che tu non usi uno script,

E solo se le zecche arrivano alle società di intermediazione e non le trasmettono al tuo terminale (di giorno).

Ecco perché, quando stavo implementando un Expert Advisor multivaluta, stavo facendo una State Machine di Miles (o Moore),

che ha monitorato gli stati aperti dell'ordine per le coppie necessarie. Naturalmente non è stato sempre possibile

Naturalmente, non ero sempre in grado di aprire al prezzo necessario, ma questo approccio garantiva che gli ordini sarebbero stati SEMPRE aperti.

facile! è possibile effettuare un ordine :-) se la spunta non è arrivata

Pensaci bene! Se non lo fai, ti darò un suggerimento!

Di solito con gli EA multivaluta la situazione è tale che se non c'è garanzia al 100% di arrivo dell'ordine

allora la logica del lavoro del consigliere sarà distrutta.

A proposito, non dimenticate che il vostro EA sta lavorando sui tick della coppia su cui è in bilico,

Quindi, anche se ci fosse un tick su un'altra coppia, e non ci fosse un tick sulla coppia con il tuo EA attaccato,

allora la sincronizzazione sarà interrotta.

Non dimenticate le cose spiacevoli come la perdita di connessione con le società di intermediazione e le requote (se avete a che fare con un conto reale).

A proposito, su micro-reali ho spesso situazioni in cui un ordine non viene mai passato finché il terminale non viene ricaricato.

Anche in modalità manuale. Stanno aspettando qualcosa, aspettando...

Ecco perché ho abbandonato da tempo i sistemi basati sugli ordini di coppia.

È troppo fastidioso.

Probabilmente volevi scrivere TIC... ma hai appena scritto ordine.

Se il tuo Expert Advisor si trova su EURUSD, capisci che può entrare da USDCHF.

è sufficiente scrivere

LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK);

... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...

Pezzo di codice che funziona

OpenLevel = MarketInfo( sSymbol, MODE_BID ); if ( TDARELOCK == 0 ) ticket=OrderSend ( sSymbol,OP_SELL,Lots,OpenLevel,3,0,0,0,0,sComment,mMagic,0,Red);

----

il TIC per USDCHF potrebbe non essere sufficiente per ottenere un tick per qualsiasi coppia

Spero che in MQL5 non ci sia bisogno di ricevere tick per far funzionare il programma

promettono di fare eventi, il che significa che qualsiasi pezzo di codice può essere scritto su un evento

----

la seconda domanda riguardante i blocchi nel terminale - questo problema può essere risolto riavviando - questo è più probabile che sia indirizzato agli sviluppatori.

Ho visto anche questo -

anche questo è trattato e c'è un esempio qui sul forum

Ну вот и все - отлично работает процедруа программного реконнекта :)
НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ
4.
//В начале советника подключаем необходимые ДЛЛ-ки и модули
#include <winuser32.mqh>
#import "user32.dll"
int GetParent(int hWnd);
#import

//Копируем процедуру в наш советник или библиотеку и вызываем ее там, где вам нравиться
//Лично я вызываю перед рассчетом данных - но можно перед установкой ордеров. Правда тогда
//возможно нужно будет делать задержку в пару секунд
//У меня все работает
int Reconnect()
{
int result;
int hwnd = WindowHandle(Symbol(), Period()); // получаем хендл окна графика
hwnd = GetParent(hwnd); // получаем хендл родительского окна
hwnd = GetParent(hwnd); // ...
hwnd = GetParent(hwnd); //добираемся до главного окна
result = SendMessageA(hwnd, WM_COMMAND, 37400, 0);
Print("SendMessageA = " + result); //посылаем сообщене
return;
}

---

quindi se inviate un ordine ma non si apre potete ovviamente inviare un pezzo di codice simile per risolvere

Il riavvio del terminale è ottimo, ma cosa si dovrebbe fare con altri Expert Advisors in questo momento che sono appesi in altre finestre

e la loro logica di funzionamento è naturalmente diversa e non reagisce bene a frequenti ricariche perché i valori delle variabili si perdono,

che abbiamo accumulato per tanto tempo.

Anche se l'Expert Advisor è basato su EURUSD, vi rendete conto che può entrare da USDCHF

È sufficiente scrivere

LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK);

... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...

Certo che sì. In un EA multivaluta questo è esattamente il modo in cui le altre coppie sono controllate.

Ma se sulla coppia principale l'ultimo tick dell'ora precedente è arrivato, per esempio, alle 7.50, ed è arrivato il primo tick dell'ora,

alle 8.10, e sul simbolo secondario il primo tick dell'ora è arrivato alle 8.00,

allora è difficile aspettarsi che l'EA in bilico sulla coppia di valute maggiore piazzi un ordine su quella minore

alle 8.00, al massimo alle 8.10.

Il caso in cui l'EA opera come uno script, cioè non dà tregua al sistema, ma si agita e si agita,

Non lo considero nonostante le zecche. È meglio scrivere una sceneggiatura.

 
thecore:
YuraZ:
il nucleo:
YuraZ:
il nucleo:

YuraZ ha scritto (a):

francamente e non è esattamente bello ... Se la spunta non è arrivata per queste coppie e ti mancherà ancora

Se il tick non è arrivato, non puoi piazzare un ordine immediatamente, a meno che tu non usi uno script,

E solo se le zecche arrivano alle società di intermediazione e non le trasmettono al tuo terminale (di giorno).

Ecco perché, quando stavo implementando un Expert Advisor multivaluta, stavo facendo una State Machine di Miles (o Moore),

che ha monitorato gli stati aperti dell'ordine per le coppie necessarie. Naturalmente non è stato sempre possibile

Naturalmente, non ero sempre in grado di aprire al prezzo necessario, ma questo approccio garantiva che gli ordini sarebbero stati SEMPRE aperti.

facile! è possibile effettuare un ordine :-) se la spunta non è arrivata

Pensaci bene! Se non lo fai, ti darò un suggerimento!

Di solito con gli EA multivaluta la situazione è tale che se non c'è garanzia al 100% di arrivo dell'ordine

allora la logica del lavoro del consigliere sarà distrutta.

A proposito, non dimenticare che il tuo EA sta lavorando sui tick della coppia a cui si aggrappa,

Quindi, anche se ci fosse un tick su un'altra coppia, e non ci fosse un tick sulla coppia con il tuo EA attaccato,

allora la sincronizzazione sarà interrotta.

Non dimenticate le cose spiacevoli come la perdita di connessione con le società di intermediazione e le requote (se avete a che fare con un conto reale).

A proposito, su micro-reali ho spesso situazioni in cui un ordine non viene mai passato finché il terminale non viene ricaricato.

Anche in modalità manuale. Stanno aspettando qualcosa, aspettando...

Ecco perché ho abbandonato da tempo i sistemi basati sugli ordini di coppia.

È troppo fastidioso.

Probabilmente volevi scrivere TIC... ma hai appena scritto ordine.

Se il tuo Expert Advisor si trova su EURUSD, capisci che può entrare da USDCHF.

è sufficiente scrivere

LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK);

... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...

Pezzo di codice che funziona

OpenLevel = MarketInfo( sSymbol, MODE_BID ); if ( TDARELOCK == 0 ) ticket=OrderSend ( sSymbol,OP_SELL,Lots,OpenLevel,3,0,0,0,0,sComment,mMagic,0,Red);

----

il TIC per USDCHF potrebbe non essere sufficiente per ottenere un tick per qualsiasi coppia

Spero che in MQL5 non ci sia bisogno di ricevere tick per far funzionare il programma

promettono di fare eventi, il che significa che qualsiasi pezzo di codice può essere scritto su un evento

----

la seconda domanda riguardante i blocchi nel terminale - questo problema può essere risolto riavviando - questo è più probabile che sia indirizzato agli sviluppatori.

Ho visto anche questo -

anche questo è trattato e c'è un esempio qui sul forum

Ну вот и все - отлично работает процедруа программного реконнекта :)
НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ4.
//В начале советника подключаем необходимые ДЛЛ-ки и модули
#include <winuser32.mqh>
#import "user32.dll"
int GetParent(int hWnd);
#import
 
//Копируем процедуру в наш советник или библиотеку и вызываем ее там, где вам нравиться
//Лично я вызываю перед рассчетом данных - но можно перед установкой ордеров. Правда тогда
//возможно нужно будет делать задержку в пару секунд
//У меня все работает
int Reconnect()
{
int result;
int hwnd = WindowHandle(Symbol(), Period()); // получаем хендл окна графика
hwnd = GetParent(hwnd); // получаем хендл родительского окна
hwnd = GetParent(hwnd); // ...
hwnd = GetParent(hwnd); //добираемся до главного окна
result = SendMessageA(hwnd, WM_COMMAND, 37400, 0);
Print("SendMessageA = " + result); //посылаем сообщене
return;
}

---

quindi se inviate un ordine ma non si apre potete ovviamente inviare un pezzo di codice simile per risolvere

Il riavvio del terminale è ottimo, ma cosa si dovrebbe fare con altri Expert Advisors in questo momento che sono appesi in altre finestre

e la loro logica di funzionamento è naturalmente diversa e non reagisce bene a frequenti ricariche perché i valori delle variabili si perdono,

che abbiamo accumulato per tanto tempo.

Anche se l'Expert Advisor è basato su EURUSD, vi rendete conto che può entrare da USDCHF

È sufficiente scrivere

LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK);

... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...

Certo che sì. In un EA multivaluta questo è esattamente il modo in cui le altre coppie sono controllate.

Ma se sulla coppia principale l'ultimo tick dell'ora precedente è arrivato, per esempio, alle 7.50, ed è arrivato il primo tick dell'ora,

alle 8.10, e sul simbolo secondario il primo tick dell'ora è arrivato alle 8.00,

allora è difficile aspettarsi che l'EA in bilico sulla coppia di valute maggiore piazzi un ordine su quella minore

alle 8.00, al massimo alle 8.10.

Il caso in cui l'EA opera come uno script, cioè non dà una pausa al sistema, ma si agita e si agita,

Non lo considero nonostante le zecche. Sarebbe meglio scrivere una sceneggiatura.



1 e pensi che Reconnect chiami la funzione Init () e riavvii l'EA?


Ti sbagli...


Inoltre, è saggio salvare le variabili calcolate e preziose


se non ho un codice complesso li memorizzo in VARIABILI GLOBALI

se il codice è complesso lo scrivo su disco e lo leggo al riavvio - se il riavvio è stato per errore lo ripristino solo

a proposito, è facile determinare se era o non era per errore




---

2 Se c'è un nuovo orario per alcune coppie di valute - nessun tick per altre coppie - allora non importa quando c'è un tick

Un NUOVO BAR - o più precisamente una nuova ora può essere considerata giunta.


e quindi è possibile contare le coppie in ritardo per CLOSE pensando che anche loro siano coperte


i ticchettii arriveranno più tardi e la barra sarà spostata nel tempo!!! ma la vera Ora è passata

---


è giusto piazzare un ordine su una coppia di valute senza un tick - sapete come

Non sto dicendo che sarà esposto alle 8:00 - (figura convenzionale)


può essere impostato non appena un NEW TICK arriva in una nuova barra su qualsiasi coppia di valute


---


>o se l'ultimo tick dell'ora precedente sulla coppia principale è arrivato, per esempio, alle 7.50, e il primo tick dell'ora è arrivato

>alle 8.10, e su una coppia secondaria il primo tick dell'ora è arrivato alle 8.00,

>è difficile aspettarsi che un EA in bilico sulla coppia di valute principale piazzi un ordine su una secondaria

>alle 8.00, o al massimo alle 8.10.


lavorando in modalità multicurrency, non è necessario contare il tempo della coppia principale o non la principale

basta prendere un tick dell'inizio di una nuova barra in qualsiasi coppia di valute - e calcolare gli indicatori per CLOSE, non per la chiusura della barra

e dentro - fuori.


perché l'entrata sarà sul tick di una nuova barra di qualsiasi coppia controllata perché sarà un segnale per una nuova ora! (in questo caso una nuova ora)





 
YuraZ:

se lavorate in multivaluta, non avete bisogno di cronometrare la barra principale o non la barra principale

è necessario prendere un tick di inizio di una nuova barra - e calcolare gli indicatori per CLOSE, e non per la chiusura della barra

e dentro - fuori


perché l'entrata sarà precisamente sul tick di una nuova barra di qualsiasi coppia controllata perché sarà un segnale per una nuova ora! (in questo caso una nuova ora)

Più come questo.......

 
LeoV:
YuraZ:

non devi cronometrare la coppia di valute principale o non la principale

è necessario prendere il tick di una nuova barra per qualsiasi coppia di valute - e calcolare gli indicatori per CLOSE e non per la chiusura della barra

e dentro - fuori


perché l'entrata sarà precisamente sul tick di una nuova barra di qualsiasi coppia controllata perché sarà un segnale per una nuova ora! (in questo caso una nuova ora)

Più come questo.......

Rielaborate l'Expert Advisor con questa logica, e la probabilità del PROBLEMA sarà ridotta di molte volte

se si aggiunge la cattura di una nuova ora su TUTTE le coppie che sono in una finestra di mercato recensione soprattutto su yen allora praticamente non si dovrebbe avere fallimenti


1 Basta non prendere la nuova barra in sincronia su tutte le coppie !!!

2 Cattura NUOVA BARRA su una qualsiasi delle coppie CONTROLLATE, avvia il ricalcolo di tutte le coppie richieste sulla CLOSE corrente ...

(a proposito, potresti aver bisogno di rifare alcuni dei TUOI indicatori)


decidere di entrare - uscire - o continuare a tenere

 
YuraZ:

Rielaborando l'Expert Advisor con questa logica, la probabilità di un problema sarà ridotta a volte

se si aggiunge la cattura di una nuova ora su TUTTE le coppie che sono nella finestra di panoramica del mercato, specialmente sulle coppie yen, praticamente non si dovrebbero avere fallimenti

1 solo non prendere una nuova barra in sincronia su tutte le coppie !!!

2 Cattura una NUOVA BARRA su una qualsiasi delle coppie CONTROLLATE, avvia il ricalcolo di tutte le coppie necessarie sull'attuale CLOSE ...

(a proposito, alcuni dei vostri indicatori potrebbero aver bisogno di essere ricalcolati)

e prendere una decisione per entrare - uscire - o continuare a tenere

Grazie veri Macha)))))))))))))