Servizi. Sono già in funzione? - pagina 19

 
Sergey Golubev:

Molti anni fa, c'era un EA nella parte inglese del thread (mi dispiace, ci vuole troppo tempo per trovarlo ora) che quando faceva trading (e analizzava il mercato) generava e aggiornava un file di testo, che veniva letto a certi intervalli da un altro EA che lavorava nella stessa Metatrader, ma su una coppia diversa (o la stessa, ma su un grafico diverso). Ed entrambi hanno scambiato, comunicando tra loro con questo file.

L'ho fatto per scalper-master per comunicare con scalper-slave su altri terminali. Ma gli unici comandi di controllo sono inviati dal trader, quindi non c'è bisogno di cliccare manualmente gli stessi pulsanti su tutti i terminali. Ma nulla impedisce di trasmettere dati.

Si può comunicare tramite la mappatura della memoria, quindi addio mercato

 

Lavoro molto con i personaggi personalizzati. Quasi sempre è necessario ucciderne uno personalizzato, ma bisogna farlo manualmente. Ho deciso di automatizzarlo.

E si è rivelato essere solo il copione per i servizi. Probabilmente non è un approccio standard ai servizi, ma volevo uno script che non fosse legato ai grafici. Ed ecco perché

// Удаляет символ активного графика из Обзора рынка (кастомный - удаляет полностью).

#property service

// Находит чарт в фокусе.
long GetFocusChart()
{
  long Chart = ChartFirst();

  for (; Chart != -1; Chart = ChartNext(Chart))
    if (ChartGetInteger(Chart, CHART_BRING_TO_TOP))
      break;

   return(Chart);
}
   
// Удаляет чарты символа.
int DeleteCharts( const string Symb )
{
  int Res = 0;
  
  for (long Chart = ChartFirst(); Chart != -1; Chart = ChartNext(Chart))
    if (ChartSymbol(Chart) == Symb)
      Res += ChartClose(Chart);
  
  return(Res);
}

// Удаляет символ из Обзора рынка (кастомный - удаляет полностью).
bool DeleteSymbol( const string Symb )
{
  DeleteCharts(Symb);

  return(SymbolSelect(Symb, false) && (!SymbolInfoInteger(Symb, SYMBOL_CUSTOM) || CustomSymbolDelete(Symb)));
}

void OnStart()
{
  const long Chart = GetFocusChart();
  
  if (Chart != -1)
    DeleteSymbol(ChartSymbol(Chart));
}

Stavo pensando di mettere un tasto di scelta rapida su quello script/servizio e inchiodare un simbolo attraverso di esso quando vedo un grafico di un simbolo indesiderato. Sarebbe molto utile. Tuttavia, ha incontrato delle difficoltà.

  • È impossibile appuntare un tasto di scelta rapida a Service.
  • Per riavviare il servizio, dovete cancellarlo prima di farlo. Questo dovrebbe essere necessario per avviare i servizi al primo avvio del terminale. Ma il mio caso è diverso.
  • SymbolSelect non funziona - non può rimuovere il simbolo. Bug, a quanto pare.
Di conseguenza, è una seccatura. È possibile risolvere in qualche modo il lato pratico dei Servizi?


ZZY C'è un workaround per rimuovere il simbolo attivo del grafico.

 
fxsaber:

Lavoro molto con i personaggi personalizzati. Quasi sempre è necessario ucciderne uno personalizzato, ma bisogna farlo manualmente. Ho deciso di automatizzarlo.

E si è rivelato essere solo il copione per i servizi. Probabilmente non è un approccio standard ai servizi, ma volevo uno script che non fosse legato ai grafici. Ed ecco perché

Stavo pensando di mettere un tasto di scelta rapida su quello script/servizio e inchiodare un simbolo attraverso di esso quando vedo un grafico di un simbolo indesiderato. Sarebbe molto utile. Tuttavia, ha incontrato delle difficoltà.

  • È impossibile appuntare un tasto di scelta rapida a Service.
  • Per riavviare il servizio, dovete cancellarlo prima di farlo. Questo dovrebbe essere necessario per avviare i servizi al primo avvio del terminale. Ma il mio caso è diverso.
  • SymbolSelect non funziona - non può rimuovere il simbolo. Bug, a quanto pare.
Di conseguenza, è una seccatura. È possibile risolvere in qualche modo il lato pratico dei Servizi?


ZZY C'è un workaround per rimuovere un simbolo dal grafico attivo.

Non puoi mettere un tasto di scelta rapida su Services, perché la funzione OnChartEvent() non funziona lì; ma immagino che tu lo sappia. Quindi, Expert Advisor dovrebbe lavorare con i tasti di scelta rapida e passare i comandi al servizio attraverso le risorse. Cerca di gestire il servizio con le risorse.

SZY. Naturalmente, in questo caso, perderemo il significato di Servizio. Puoi chiudere i grafici da Expert Advisor premendo i tasti di scelta rapida...

SZY. L'unico punto non è quello di produrre funzionalità aggiuntive in Expert Advisors. Possiamo scaricare la funzionalità generale di vari EA in Service e chiamarla attraverso una risorsa. Dacci un comando su cosa fare.

 
Реter Konow:

Non posso mettere un tasto di scelta rapida su Service perché OnChartEvent() non funziona lì


 
fxsaber:


Grazie. Allora qual è il problema?

Si vuole che il servizio stesso (in esecuzione non-stop) risponda alla pressione dei tasti.

 
Реter Konow:

Grazie. Allora qual è il problema?

Si vuole che il servizio stesso (in esecuzione non-stop) risponda alla pressione dei tasti.

No. Si vuole che il servizio possa lavorare in modalità Script senza essere legato a un grafico.

 
fxsaber:

No. È necessario che il servizio sia in grado di lavorare in modalità Script senza essere legato a un grafico.

Funziona in qualche altro modo?

 
Реter Konow:

Funziona in qualche altro modo?

Sì.

 
fxsaber:

Sì.

Quindi può eseguire qualsiasi grafico? Facilmente.

 
Il servizio opera con dati (virgolette) con la possibilità di correggerli, ma non permette di gestire nulla, in particolare le finestre del terminale, che è ciò che serve. Da qui l'ovvia conclusione: se è necessario chiudere una o un'altra finestra, il servizio genera un preventivo ovviamente impossibile per questa finestra, e lo script collegato a questa finestra la chiude quando questo preventivo viene ricevuto.