Simboli personalizzati. Errori, bug, domande, suggerimenti. - pagina 20

 

Soluzione al problema del cambiamento automatico delle valute dei simboli personalizzati dopo un 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();
}
 
Quando si testa un simbolo personalizzato, il prezzo in tick viene simulato per esso o no?
 
Irek Gilmutdinov:
Potete dirmi, quando si testa un simbolo personalizzato, il prezzo in tick per esso è simulato o no?

Dovrebbe simulare. Più veloce da controllare.

 
Non sta modellando per me, ecco perché sto chiedendo.
 
Qualcuno può dire qualcosa sul problema che ho sollevato?
 
jaffer wilson:
Qualcuno può dire qualcosa sul problema che ho sollevato?

Avete controllato la build 2145?

 

Il prezzo del tick non viene simulato nel tester sul simbolo personalizzato.

MT5 build 2145.

Creo GBPCAD_s personalizzato, tutti i campi sono ereditati da GBPCAD:

Ci carico la cronologia dei minuti personalizzati.

Poi faccio il backtest su 100 000 USD di deposito e prezzi aperti.

Un semplice Expert Advisor interroga il prezzo di un tick e apre una posizione:

void OnTick()
  {
//---
  static bool bOnce = true;
  datetime dtTime[1];
  if (bOnce && CopyTime(NULL, 0, 0, 1, dtTime) == 1 && dtTime[0] % 86400 == 0)
    {
    MqlTick stcTick;
    MqlTradeRequest stcRequest;
    MqlTradeResult  stcResult;
    ZeroMemory(stcRequest);
    ZeroMemory(stcResult);
    SymbolInfoTick(_Symbol, stcTick);
    stcRequest.symbol = _Symbol;
    stcRequest.type = ORDER_TYPE_BUY;
    stcRequest.action = TRADE_ACTION_DEAL;
    stcRequest.price = stcTick.ask;
    stcRequest.volume = 1;
    bool bSent = OrderSend(stcRequest, stcResult);
    
    bOnce = false;
    }
  
  PrintFormat("tv=%.5f, USDCAD=%.5f",SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE), 1/SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE));
  }

Il prezzo del tick non cambia affatto e non corrisponde al tasso USDCAD in quel momento.

Lo storico di GBPUSD e USDCAD viene caricato solo dopo l'apertura della posizione, ma il prezzo in tick non viene influenzato.

Nella schermata, il prezzo di tick corrisponde a USDCAD = 1,3300, mentre dovrebbe essere = 1,0230:


 
Irek Gilmutdinov:

Il prezzo del tick non viene simulato nel tester sul simbolo personalizzato.

MT5 build 2145.

Creo GBPCAD_s personalizzato, tutti i campi sono ereditati da GBPCAD:

Ci carico la cronologia dei minuti personalizzati.

Poi faccio il backtest su 100 000 USD di deposito e prezzi aperti.

Un semplice Expert Advisor interroga il prezzo di un tick e apre una posizione:

Il prezzo del tick non cambia affatto e non corrisponde al tasso USDCAD in quel momento.

Lo storico di GBPUSD e USDCAD viene caricato solo dopo l'apertura della posizione, ma il prezzo in tick non viene influenzato.

Nella schermata, il prezzo di tick corrisponde a USDCAD = 1,3300, mentre dovrebbe essere = 1,0230:


Molto probabilmente si tratta di scaricare la storia dei minuti, non i tick.
Carica le zecche!

 
Non ci sono zecche, il test viene fatto ai prezzi di apertura.
 
fxsaber:

Soluzione al problema del cambiamento automatico delle valute dei simboli personalizzati dopo un riavvio del terminale.

Non è necessario controllare e aspettare che il terminale si connetta al server? Ricordo che ci sono stati casi in cui senza connessione la moneta di deposito è sconosciuta.

Perché fare un ritorno alla fine, dove avviene da solo? Non ha senso e non è comico.

Motivazione: