Benutzerdefinierte Symbole. Fehler, Bugs, Fragen, Vorschläge. - Seite 20

 

Lösung für das Problem des automatischen Wechsels von benutzerdefinierten Symbolwährungen nach einem Neustart des Terminals.

// Сервис корректирует валюты всех кастомных символов.
#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();
}
 
Wird beim Testen eines benutzerdefinierten Symbols der Tickpreis für dieses Symbol simuliert oder nicht?
 
Irek Gilmutdinov:
Können Sie mir sagen, ob beim Testen eines benutzerdefinierten Symbols der Tickpreis für dieses Symbol simuliert wird oder nicht?

Sollte simulieren. Es ist schneller zu überprüfen.

 
Für mich ist das kein Modell, deshalb frage ich ja.
 
Kann jemand etwas zu dem von mir angesprochenen Problem sagen?
 
jaffer wilson:
Kann jemand etwas zu dem von mir angesprochenen Problem sagen?

Haben Sie den Build 2145 überprüft?

 

Der Tick-Preis wird im Tester für das benutzerdefinierte Symbol nicht simuliert.

MT5 Build 2145.

Ich erstelle benutzerdefinierte GBPCAD_s, alle Felder werden von GBPCAD geerbt:

Ich lade den benutzerdefinierten Minutenverlauf in die Datenbank.

Dann mache ich einen Backtest mit 100 000 USD Einlage und offenen Preisen.

Ein einfacher Expert Advisor fragt den Preis für einen Tick ab und eröffnet eine 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));
  }

Der Tickpreis ändert sich überhaupt nicht und stimmt nicht mit dem USDCAD-Kurs zu diesem Zeitpunkt überein.

Die GBPUSD- und USDCAD-Historie wird erst nach der Positionseröffnung geladen, aber der Tick-Preis ist davon nicht betroffen.

Im Screenshot entspricht der Tickpreis USDCAD = 1,3300, während er = 1,0230 sein sollte:


 
Irek Gilmutdinov:

Der Tick-Preis wird im Tester für das benutzerdefinierte Symbol nicht simuliert.

MT5 Build 2145.

Ich erstelle benutzerdefinierte GBPCAD_s, alle Felder werden von GBPCAD geerbt:

Ich lade den benutzerdefinierten Minutenverlauf in die Datenbank.

Dann mache ich einen Backtest mit 100 000 USD Einlage und offenen Preisen.

Ein einfacher Expert Advisor fragt den Preis für einen Tick ab und eröffnet eine Position:

Der Tickpreis ändert sich überhaupt nicht und stimmt nicht mit dem USDCAD-Kurs zu diesem Zeitpunkt überein.

Die GBPUSD- und USDCAD-Historie wird erst nach der Positionseröffnung geladen, aber der Tick-Preis ist davon nicht betroffen.

Im Screenshot entspricht der Tickpreis USDCAD = 1,3300, während er = 1,0230 sein sollte:


Wahrscheinlich geht es darum, den Verlauf der Minuten herunterzuladen, nicht die Ticks.
Laden Sie die Zecken!

 
Es gibt keine Häkchen, die Tests werden zu Eröffnungskursen durchgeführt.
 
fxsaber:

Lösung für das Problem des automatischen Wechsels von benutzerdefinierten Symbolwährungen nach einem Neustart des Terminals.

Ist es nicht notwendig, zu prüfen und zu warten, bis das Terminal eine Verbindung zum Server herstellt? Ich erinnere mich, dass es Fälle gab, in denen die Einzahlungswährung ohne Verbindung unbekannt ist.

Warum eine Rückkehr am Ende, wo es von selbst geschieht? Das macht keinen Sinn und ist nicht komisch.