Errori, bug, domande - pagina 1868

 

costruire 1589

Come fare in modo che OnTimer in un indicatore smetta di funzionare quando il conto/broker cambia, se non ha un tale ticker, o non è aggiunto alla panoramica del mercato, senza usare IndicatorDelete?

Errore nella documentazione - non c'è una funzione IndicatorDelete, c'è ChartIndicatorDelete!

https://www.mql5.com/ru/docs/standardlibrary/cchart/cchartindicatordelete

bool  IndicatorDelete(
   int            sub_win      // номер подокна
   const string   name         // короткое имя индикатора
   );

La situazione è la seguente: eseguo l'indicatore allegato sui futures. Passo ad un altro broker, ma il timer continua a ticchettare, anche se il grafico diventa nero e non si aggiorna.

non scrive il motivo della deinizializzazione

CONTO REASON_ACCOUNT

6

Un altro conto è stato attivato o la riconnessione al server commerciale a causa di un cambiamento nelle impostazioni del conto


2017.04.21 12:10:31.810 TF through OnTimer (DDM7,M1)    Работаем
2017.04.21 12:10:31.810 TF through OnTimer (DDM7,M1)    Аккаунт = AMPGlobalClearing-Demo-CQG
тут сменили брокера,причины деинициализации нет
2017.04.21 12:10:36.809 TF through OnTimer (DDM7,M1)    Работаем
2017.04.21 12:10:36.809 TF through OnTimer (DDM7,M1)    Аккаунт = FXOpen-MT5
//+------------------------------------------------------------------+
//|                                           TF through OnTimer.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
string server;
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   EventKillTimer();
   Print("Причина деинициализации = ",reason);
   
  }
//+------------------------------------------------------------------+
int OnInit()
  {
  server=AccountInfoString(ACCOUNT_SERVER);
   EventSetMillisecondTimer(5000);
   IndicatorSetString(INDICATOR_SHORTNAME,"name");
   
//--- indicator buffers mapping
//---
   return(INIT_SUCCEEDED);
  }  
  
  ////////////
  void OnTimer ()
  {
  Print("Работаем");
  Print("Аккаунт = ",AccountInfoString(ACCOUNT_SERVER));
//  if ( server!=AccountInfoString(ACCOUNT_SERVER) ) ChartIndicatorDelete(0,0,"name");
  }
Документация по MQL5: Стандартная библиотека / Ценовые графики / IndicatorDelete
Документация по MQL5: Стандартная библиотека / Ценовые графики / IndicatorDelete
  • www.mql5.com
Стандартная библиотека / Ценовые графики / IndicatorDelete - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
kaus_bonus:

costruire 1589

OnDeinit non viene chiamato.
 
Cosa intendi per
fxsaber:
OnDeinit non viene chiamato.

Non si chiama affatto o in questo codice?

 
kaus_bonus:

costruire 1589

Come fare in modo che OnTimer in un indicatore smetta di funzionare quando il conto/broker cambia, se non ha un tale ticker, o non è aggiunto alla panoramica del mercato, senza usare IndicatorDelete?

Errore nella documentazione - non c'è una funzione IndicatorDelete, c'è ChartIndicatorDelete!

https://www.mql5.com/ru/docs/standardlibrary/cchart/cchartindicatordelete

La situazione è la seguente: eseguo l'indicatore allegato sui futures. Passo ad un altro broker, ma il timer continua a ticchettare, anche se il grafico diventa nero e non si aggiorna.

non scrive il motivo della deinizializzazione

CONTO REASON_ACCOUNT

6

Un altro conto è attivato o la riconnessione a un server commerciale è stata causata da un cambiamento nelle impostazioni del conto



Carico e scarico degli indicatori

Gli indicatori vengono caricati nei seguenti casi

  • attaccare un indicatore a un grafico
  • inizio del terminale (se un indicatore è stato collegato a un grafico prima che il terminale fosse chiuso in precedenza)
  • caricamento di un modello (se un indicatore è collegato a un grafico)
  • Cambio di profilo (se l'indicatore è collegato a uno dei grafici di profilo);
  • cambiamento del simbolo e/o del periodo del grafico al quale l'indicatore è collegato;
  • dopo l'avvenuta ricompilazione di un indicatore, se questo indicatore è stato collegato a un grafico.
  • cambiamento deiparametri di input dell'indicatore.

Gli indicatori vengono scaricati nei seguenti casi

  • quando l'indicatore è staccato dal grafico;
  • chiusura del terminale (se un indicatore è stato collegato a un grafico)
  • caricamento di un modello se un indicatore è collegato a un grafico;
  • chiudere il grafico a cui è stato collegato l'indicatore
  • cambio di profilo, se l'indicatore è collegato a uno dei grafici del profilo da cambiare;
  • cambiamento del simbolo e/o del periodo del grafico al quale l'indicatore è collegato;
  • cambiamento dei parametri di input dell'indicatore.


La ragione per cui "cambio di conto" non esiste, significa che l'indicatore non viene scaricato al cambio di conto e di conseguenza OnDeinit() per l'indicatore, quando si cambia il conto di trading non lo sarà nemmeno.

 
kaus_bonus:

Non si chiama affatto o in questo codice?

Nella tua situazione.
 
Vladimir Karputov:

Indicatori di carico e scarico


Gli indicatori vengono scaricati nei seguenti casi

  • quando l'indicatore è staccato dal grafico;
  • chiusura del terminale (se un indicatore è collegato a un grafico)
  • caricamento di un modello, se un indicatore è collegato al grafico
  • chiudere il grafico a cui è stato collegato l'indicatore
  • cambio di profilo, se l'indicatore è collegato a uno dei grafici del profilo da cambiare;
  • cambiamento del simbolo e/o del periodo del grafico al quale l'indicatore è collegato;
  • cambiamento dei parametri di input dell'indicatore.


La ragione per cui "switch account" non esiste, significa che l'indicatore non viene scaricato al cambio di account e di conseguenza non ci sarà nessuna OnDeinit() per l'indicatore quando si cambia il conto di trading.

Infatti, la ragione che ho menzionato funziona solo per gli Expert Advisor.

Коды причины деинициализации эксперта ....

Allora rimane la domanda: come fare in modo che il timer smetta di funzionare senza rimuovere radicalmente l'indicatore dal grafico?

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
kaus_bonus:

Infatti, la ragione che ho menzionato funziona solo per gli esperti

Allora rimane la domanda: come far smettere il timer di funzionare senza rimuovere drasticamente l'indicatore dal grafico?


In OnInit() memorizza il punteggio. Nel timer controlla il numero di conto. Se il punteggio è cambiato - uscire dal timer.
 
kaus_bonus:

Allora rimane la domanda - come si fa a far smettere il timer di funzionare senza rimuovere drasticamente l'indicatore dal grafico?

Utilizzare ACCOUNT_LOGIN e ACCOUNT_SERVER.
 

non pensi che sia una soluzione sbagliata?!

supponiamo di fareACCOUNT_LOGIN!=ACCOUNT_LOGIN_NEW, uccidere il timer e poi tornare a questo account, cosa succede? il timer non ripartirà?

è più facile aggiungere il motivo "cambio di conto" agli indicatori nello stesso modo, o mi sbaglio in qualche modo e questo porterà a qualche difficoltà?

 
kaus_bonus:

devi ammettere che è una soluzione sbagliata!

È una mossa da cavallo!

Supponiamo di fareACCOUNT_LOGIN!=ACCOUNT_LOGIN_NEW, uccidere il timer e poi tornare a quel conteggio, cosa succede?

Quando viene rilevato un cambio di account, si ricordano già le nuove caratteristiche.

Si può progettare come una piccola biblioteca sul principio che qui(macro). Allora le cose "storte" non saranno una seccatura.

Motivazione: