Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 181

 
Andrey Khatimlianskii:

Di solito ho 1-2 grafici su un terminale come questo, è difficile confondersi. Ma il punto è chiaro.

Scambio più simboli, più EAs sono in esecuzione. Monitoraggio dei simboli non negoziabili ancora. I simboli personalizzati sono creati, Tester è in esecuzione, ecc.

Un cavallo di battaglia, in generale.
 
fxsaber:

Trading di più simboli, più EAs in esecuzione. Monitoraggio dei simboli non negoziabili ancora. I simboli personalizzati vengono creati, Tester è in esecuzione, ecc.

Un cavallo di battaglia, in generale.

Ho un cavallo di battaglia solo sotto la password di investitore per tutti gli account. E non importa se ci sono EA o no.

 
trader_number_one:

Ho solo un cavallo di battaglia sotto la mia password di investimento per tutti gli account. E non mi interessa se ci sono consiglieri o meno.

I consulenti non sono solo per il trading. Inoltre, devi essere in grado di scambiare con un cavallo di battaglia.

 
fxsaber:

Ho dieci terminali. In agitazione in uno, sono passato a un altro account. Il tempo passa, guardo il Terminale e vedo che ho bisogno di un altro account - passo a quello vecchio. E completamente senza aspettarsi che l'EA sia appeso, vedo che l'EA è partito.

questo semplice codice funzionerà con il cambio di account?

bool IsShowMessageBox = true;
//+------------------------------------------------------------------+
int OnInit()
{
   if(IsShowMessageBox && MessageBox("Произвести запуск эксперта?", "Run EA", MB_OKCANCEL) == IDCANCEL) return(INIT_FAILED);
   IsShowMessageBox = false;
   return(INIT_SUCCEEDED);
}


e il re-login eseguirà questo codice quando la connessione viene interrotta?

 
Igor Makanu:

un codice semplice come questo funzionerà con un cambio di account?

No.

il re-login quando la connessione viene interrotta farà scattare questo codice?

Il re-login automatico non lo farà. Manuale.

 

La soluzione è in superficie. Cosa non cambia nel grafico quando lo si cambia? Proprio così: gli oggetti grafici. Quando il robot si avvia, si crea un oggetto grafico, che si elimina in DeInit, nella situazione normale, rispettivamente, in OnInit si controlla l'oggetto, se esiste, allora qualcosa è andato storto e ritorna INIT_FAILED.

All'incirca così:

#define  NAME "test"

int OnInit()
  {
   static const string symbol=_Symbol;
   if (ObjectFind(0,NAME)>=0||symbol!=_Symbol) return INIT_FAILED;
   else ObjectCreate(0,NAME,OBJ_HLINE,0,0,0);
   return INIT_SUCCEEDED;
  }

void OnDeinit(const int reason){
   switch(reason){
      case REASON_PARAMETERS:
      case REASON_PROGRAM:
      case REASON_REMOVE:
      case REASON_INITFAILED:
      case REASON_CLOSE:
      case REASON_CHARTCLOSE:
      case REASON_TEMPLATE:
      case REASON_CHARTCHANGE: ObjectDelete(0,NAME);
      case REASON_RECOMPILE:
      case REASON_ACCOUNT: break;
   }
}

void OnTick(){
}
 
Vladimir Simakov:

La soluzione è in superficie. Cosa non cambia nel grafico quando lo si cambia? Proprio così: gli oggetti grafici. Quando il robot si avvia, si crea un oggetto grafico, che si elimina in DeInit, nella situazione normale, rispettivamente, in OnInit si controlla l'oggetto, se esiste, allora qualcosa è andato storto e ritorna INIT_FAILED.

All'incirca così:

il salvataggio non è un problema, qui in generale abbiamo bisogno di distribuire correttamente l'inizializzazione EA, il caso di cambiare account è l'ultima delle mie preoccupazioni, ma come viene lanciato il grafico stesso e quando il grafico non è pronto è un mistero avvolto nell'oscurità )))

controllato leggendo il commento... non è fluido - non si vede nemmeno sullo "schermo nero" quando si cambia account su un simbolo inesistente ;)

int OnInit()
{
   string arr_comm[];
   if(StringSplit(ChartGetString(0, CHART_COMMENT), StringGetCharacter(";", 0), arr_comm) == 2) Print("_StopFlag = ", (bool)((int)arr_comm[0]), " ; _UninitReason = ", (int)arr_comm[1]);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   Comment((string)_StopFlag + ";" + (string)_UninitReason);
}
 
Vladimir Simakov:

La soluzione è in superficie. Cosa non cambia nel grafico quando lo si cambia? Proprio così: gli oggetti grafici. Quando il robot si avvia, si crea un oggetto grafico, che si cancella in DeInit, nella situazione normale, rispettivamente, in OnInit si controlla l'oggetto, se esiste, allora qualcosa è andato storto e ritorna INIT_FAILED.

Questo è qualcosa del genere:

Potete anche usare le variabili globali del terminale. Non vengono nemmeno cancellati.

 
Konstantin Nikitin:

Potreste anche usare le variabili globali del terminale. Non saranno nemmeno cancellati.

Assaggi e sapori... Non mi piacciono...

 
Vladimir Simakov:

Per il gusto e il colore... Non mi piacciono...

Per esempio, cancello tutti gli oggetti su VDS. Solo che inutile non caricare il programma. E non c'è bisogno di loro lì. Io uso i globali. Quindi tutto dipende dalla situazione.