程序库: 交易品种 - 页 11

 

挑战

CLONE(SYMBOL_FORMULA)

有问题。通常情况下,MQL5 中的自定义符号会自行计算条形图和刻度线,如果转移公式,则无法管理新符号。我们的想法(修复请求)是用公式合成一个自定义符号。

我现在已经注释掉了这种克隆,但即使现在属性中看不到公式,生成的自定义符号似乎仍在以某种混乱的形式克隆合成条形图。我还不明白这是怎么回事。

ZЫ. 我删除了生成器程序,但它生成的自定义符号仍与合成符号同步更新。畸变。终端出现故障。

 
Stanislav Korotky #:

这一挑战值得商榷。通常情况下,MQL5 中的自定义符号会自行计算条形图和刻度线,如果转移公式,则无法管理新符号。我们的想法(fiche-request)是通过公式合成建立自定义符号。

这可能确实不值得完全克隆。

我现在已经注释掉了这种克隆,但即使现在在属性中看不到公式,生成的自定义符号似乎仍然以某种混乱的形式克隆合成条形图。我还不明白这是怎么回事。

ZЫ. 我删除了生成器程序,但它生成的自定义符号仍与合成符号同步更新。畸变。终端出现故障。

不幸的是,这里有很多错误。

 

@fxsaber

有时重启终端后,测试仪会停止为自定义符号开仓。

或者利润为零。

这与什么有关?

附加的文件:
4y48yl.PNG  32 kb
y4xlvu2.PNG  35 kb
 

看看终端重启前和重启后的符号货币...

我曾经编写过一个自动恢复自定义货币的服务。

 
fxsaber #:

查看终端重启前和重启后的符号货币量....

我曾经编写过一个自动恢复自定义货币的服务。

现在,即使我删除了终端中所有已创建的自定义符号,并删除了包含自定义基础的文件夹,仍会创建一个失败的自定义符号。

我用以下代码创建了一个自定义符号

// 创建一个符号副本,以加快测试速度
#property script_show_inputs

#include <Symbol.mqh>

void OnStart()
{
  const SYMBOL Symb("TESTER_" + _Symbol); // 创建一个符号

  if (Symb.IsExist()) // 如果创建了符号
  {
    Symb = _Symbol; // 复制主符号的所有属性和柱状图历史记录(如果自定义,还包括刻度线历史记录) - 克隆

    // 使符号的货币成为账户的货币
    Symb.SetProperty(SYMBOL_CURRENCY_PROFIT, AccountInfoString(ACCOUNT_CURRENCY));
    Symb.SetProperty(SYMBOL_CURRENCY_MARGIN, AccountInfoString(ACCOUNT_CURRENCY));

    if (Symb.On()) // 包括在市场观察中
      ChartOpen(Symb.Name, PERIOD_CURRENT); // 打开一个新的符号图表
  }
}

如果您的服务可以解决问题,请与我们分享

 

现在我在一个新的虚拟环境中安装了终端,问题还是一样。

也许是最新版本的问题?

 

我想我找到问题所在了

如果创建一个 名为

EURUSD_1

一切正常。

如果创建一个名称为

1_EURUSD

就会发生糟糕的事情。

附加的文件:
1.PNG  90 kb
2.PNG  91 kb
 
EgorKim 自定义符号 货币的问题。
// 服务会纠正所有自定义字符的币值。
#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();
}
 
EgorKim #:

1_EURUSD

然后就会发生地狱般的事情。

这是在外汇交易中计算符号保证金时的情况,在其他保证金计算方法中,自定义符号的名称可以随心所欲。