Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1011

 
Sergey Likho:

Qual è il modo migliore per scrivere l'algoritmo?


Compito:

Un Expert Advisor funziona su diversi grafici.

Ho bisogno di avere un file separato con informazioni minuto per minuto su conto, saldo, capitale, ecc.

Ora si scopre che tutti gli Expert Advisors scrivono tutte le informazioni in un file. Di conseguenza, abbiamo un sacco di voci inutili.

Qual è la possibile soluzione originale, in modo che solo un bot faccia dei record nel file (e, se fosse cancellato, l'altro bot inizierebbe a fare record, ecc.)

Creare un oggetto grafico in OnInit() con il nome dell'EA, o qualsiasi altro oggetto. Forse, l'EA sta già creando un oggetto, si può usare, per esempio "MyEA":ObjectCreate(0,"MyEA",OBJ_...,...))

In OnTick() dove si scrive nel file dobbiamo controllare il primo ID del grafico con questa stessa etichetta = significa che questo è il primo Expert Advisor installato nel terminale, non ci interessa il resto.

Dobbiamo usare l'overshoot:

string ChartGetSymb()
  {
   string symb="";
   long chartID=ChartFirst();
   while(chartID!=-1) 
    {
      if(ObjectGetString(chartID,"MyEA",OBJPROP_NAME)=="MyEA")
       {
        symb=ChartSymbol(chartID);
        break;
       }
      chartID=ChartNext(chartID);
     }
   return(symb);
  }

Otteniamo il primo grafico/simbolo con un Expert Advisor installato su di esso

Poi lo confrontiamo con il primo Expert Advisor prima di scriverlo in un file:

if(ChartGetSymb() == Symbol()) {
  записываем в файл, если соответствует символу, иначе не записываем
}


Non è un costrutto facile, ma è meglio che scrivere in una variabile globale

 
Artyom Trishkin:

Prendete lo standard MA, cambiate il tipo di dati del buffer, compilate e controllate nella finestra dei dati del terminale (Ctrl+D)

Questo non aiuterebbe, perché non verrebbe visualizzato nel terminale. Ma l'ho controllato nell'indicatore ZigZag, che ha due buffer aggiuntivi per High e Low, dichiarati come INDICATOR_CALCULATIONS. Sono anche presi dal programma, anche se non vengono visualizzati nel terminale. Grazie per il suggerimento comunque.
 
Sergey Likho:

ChartID() viene scritto nelle variabili globali del terminale con un errore. cos'è questa assurdità?


Prova questo codice:


Il risultato dell'esecuzione di questo codice

2019.11.29 15:22:07.453 Script 00 EURUSD,H1: removed
2019.11.29 15:22:07.453 00 EURUSD,H1: uninit reason 0
2019.11.29 15:22:07.453 00 EURUSD,H1: GVAR id:131992895281608496 GV_id:131992895281608496
2019.11.29 15:22:07.453 00 EURUSD,H1: initialized
2019.11.29 15:22:07.433 Script Test\00 EURUSD,H1: loaded successfully
 
Vitaly Muzichenko:

Creare un oggetto grafico in OnInit() con il nome dell'EA o qualsiasi altro oggetto, forse l'EA crea già un oggetto, allora si può usare, assumiamo "MyEA": ObjectCreate(0,"MyEA",OBJ_...,...))

In OnTick() dove si scrive nel file dobbiamo controllare il primo ID del grafico con questa stessa etichetta = significa che questo è il primo Expert Advisor installato nel terminale, non ci interessa il resto.

Dobbiamo usare l'overshoot:


Otteniamo il primo grafico/simbolo con un Expert Advisor installato su di esso

Poi lo confrontiamo con il primo Expert Advisor prima di scriverlo in un file:


Non è una costruzione facile, ma è meglio che scrivere nella variabile globale

Sì, buona idea.

Grazie.


Domanda: cosa succede se EA è stato cancellato (ad esempio a causa di un errore), ma l'oggetto è rimasto. Cosa fare se il grafico viene chiuso completamente, dobbiamo in qualche modo riassegnare l'EA "principale"?

 
Sergey Likho:

Sì, è una buona idea.

Grazie.


La domanda è: cosa succede se l'EA è stato cancellato (ad esempio a causa di un errore), ma l'oggetto è rimasto. Cosa fare se il grafico viene chiuso nella sua interezza, dobbiamo in qualche modo riassegnare l'Expert Advisor "principale"?

C'è solo un caso di errore - se l'Expert Advisor è stato accidentalmente cancellato e l'oggetto è rimasto, ma nella mia memoria non ricordo un tale errore in MT4. In tutti gli altri casi il Consulente Capo Esperto sarà riassegnato.


P.S. Prova a controllare che OnDeInit() venga emesso su errore in Expert Advisor e che si autocancelli dal grafico. Probabilmente, si può controllare facilmente creando una variabile e contando i tick e dividendola per 10/0 all'11° tick.

In OnDeInit() impostate Print e vedete la causa della deinizializzazione, e se si verifica, allora per questa causa/numero eliminate l'oggetto "MyEA" dal grafico

t++;
if(t > 10) {
 int e = 10;
 e /= 0;
}

Puoi scrivere il risultato, perché non ho tempo di controllarlo io stesso

 
Vitaly Muzichenko:

Creare un oggetto grafico in OnInit() con il nome dell'EA o qualsiasi altro oggetto, forse l'EA crea già un oggetto, allora si può usare, assumiamo "MyEA": ObjectCreate(0,"MyEA",OBJ_...,...))

In OnTick() dove si scrive nel file dobbiamo controllare il primo ID del grafico con questa stessa etichetta = significa che questo è il primo Expert Advisor installato nel terminale, non ci interessa il resto.

Dobbiamo usare l'overshoot:


Otteniamo il primo grafico/simbolo con un Expert Advisor installato su di esso

Poi lo confrontiamo con il primo Expert Advisor prima di scriverlo in un file:


Non è un costrutto facile, ma è meglio che scrivere in una variabile globale

Penso che vi sbagliate. I GV non vengono scritti su disco ogni volta. Altrimenti non ci sarebbe bisogno di forzare GV su disco.

void  GlobalVariablesFlush();
E come se non bastasse, passando attraverso tutte le classifiche alla ricerca di EA e dell'oggetto... Vitaly, è un peccato...
 
Alexey Viktorov:

Penso che vi sbagliate. I GV non vengono scritti su disco ogni volta. Altrimenti non avremmo bisogno della funzione di scrittura forzata di GV su disco.

Sì, più passare attraverso tutti i grafici alla ricerca di EA e oggetto... Vitaly, è un peccato...

Sì, sono:GlobalVariableSet("GV",ID);

profili -> gvariables.dat


 
Vitaly Muzichenko:

In alternativa sono scritti come:GlobalVariableSet("GV",ID);

profili -> gvariables.dat


Quando lo create, forse, ma quando lo sovrascrivete prima di disabilitare l'applicazione che vi scrive, dovete controllare. Sono troppo pigro. Ancora, puramente teorico, se dovesse essere scritto sul disco ogni volta, la funzione di cui sopra sarebbe un sonaglio.

 
Sergey Likho:

Non si può fare.

Cercate un programma per Windows che sincronizzi i dati nelle cartelle. E impostatelo in modo che l'Expert Advisor venga copiato automaticamente su un nuovo terminale.

Da quanto ho capito, ci sono programmi del genere, ma funzionano solo con i file, ma se si tratta di un documento di testo, non copia il contenuto e non sostituisce i file, forse non ho trovato un programma normale. È un peccato che gli sviluppatori non abbiano considerato l'opzione di specificare il percorso da dove scaricare Expert Advisor o il file del robot, pensavo di poter specificare il percorso come si fa di solito, ma come hai fatto notare sopra è impossibile.

 
Seric29:

Da quanto ho capito ci sono programmi del genere, ma funzionano solo con i file, ma se si tratta di un documento di testo, non copia il contenuto e non sostituisce i file, forse non ho trovato un programma normale. Penso che sia brutto che gli sviluppatori non abbiano preso in considerazione la possibilità di impostare il percorso da dove ottenere il file del robot o dell'esperto. Pensavo che sarebbe stato possibile impostare il percorso come si fa di solito, ma come hai già detto tu non è possibile.

Notate in questo post le parole "Tutti i terminali hanno cartelle condivise".

Questo non è possibile. Forum sul trading, sistemi di trading automatico e test di strategie di trading

Cosa devo fare se voglio usare un prodotto del Marketplace?

Sergey Tabolin, 2019.11.23 08:17

Pensate seriamente che non sappia come e dove installare? )))

Tutti i terminali hanno cartelle comuni

Ho scaricato un indicatore gratuito dal mercato. Si lega all'hardware.

Perché funziona su un hardware, ma non sull'altro?

Conclusione ovvia - si lega, almeno non solo all'hardware...


Cercate informazioni su come questo viene fatto e via... Questo si chiama collegamento di cartelle.