Symboles personnalisés. Erreurs, bogues, questions, suggestions. - page 20

 

Solution au problème du changement automatique des devises des symboles personnalisés après un redémarrage du Terminal.

// Сервис корректирует валюты всех кастомных символов.
#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();
}
 
Lorsque vous testez un symbole personnalisé, le prix du tick est-il simulé ou non ?
 
Irek Gilmutdinov:
Pouvez-vous me dire, lorsque vous testez un symbole personnalisé, si le prix du tick est simulé ou non ?

Doit simuler. C'est plus rapide à vérifier.

 
Ce n'est pas un modèle pour moi, c'est pourquoi je demande.
 
Quelqu'un peut-il dire quelque chose sur le problème que j'ai soulevé ?
 
jaffer wilson:
Quelqu'un peut-il dire quelque chose sur le problème que j'ai soulevé ?

Avez-vous vérifié la version 2145 ?

 

Le prix du tick n'est pas simulé dans le testeur sur le symbole personnalisé.

MT5 build 2145.

Je crée un GBPCAD_s personnalisé, tous les champs sont hérités du GBPCAD :

Je charge l'historique des minutes personnalisées dedans.

Puis je fais un backtest sur un dépôt de 100 000 USD et des prix ouverts.

Un simple Expert Advisor interroge le prix d'un tick et ouvre une position :

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));
  }

Le prix du tick ne change pas du tout et ne correspond pas au taux USDCAD à ce moment-là.

L'historique du GBPUSD et du USDCAD n'est chargé qu'après l'ouverture de la position, mais le prix du tick n'est pas affecté.

Dans la capture d'écran, le tick price correspond à USDCAD = 1.3300, alors qu'il devrait être = 1.0230 :


 
Irek Gilmutdinov:

Le prix du tick n'est pas simulé dans le testeur sur le symbole personnalisé.

MT5 build 2145.

Je crée un GBPCAD_s personnalisé, tous les champs sont hérités du GBPCAD :

Je charge l'historique des minutes personnalisées dedans.

Puis je fais un backtest sur un dépôt de 100 000 USD et des prix ouverts.

Un simple Expert Advisor interroge le prix d'un tick et ouvre une position :

Le prix du tick ne change pas du tout et ne correspond pas au taux USDCAD à ce moment-là.

L'historique du GBPUSD et du USDCAD n'est chargé qu'après l'ouverture de la position, mais le prix du tick n'est pas affecté.

Dans la capture d'écran, le tick price correspond à USDCAD = 1.3300, alors qu'il devrait être = 1.0230 :


Il s'agit probablement de télécharger l'historique des minutes, pas des ticks.
Chargez les tics !

 
Il n'y a pas de tics, les tests sont effectués aux prix d'ouverture.
 
fxsaber:

Solution au problème du changement automatique des devises des symboles personnalisés après un redémarrage du Terminal.

N'est-il pas nécessaire de vérifier et d'attendre que le terminal se connecte au serveur ? Je me souviens qu'il y a eu des cas où, sans connexion, la monnaie de dépôt est inconnue.

Pourquoi faire un retour à la fin, là où ça se passe tout seul ? C'est inutile et inconfortable.