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

 

Il nuovo articolo L'Uso di ORDER_MAGIC per il Trading con Diversi Expert Advisor su un Singolo Strumento è stato pubblicato:

Questo articolo considera le questioni della codifica delle informazioni, utilizzando l'identificazione magica, nonché la divisione, l'assemblaggio e la sincronizzazione del trading automatico di diversi Expert Advisor. Questo articolo sarà interessante per i principianti, così come per i trader più esperti, perché affronta la questione delle posizioni virtuali, che possono essere utili nell'implementazione di complessi sistemi di sincronizzazione di Expert Advisor e varie strategie.

Eseguilo e assicurati che l’Expert Advisor non differisca in termini di redditività, ma scambi esattamente secondo la logica specificata, che è esattamente ciò di cui abbiamo bisogno da esso.

Ora proveremo a eseguire questo EA, ma su diversi time frame di uno strumento (per gli esperimenti abbiamo scelto uno strumento casuale, che è EURUSD: o).

Figura2. Il conflitto di due Expert Advisor sullo stesso strumento su timeframe diversi

Figura 2. Il conflitto di due Expert Advisor sullo stesso strumento su timeframe diversi

Poiché entrambi gli Expert Advisor sono in esecuzione su un singolo strumento e il codice non specifica la condivisione delle posizioni, entrambi gli Expert Advisor stanno cercando di correggere la posizione di trading, a seconda delle letture dei loro indicatori, e come conseguenza di ciò, - sorge un conflitto. L'Expert Advisor che è in esecuzione su M1 sta cercando di trasformare la posizione nella cella, mentre il suo rivale cerca di fermarlo. E' ovvio che abbiamo bisogno di un calcolo separato delle posizioni, che è ciò che faremo ora.

Autore: Nikolay Demko

[Eliminato]  

Non so chi o come, io preferisco specificare esplicitamente i numeri ID quando creo le mie enumerazioni (anche se non è necessario).

Ad esempio in questo modo:

enum Emagic
{
ENUM_DIGITAL_NAME      = 0, // nome numerico del consulente
ENUM_CODE_INTERACTION  = 1, // codice di interazione
ENUM_EXPERT_SYMBOL     = 2  // il simbolo su cui viene lanciato l'EA
};

Questo può anche essere utile quando si migra da MQL4, ad esempio, questa è l'enumerazione che uso per lavorare con gli ordini.

//ENUM_MT4_ORDER_TYPE
enum ENUM_MT4_ORDER_TYPE
//Tipi di operazioni di trading
{
OP_BUY  = 0, //Acquisto 
OP_SELL = 1, //Vendita 
OP_BUYLIMIT  = 2, // Ordine BUY LIMIT in attesa 
OP_SELLLIMIT = 3, /Ordine in sospeso LIMITE DI VENDITA 
OP_BUYSTOP   = 4, /Ordine BUY STOP in attesa 
OP_SELLSTOP  = 5  /Ordine SELL STOP in attesa 
};

Questo approccio è conveniente, perché indipendentemente dalla posizione dell'identificatore nell'enumerazione, il suo Codice (valore numerico) non cambierà)....

Inoltre, questo approccio è conveniente se l'enumerazione deve contenere identificatori con un valore negativo


PS

Articolo molto interessante, grazie all'autore...

 
Interesting:

Non so chi o come, io preferisco specificare esplicitamente i numeri ID quando creo le mie enumerazioni (anche se non è necessario).

Ad esempio in questo modo:

Questo può anche essere utile quando si migra da MQL4, ad esempio, questa è l'enumerazione che uso per lavorare con gli ordini.

Questo approccio è conveniente, perché indipendentemente dalla posizione dell'identificatore nell'enumerazione, il suo Codice (valore numerico) non cambierà)....

Inoltre, questo approccio è conveniente se l'enumerazione deve contenere identificatori con un valore negativo


PS

Articolo molto interessante, grazie all'autore...


Per me non è fondamentale, perché quando si dichiara un'enumerazione i valori vengono assegnati automaticamente in ordine,

anche se sono d'accordo sul fatto che la tua variante è più chiara (soprattutto se le enumerazioni sono lunghe, diciamo più di 3-4).

 

Con un tale approccio al mago è necessario scrivere le stesse istruzioni per l'utente - in modo che l'utente possa sapere chiaramente quali maghi saranno occupati e quali sono liberi. Gli utenti di Expert Advisor non utilizzano Expert Advisor di un solo sviluppatore, ed è improbabile che il metodo sia incluso negli standard utilizzati da tutti gli autori di Expert Advisor. Se gli sviluppatori del terminale avessero diviso questo ulong in più variabili, in modo da avere più mage, ad esempio quattro a due byte.

request.magic
request.id1
request.id2
request.id3

O almeno completare il terminale con una libreria, in modo da poterlo includere in qualche modo negli standard.

SetMagic(Magic,Id1,Id2,Id3) 
[Eliminato]  
Integer:

Con un tale approccio al mago è necessario scrivere le stesse istruzioni per l'utente - in modo che l'utente possa sapere chiaramente quali maghi saranno occupati e quali sono liberi. Gli utenti di Expert Advisor non utilizzano Expert Advisor di un solo sviluppatore, ed è improbabile che il metodo sia incluso negli standard utilizzati da tutti gli autori di Expert Advisor. Se gli sviluppatori del terminale avessero diviso questo ulong in più variabili, in modo da avere più mage, ad esempio quattro a due byte.

O almeno completare il terminale con una libreria, in modo da poterlo includere in qualche modo negli standard.

Non è affatto detto che per l'utente sia necessario scrivere le istruzioni per lavorare con MAGIK, anche se così non si andrà oltre la descrizione di come è formato MAGIK....

Credo che al momento questo sia uno dei migliori articoli sull'automazione del commercio. Dirò di più - io stesso sono un sostenitore della codifica di MAGIC a un livello più serio di 777777 o 555555, anche se forse preferirei inserire informazioni più dettagliate rispetto a quelle fornite dall'autore.

Ma non mi sono reso conto di usare le strutture (dato che l'idea di codificare è presente fin da MQL4), anche se probabilmente ero sul punto di farlo....

Non credo inoltre che sia necessario "scrivere" in MAGIC informazioni sui simboli su cui vengono effettuate le operazioni di trading (questo perché tali informazioni sono già memorizzate altrove e dal momento dell'ordine e fino alla chiusura completa della posizione non cambiano). Inoltre penso che sarà sufficiente assegnare le ultime tre cifre del MAGICO (se non usare il codice di sicurezza) al MARKER (O MARKER, non dirò esattamente com'è nell'ingegneria genetica) dell'ESPERTO.

Questo perché nella PRIMA di queste cifre si possono codificare 9-10 classi base di esperti, e nelle restanti due il suo numero unico dal punto di vista dell'utente o dello sviluppatore. Di conseguenza, si ottengono normalmente dalle 900 alle 1000 combinazioni.

Preferisco anche un algoritmo in cui l'Expert Advisor riconosca almeno gli ordini impostati dal trader e li codifichi di conseguenza.

PS

Non credo sia necessario temere che diversi EA confondano la MAGICA codifica, almeno credo che con un certo approccio non sia così pericoloso (e probabilmente probabile) come sembra a prima vista. In particolare, diventa irrilevante se tutti questi esperti (anche se di autori diversi) supportano questa metodologia di codifica del MAGIC e tengono conto delle azioni degli altri. Idealmente, solo un esperto dovrebbe operare su questa o quella coppia.....

 

L'articolo fornisce un esempio di utilizzo di codici, e non tutte le cifre sono utilizzate e la codifica è ovviamente in eccesso,

Se necessario, anche questi 9 bit occupati possono essere compressi.

Oltre all'identificazione del mago (quei suoi 9 bit rimanenti) può anche essere trasferito lo stato del saldo al momento di effettuare un ordine.

Poiché è improbabile che il saldo occupi più di 6 bit, c'è ancora spazio per qualsiasi codifica.

 
Urain:

L'articolo fornisce un esempio di utilizzo di codici, e non tutte le cifre sono utilizzate e la codifica è ovviamente in eccesso,

Se necessario, anche questi 9 bit occupati possono essere compressi.

Oltre all'identificazione del mago (quei suoi 9 bit rimanenti) può anche essere trasferito lo stato del saldo al momento di effettuare un ordine.

Poiché è improbabile che il saldo occupi più di 6 bit, c'è ancora spazio per qualsiasi codifica.

A tutto questo dovreste aggiungere 1000 o 10000 e sottrarli prima della decodifica, in modo da garantire un intervallo di magie non occupato dal vostro metodo.

 
Integer:

A tutto questo vanno aggiunti 1000 o 10000, e prima della decodifica da sottrarre, in modo che ci sia un intervallo garantito di non occupato dal vostro metodo di magie.

Bene, come fare questo indolore descritto nell'articolo (solo bisogno di un po 'di lavoro per espandere la gamma di crittografia),

Non vedo alcun problema.

PS l'unico punto sottile non dovrebbe dimenticare di tradurre il saldo in numeri interi altrimenti la virgola darà glitch, come farlo dovrebbe essere visto sul legame se il conto centesimo poi moltiplicare per 100 se tale precisione non è necessario poi la traduzione in int con rifilatura.

 
Urain:

Beh, il modo per farlo in modo indolore è descritto nell'articolo (occorre solo una piccola modifica per espandere la gamma di crittografia),

Non vedo alcun problema.

PS l'unico punto debole non dovrebbe dimenticare di tradurre il saldo in numeri interi altrimenti la virgola darà problemi, come farlo dovrebbe guardare il legame se il conto è centesimo poi moltiplicare per 100 se tale precisione non è necessaria allora la traduzione in int con ritaglio.

Se non ci sono problemi, date un'istruzione breve e chiara su come garantire la non intersezione di magie codificate dal vostro sistema e non codificate.

 
Integer:

Se non è un problema, date un'istruzione breve e chiara su come garantire la non intersezione di magie codificate dal vostro sistema e non codificate.

Affinché la mia risposta non sembri una scusa, dirò subito che questa domanda non è stata presa in considerazione, ma è consentita.

Ecco il valore massimo di ulong 18 446 744 073 709 551 615 che 17*10^18 ha tutti i campi liberi. Стоит добавить при кодировании 17 000 000 000 000 000 и поставить при декодировании проверку содержит ли 20 и 19 разряд числа 1 и 7 вы гарантированнопределите кодированный ли магик или нет.

//+------------------------------------------------------------------+
//| La funzione restituisce un magik prefabbricato assemblato a partire dai dati di input ||
//+------------------------------------------------------------------+
ulong Cmagic::SetMagic_request(int digital_name=0,int code_interaction=0)
  {
   if(digital_name>=1000)Print("Il nome numerico del consulente non è impostato correttamente (maggiore di 1000)".);
   if(code_interaction>=1000)Print("Codice di identificazione alieno-alieno errato (superiore a 1000)".);
   mag.digital_name     =digital_name;
   mag.code_interaction =code_interaction;
   mag.expert_symbol    =symbolexpert();
   mag.magicnumber      =17000000000000000000+// вот эта вставка даст 20 разрядов магику
                         mag.digital_name*(int)pow(1000,2)+
                         mag.code_interaction*(int)pow(1000,1)+
                         mag.expert_symbol;
   return(mag.magicnumber);
  }

e nel decodificatore.

//+------------------------------------------------------------------+
//| La funzione divide il magik in tre parti di tre cifre ||
//|| e restituisce la parte indicata dalla categoria |
//+------------------------------------------------------------------+
int Cmagic::decodeMagic_result(int category)
  {
   string string_value=(string)mag.magicnumber;
   int rem=(int)MathMod(StringLen(string_value),3);
   if(rem!=0)
     {
      rem=3-rem;
      string srem="0";
      if(rem==2)srem="00";
      string_value=srem+string_value;
     }
   int start_pos=StringLen(string_value)-3*category;
   string value=StringSubstr(string_value,start_pos,3);
   if(StringLen(string_value)!=20)return((int)StringToInteger("0"));//если магика не 20 разрядов значит не кодированный
   return((int)StringToInteger(value));
  }

è così, e non dimenticare Dimitri che chi vuole fare cerca un'opportunità e chi non vuole fare cerca un motivo, ho aperto una finestra in tuo potere per farne una finestra o addirittura una porta.

A proposito, io uso questo

(int)pow(1000,2)

per cifre, ma nessuno vieta di riscriverlo tramite stringa, solo che nell'articolo ho voluto mostrare entrambi i metodi e, se possibile, adattarli organicamente (quindi la codifica avviene tramite int e la decodifica tramite stringa).

E in generale volevo mostrare le possibilità e non dare un convertitore a scatola nera (è meglio dare a un uomo una pala che un secchio di porridge).

PS qui ha detto una cosa codificata un altro, (ho un temporale in modo che la rete è regolarmente messo fuori uso) codificato controllo non 1 e 7 in 20 e 19 cifre e la presenza di queste cifre proprio quelli se il magik 20-digit mezzi utilizzati codifica, ma si capisce il controllo può essere riprodotto.

 

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.