Servizi. Sono già in funzione? - pagina 21

 

Renat, sarà possibile implementare il vetro personalizzato nel servizio?
La documentazione dice che il gestore OnBookEventviene chiamato negli indicatori e negli esperti.
E i servizi? Come eseguire gli stack nel servizio?
Vorrei essere in grado di eseguire i miei stack personalizzati nel servizio.
Secondo le tue parole, i servizi non supportano altri gestori oltre a OnStart, e questo diventa un problema.
La questione è che i servizi sono molto più veloci del sistema OnTimer inindicatori eExpert Advisors.
Ed è meglio usare i servizi per costruire stack personalizzati.

p.s.
Ho letto questo articolo e sono sorpreso che alcuni programmatori esperti non possano usare i servizi.
I servizi sono fighi, possono implementare un sacco di cose, fino all'esecuzione asincrona dell'intero progetto, condividendo la logica dei compiti tra i servizi.
Ma sarebbe più logico aggiungere al linguaggio la funzione Thread(params), che realizzerebbe il parallelismo dei thread per gli argomenti passati alla funzione.
Bene, se ci saranno dei thread, allora i processi vanno con loro, sotto forma della funzione Process(params).

Uno dei vantaggi importanti, il servizio viene elaborato più velocemente del tempo di sistema, cioè viene elaborato in appena 1ms, o forse anche meno.
Perché ho forzato un limite Sleep(1) nel ciclo While().
Il sistema OnTimer() con l'evento EventSetMillisecondTimer(1) viene elaborato in Expert Advisors e indicatori per ~ 20ms.
Questo non è un cattivo aumento delle prestazioni di elaborazione.
Sfortunatamente, i gestori Expert Advisor non sono supportati nel servizio, il che limita gravemente le possibili soluzioni.
Molto tempo fa gli utenti hanno chiesto di implementare l'avvio di Expert Advisors senza orari, i servizi risolverebbero solo questo problema.
A giudicare dal pulsante "Automated Trading" nel menu del servizio, la possibilità di fare trading è disponibile.
Ma non si può costruire una soluzione di trading completa con il solo gestore OnStart.

 
fxsaber:

Davvero molto utile.

Ho riavviato il computer e mi sono dimenticato di RAMDrive. Esegui MT5 e segnala immediatamente un problema.

Non è più facile usare RamDisk con automount + junction + allocazione dinamica?
All'avvio del PC, monta e collega automaticamente tutto, e se non c'è abbastanza spazio sul disco, lo aggiunge automaticamente dalla RAM.

 
Sergey Dzyublik:

Non è più facile usare RamDisk con automount + junction + allocazione dinamica?
All'avvio il PC monta e collega automaticamente tutto, e se non c'è abbastanza spazio sul disco, lo aggiunge automaticamente dalla RAM.

Non è sempre necessario, ecco perché non l'ho creato all'avvio.

 

Il Terminale ama cambiare le proprietà dei simboli personalizzati quando viene riavviato. Per esempio, le sue valute.

È qui che i servizi possono venire in soccorso. Quando vengono lanciati, correggono il comportamento non autorizzato del Tester.

 
Potete dirmi come si può visualizzare un commento su un grafico attivo dal programma di servizio?
In effetti, può uscire qualsiasi altro grafico?

//+------------------------------------------------------------------+
//| Service program start function                                   |
//+------------------------------------------------------------------+

int OnStart()
{
   Comment("text");

   return(0);
}
 

Rispondere a me stesso ))

int OnStart()
{
   ChartCommentSet("Hello Service", ChartFirst());
   
   
   return(0);
}

//+------------------------------------------------------------------+ 
//| Функция устанавливает текст комментария в левом верхнем углу     | 
//| графика.                                                         | 
//+------------------------------------------------------------------+ 
bool ChartCommentSet(const string str, const long chart_ID=0) 
{ 
   //сбросим значение ошибки 
   ResetLastError(); 
   
   //установим значение свойства 
   if(!ChartSetString(chart_ID, CHART_COMMENT, str)) 
   { 
      //выведем сообщение об ошибке в журнал "Эксперты" 
      Print(__FUNCTION__+", Error Code = ", GetLastError()); 
      return(false); 
   } 
   
   //успешное выполнение 
   return(true); 
}
 
Come eseguire un servizio da un EA?
 
Roman:

Rispondere a me stesso ))

sì - tutto scrive nell'angolo in alto a sinistra

//+------------------------------------------------------------------+
//| Service program start function                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ChartCommentSet("Hello Service", ChartFirst());


   return;
  }
//+------------------------------------------------------------------+
//| Функция устанавливает текст комментария в левом верхнем углу     |
//| графика.                                                         |
//+------------------------------------------------------------------+
bool ChartCommentSet(const string str, const long chart_ID=0)
  {
//сбросим значение ошибки
   ResetLastError();

//установим значение свойства
   if(!ChartSetString(chart_ID, CHART_COMMENT, str))
     {
      //выведем сообщение об ошибке в журнал "Эксперты"
      Print(__FUNCTION__+", Error Code = ", GetLastError());
      return(false);
     }

//успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+

Foto di

 
fxsaber:

Il Terminale ama cambiare le proprietà dei simboli personalizzati quando viene riavviato. Per esempio, le sue valute.

È qui che i servizi possono venire in soccorso. Correggono il comportamento non autorizzato del Tester all'avvio.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Simboli personalizzati. Errori, bug, domande, suggerimenti.

fxsaber, 2019.09.15 22:30

Risolvere il problema del cambiamento automatico delle valute dei simboli personalizzati dopo il riavvio del terminale.

// Сервис корректирует валюты всех кастомных символов.
#property service

bool CorrectCurrency( const string Symb, const string Currency )
{  
  return(SymbolInfoInteger(Symb, SYMBOL_CUSTOM) && 
         CustomSymbolSetString(Symb, SYMBOL_CURRENCY_BASE, Currency) &&
         CustomSymbolSetString(Symb, SYMBOL_CURRENCY_MARGIN, Currency) &&
         CustomSymbolSetString(Symb, SYMBOL_CURRENCY_PROFIT, Currency));
}

void CorrectSymbols( void )
{
  const string Currency = AccountInfoString(ACCOUNT_CURRENCY);
  
  for (int i = SymbolsTotal(false) - 1; i >= 0; i--)
    CorrectCurrency(SymbolName(i, false), Currency);
    
  return;
}

void OnStart()
{
  CorrectSymbols();
}
 

Aggiungi ai servizi la possibilità di lanciare l'auto-ottimizzazione degli Expert Advisors.

E varie funzionalità, ad esempio per poter sapere che l'ottimizzazione/esecuzione è stata completata.