Símbolos personalizados. Errores, fallos, preguntas, sugerencias. - página 20

 

Solución al problema del cambio automático de las monedas de los símbolos personalizados después de un reinicio del 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();
}
 
Cuando se prueba un símbolo personalizado, ¿se simula el precio del tick para él o no?
 
Irek Gilmutdinov:
¿Puede decirme, cuando se prueba un símbolo personalizado, si el precio del tick es simulado o no?

Debería simular. Más rápido de comprobar.

 
Para mí no es un modelo, por eso lo pregunto.
 
¿Puede alguien decir algo sobre el problema que he planteado?
 
jaffer wilson:
¿Puede alguien decir algo sobre el problema que he planteado?

¿Has comprobado la compilación 2145?

 

El precio del tick no se simula en el probador en el símbolo personalizado.

MT5 build 2145.

Creo GBPCAD_s personalizado, todos los campos se heredan de GBPCAD:

Cargo el historial de minutos personalizado en él.

Luego hago un backtest con 100 000 USD de depósito y precios abiertos.

Un simple Asesor Experto interroga el precio de un tick y abre una posición:

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

El precio del tick no cambia en absoluto y no coincide con la cotización del USDCAD en ese momento.

El historial de GBPUSD y USDCAD se carga sólo después de la apertura de la posición, pero el precio del tick no se ve afectado.

En la captura de pantalla, el precio del tick corresponde a USDCAD = 1,3300, mientras que debería ser = 1,0230:


 
Irek Gilmutdinov:

El precio del tick no se simula en el probador en el símbolo personalizado.

MT5 build 2145.

Creo GBPCAD_s personalizado, todos los campos se heredan de GBPCAD:

Cargo el historial de minutos personalizado en él.

Luego hago un backtest con 100 000 USD de depósito y precios abiertos.

Un simple Asesor Experto interroga al precio de un tick y abre una posición:

El precio del tick no cambia en absoluto y no coincide con la cotización del USDCAD en ese momento.

El historial de GBPUSD y USDCAD se carga sólo después de la apertura de la posición, pero el precio del tick no se ve afectado.

En la captura de pantalla, el precio del tick corresponde a USDCAD = 1,3300, mientras que debería ser = 1,0230:


Lo más probable es que se trate de descargar el historial de los minutos, no los ticks.
¡Carguen las garrapatas!

 
No hay tics, las pruebas se hacen a precios de apertura.
 
fxsaber:

Solución al problema del cambio automático de las monedas de los símbolos personalizados después de un reinicio del Terminal.

¿No es necesario comprobar y esperar a que el terminal se conecte al servidor? Recuerdo que hubo casos en los que sin conexión se desconoce la moneda del depósito.

¿Por qué hacer un retorno al final, donde se produce por sí mismo? No tiene sentido y no es cómico.

Razón de la queja: