自定义符号。误差、错误、问题、建议。 - 页 20

 

解决了终端重启后自动改变自定义符号 货币的问题。

// Сервис корректирует валюты всех кастомных символов.
#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();
}
 
当测试一个自定义符号 时,是否为其模拟了tick价格?
 
Irek Gilmutdinov:
你能告诉我,在测试一个自定义符号时,它的tick价格是否是模拟的?

应该模拟。检查起来比较快。

 
这对我来说不是建模,这就是我为什么要问。
 
谁能对我提出的问题说点什么?
 
jaffer wilson:
谁能对我提出的问题说点什么?

你检查过2145版本吗?

 

在自定义符号的测试器中没有模拟滴答价格。

MT5 build 2145。

我创建了自定义的GBPCAD_s,所有字段都从GBPCAD继承。

我把自定义的分钟历史载入其中。

然后我对100 000美元的存款和开盘价进行回测。

一个简单的专家顾问讯问了一个tick的价格并开了一个头寸。

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

勾股价完全没有变化,与当时的美元兑加元汇率不一致。

英镑兑美元和美元兑加元的历史只有在开仓后才会被加载,但tick价格不受影响。

在截图中,刻度线价格对应的是美元兑加元=1.3300,而它应该是=1.0230。


 
Irek Gilmutdinov:

在自定义符号的测试器中没有模拟滴答价格。

MT5 build 2145。

我创建了自定义的GBPCAD_s,所有字段都从GBPCAD继承。

我把自定义的分钟历史 载入其中。

然后我对100 000美元的存款和开盘价进行回测。

一个简单的专家顾问讯问了一个tick的价格并开了一个头寸。

勾股价完全没有变化,与当时的美元兑加元汇率不一致。

英镑兑美元和美元兑加元的历史只有在开仓后才会被加载,但tick价格不受影响。

在截图中,刻度线价格对应的是美元兑加元=1.3300,而它应该是=1.0230。


这很可能是一个下载 分钟历史的 问题,而不是下载刻度线。
装上虱子!

 
没有抽签,测试是在开盘价 进行的。
 
fxsaber:

解决了终端重启后自动改变自定义符号货币的问题。

难道不需要检查和等待终端连接到服务器吗?我记得有这样的情况,没有联系的情况下,存款货币 是未知的。

为什么要在最后做一个返回,在那里它自己会发生?这是毫无意义的,也是不舒服的。