Discussione sull’articolo "L'Uso di ORDER_MAGIC per il Trading con Diversi Expert Advisor su un Singolo Strumento" - pagina 2

 
ias:


2.Che cosa rappresenta l'espressione (int) e che valore assume in int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;


Leggete la conversione esplicita dei tipi.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
ias:

1.Grazie all'autore per l'articolo.
2..Cosa significa l'espressione (int) e quale valore assume in int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;
3.Perché, durante il test, l'espressione (int) e SYMBOL_VOLUME_STEP assumono i valori Unknown identifier e come influisce sul risultato int DIGITS?
4. Come funziona il codice di interazione?
Il codice di interazione ha importanza quando gli EA lavorano sullo stesso strumento, dove è sufficiente impostare nomi numerici identici o diversi degli EA.

L'espressione (int) è una conversione della seguente espressione nel tipo int.

L'espressione SYMBOL_VOLUME_STEP è uno dei valori dell'enumerazione ENUM_SYMBOL_INFO_INTEGER.

Nessuna delle espressioni di cui sopra è una variabile, quindi naturalmente hanno il valore "Identificatore sconosciuto" in Debugger,

che significa letteralmente "impossibile da riconoscere": Debugger non riesce a capire a quale tipo appartenga la variabile dichiarata per il tracciamento.


Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Типы char, short, int и long - Документация по MQL5
 
ias:


4. Come funziona il codice di interazione?
Il codice di interazione ha importanza quando gli EA lavorano sullo stesso strumento, dove è sufficiente impostare nomi numerici identici o diversi degli EA.

Scusate, mi sono distratto e non ho risposto alla quarta domanda.

Il codice di interazione viene utilizzato come un'unica magia per diversi Expert Advisor affidabili.

Ad esempio, avete un EA assolutamente funzionante in cui non volete cambiare nulla, ma avete creato un EA di trailing e volete testare come funzionerà con questo EA. Avviate l'EA originale e l'EA di trailing e date lo stesso codice di interazione a entrambi gli EA e questi percepiranno le azioni dell'altro come proprie, mentre le modifiche apportate da EA terzi senza tale codice di interazione saranno ignorate (saranno invisibili per la coppia di EA selezionata).

Allo stesso tempo, è possibile elaborare alcuni dati separatamente perché il codice di identificazione dell'EA (nome digitale) è diverso,

tutto dipende dalla richiesta che si intende formulare (ad esempio, si può formare un rapporto solo sul lavoro della rete a strascico).

Una stessa transazione, a seconda della richiesta, può essere definita come propria o altrui.

[Eliminato]  
ias:

1.Grazie all'autore per l'articolo.
2..Cosa significa l'espressione (int) e quale valore assume in int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;
3.Perché, durante il test, l'espressione (int) e SYMBOL_VOLUME_STEP assumono i valori Unknown identifier e come influisce sul risultato int DIGITS?
4. Come funziona il codice di interazione?
Il codice di interazione ha importanza quando gli EA lavorano sullo stesso strumento, dove è sufficiente impostare nomi numerici identici o diversi degli EA.

Poiché mi sembra di capire che non avete ben compreso il significato del codice, vediamo di capire cosa succede in dettaglio.

int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;

1. Otteniamo la dimensione del volume del lotto per lo strumento, SYMBOL_VOLUME_STEP - Volume minimo per effettuare un'operazione (di solito è 0,01);

2. Ottenere il logaritmo del numero in base 10 => -log10(0,01) = 2 o -log10(0,10) = 1 (per MQ è -log10(0,10) = 1);

3. equiparare il risultato (-2/-1) alla variabile DIGITS, che è di tipo int.

4. Se il valore di DIGITS<0, assegnategli il valore = 0.

PS

(int) si usa per forzare il risultato di un calcolo al tipo int...

 

Questo articolo non riflette l'evento "Stop Loss/Stake Profit avvenuto". E questa è un'omissione molto grave!

Esempio: un Expert Advisor ha due parti: la prima funziona quando la "posizione virtuale" su un determinato simbolo e timeframe è uguale a 0, e la seconda funziona quando questa "posizione virtuale" non è uguale a zero; bene, diciamo che l'Expert Advisor chiude questa posizione. Consideriamo una situazione: su un certo segnale abbiamo effettuato un acquisto, la "posizione virtuale" ha assunto il valore +100. È stato attivato uno stop loss, la vera "posizione virtuale" ha assunto il valore 0. Ma nel nostro caso sarà pari a +100. L'Expert Advisor "penserà" che la posizione sia +100, ma in realtà è 0, il che porterà a un risultato indesiderato.

Vi prego di spiegarmi questo punto.

 
beast:

Questo articolo non riflette l'evento "Stop Loss/Stake Profit avvenuto". E questa è un'omissione molto grave!

Esempio: un Expert Advisor ha due parti: la prima funziona quando la "posizione virtuale" su un determinato simbolo e timeframe è uguale a 0, e la seconda funziona quando questa "posizione virtuale" non è uguale a zero; bene, diciamo che l'Expert Advisor chiude questa posizione. Consideriamo una situazione: su un certo segnale abbiamo effettuato un acquisto, la "posizione virtuale" ha assunto il valore +100. È stato attivato uno stop-loss, la "posizione virtuale" reale ha assunto il valore 0. Ma nel nostro caso sarà uguale a 0. Ma nel nostro caso sarà pari a +100. L'Expert Advisor "penserà" che la posizione sia +100, ma in realtà è 0, il che porterà a un risultato indesiderato.

Vi prego di spiegarmi questo punto.

Esatto, questo articolo non contiene un modulo per l'elaborazione degli ordini di stop.

Descrive le possibilità di utilizzo del numero magico.

Per utilizzare una posizione virtuale, saranno necessari degli stop virtuali.

 

Allora perché abbiamo bisogno della magia?

Perché se la usiamo per scavare nella cronologia, non avremo un quadro completo degli ordini piazzati da questo Expert Advisor, perché non saremo in grado di identificare gli stop loss e i take profit.

 
beast:

Allora perché abbiamo bisogno della magia?

Perché se la usiamo per scavare nella cronologia, non avremo un quadro completo degli ordini piazzati da questo Expert Advisor, perché non saremo in grado di identificare gli stop loss e i take profit.


È necessario capire che è un errore utilizzare gli stop come parte di una strategia di trading. Gli ordini di stop memorizzati sul server sono ordini di protezione da situazioni in cui qualcosa è andato storto (interruzione della comunicazione con il server, panico nel mercato), in altri casi gli ordini di stop virtuali sotto forma di segnali EA sono abbastanza adatti.

Ma la pratica dimostra che i programmatori sono spesso pigri nel virtualizzare gli stop. Dopo tutto, è molto più semplice utilizzare ordini di stop già pronti.

 

Al momento del calcolo è necessario esaminare tutte le operazioni, se un'operazione con un determinato mago - si prende in considerazione il suo volume, tutte le altre operazioni vengono controllate per verificare se sono state chiuse da stoploss/stakeprofit, se ce ne sono, allora è necessario reimpostare l'importo calcolato. Nel mio articolo non si tiene conto nemmeno dello stoploss. Chi l'avrebbe mai detto... Questo è un nuovo argomento, dovete scusarmi.

Con questa magia c'è un'altra cosa, l'EA ha aperto una posizione, si scollega l'EA e si chiudono le posizioni manualmente - tutto qui, dopo di che ci sarà una contabilità errata.

E qual è la situazione: supponiamo che un EA abbia aperto un acquisto di 0,1, il secondo EA abbia aperto una vendita di 0,1, la posizione cumulativa è uguale a 0, e si considera che ci siano due posizioni contrarie.

Oltre a tutto questo, abbiamo bisogno di alcuni mezzi di controllo, di uno script che calcoli se i volumi calcolati per tutte le mages sono coerenti con il volume reale, abbiamo bisogno di mezzi di livellamento - per aprire con una mage e chiudere con un'altra.

Questo solleva una grande domanda se l'uso della magia sarà richiesto e, in caso affermativo, come conviverci....

Dovremmo aprire un conto separato per ogni consigliere?

 

Per favore, correggimi se sbaglio...

Devo provare qualcosa di simile al tuo codice qui per discriminare le operazioni e le posizioni di diversi EA. Ho diversi dubbi. Questo codice è ottimizzato? Penso che questo codice potrebbe rallentare il computer se si ha una lunga cronologia di operazioni e diversi EA che eseguono questo codice - anche se non l'ho ancora provato, questo è solo quello che penso.

Per esempio, nel file magic_exp1_en.mq5, il metodo prHistory_Deals(ulong &buf[],int HTD) riempie il buffer buf[] con tutte le operazioni effettuate.

Non sarebbe meglio per le prestazioni se memorizzassimo solo l'ultimo DEAL IN non ancora riempito da un DEAL OUT?

Forse non ho capito bene cosa fa il codice. Quello che penso faccia il codice in magic_exp1_en.mq5 è: per l'intera storia delle transazioni dall'inizio dei tempi :-) controlla se la somma dei volumi di tutti i DEAL_TYPE_SELL e DEAL_TYPE_BUY è uguale, nel qual caso non abbiamo una posizione aperta. Se il volume dei SELL è superiore a quello dei BUY, allora abbiamo una posizione SELL generale e una posizione BUY se il volume dei BUY è superiore a quello dei SELL.

Non c'è un altro modo?