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

 
fxsaber:

此外,如果是00:00:01,你就不能用CustomTicksAdd来重塑一个两秒钟前的柱子。

当然你不能。因为在00:00:01到达的tick应该已经形成了下一个bar。在一个正常的情况下。

 
Slava:

对于测试者来说,前天的刻度线就是今天的新刻度线。

我明白你的意思。你六个月前的自定义抽搐的练习具有明显的测试者性质。你的情况是不正常的(从普遍做法的意义上讲)。

至于非标准地使用定制的。这就是讨论的目的,找出不同情况下的特殊性,并试图解决它们。

 
Slava:

当然,这是不可能的。因为在00:00:01出现的嘀嗒声应该已经形成了下一个条形。在一个正常的情况下。

想象一下,一个服务可以在一秒钟内计时完毕(也许更短,就像你通常在公式上做的那样--100ms)。然后在午夜时分,条形图往往会失去当天的最后一个刻度。

 

Bug 16.

M1柱状图是存在的,但其他时间段没有显示。


如何讽刺地再现它--不知道。
 
fxsaber:

Bug 16.

M1柱状图是存在的,但其他时间段没有显示。


我不知道如何重现它。
那些条形图不是有非零秒的吗?
 
Slava:
那些不是有时间的非零秒的条子吗?

欧元兑美元有真正的刻度线,条形图是正常的(1分钟的倍数)。

该问题在M1以外的任何时期都很稳定。这就是为什么视频的录制没有任何问题。


但一段时间后,这个问题停止了播放。该符号是 该分支的专家顾问创建的

 

Bug 17.

蜱虫的故事 完全消失了。

#define  PRINT(A) Print(#A + " = " + (string)(A))

#define  SIZE 100

void OnStart()
{
  MathSrand((uint)TimeLocal());
  const string Name = _Symbol + (string)MathRand();
  
  MqlTick Ticks[];
  PRINT(CustomSymbolCreate(Name, NULL, _Symbol)); // Создали символ.
  PRINT(SymbolSelect(Name, true)); // Поместили в Обзор рынка
  PRINT(CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, D'2019.06.01' * 1000)); // Взяли тики
  
  PRINT(ArrayResize(Ticks, SIZE));    // Оставили только SIZE-тиков
  PRINT(CustomTicksAdd(Name, Ticks)); // Пробросили их все

  MqlTick NewTicks[];
  PRINT(CopyTicksRange(Name, NewTicks)); // Взяли тики, что в истории
   
//  PRINT(CustomTicksReplace(Name, 0, LONG_MAX, NewTicks)); // И перезаписали их.

  PRINT(CopyTicksRange(Name, Ticks)); // Убедились, что тиков в истории ровно SIZE
  PRINT(CustomTicksDelete(Name, Ticks[SIZE - 1].time_msc - 60 * 1000, LONG_MAX)); // Удалили последнюю минуту
  PRINT(CopyTicksRange(Name, Ticks)); // Убедились, что тиков стало меньше на удаленное количество
}


结果

CustomSymbolCreate(Name,NULL,_Symbol) = true
SymbolSelect(Name,true) = true
CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,D'2019.06.01'*1000) = 533797
ArrayResize(Ticks,100) = 100
CustomTicksAdd(Name,Ticks) = 100
CopyTicksRange(Name,Ticks) = 100
CustomTicksDelete(Name,Ticks[100-1].time_msc-60*1000,LONG_MAX) = 1
CopyTicksRange(Name,Ticks) = 0


如果你把下划线那一行的注释去掉,脚本就能正常工作。显然,旧的添加类型并不适合替换类型的地方。

 

Bug 18.

当刻度线被移除时,最后一个条形图就会丢失。

#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  MathSrand((uint)TimeLocal());
  const string Name = _Symbol + (string)MathRand();
  
  MqlTick Ticks[];
  PRINT(CustomSymbolCreate(Name, NULL, _Symbol)); // Создали символ.
  PRINT(SymbolSelect(Name, true)); // Поместили в Обзор рынка
  PRINT(CopyTicks(_Symbol, Ticks)); // Взяли тики
  
  PRINT(CustomTicksReplace(Name, 0, LONG_MAX, Ticks)); // Записали их.
  PRINT(CustomTicksDelete(Name, Ticks[ArraySize(Ticks) - 1].time_msc - 60 * 1000, LONG_MAX)); // Удалили последнюю минуту

  MqlTick LastTick[1];
  PRINT(CopyTicks(Name, LastTick, COPY_TICKS_ALL, 0, 1)); // Распечатали последний тик
  ArrayPrint(LastTick);

  MqlRates LastBar[1];
  PRINT(CopyRates(Name, PERIOD_M1, 0, 1, LastBar)); // Распечатали последний бар
  ArrayPrint(LastBar);
}


结果

CustomSymbolCreate(Name,NULL,_Symbol) = true
SymbolSelect(Name,true) = true
CopyTicks(_Symbol,Ticks) = 2000
CustomTicksReplace(Name,0,LONG_MAX,Ticks) = 2000
CustomTicksDelete(Name,Ticks[ArraySize(Ticks)-1].time_msc-60*1000,LONG_MAX) = 25
CopyTicks(Name,LastTick,COPY_TICKS_ALL,0,1) = 1
                 [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.06.11 22:37:42 1.13284 1.13288 0.0000        0 1560292662809       6       0.00000
CopyRates(Name,PERIOD_M1,0,1,LastBar) = 1
                 [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
[0] 2019.06.11 22:36:00 1.13278 1.13284 1.13278 1.13279            13        3             0
 

Bug 19.

差价的计算不正确。

#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  MathSrand((uint)TimeLocal());
  const string Name = _Symbol + (string)MathRand();
  
  PRINT(CustomSymbolCreate(Name, NULL, _Symbol)); // Создали символ.
  PRINT(SymbolSelect(Name, true)); // Поместили в Обзор рынка
  
  MqlTick Tick[1];
  
  if (SymbolInfoTick(_Symbol, Tick[0])) 
  {
    // Специально задаем отрицательный спред.
    Tick[0].bid = 1.11643;
    Tick[0].ask = 1.11632;        
    
    PRINT(CustomTicksAdd(Name, Tick)); // Пробросили тик.
    PRINT(SymbolInfoInteger(Name, SYMBOL_SPREAD)); // Смотрим его спред.
    
    ArrayPrint(Tick); // Смотрим сам тик.
  }
}


结果

CustomSymbolCreate(Name,NULL,_Symbol) = true
SymbolSelect(Name,true) = true
CustomTicksAdd(Name,Tick) = 1
SymbolInfoInteger(Name,SYMBOL_SPREAD) = -10
                 [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.06.03 00:32:11 1.11643 1.11632 0.0000        0 1559521931040       6       0.00000
 

错误20。从错误中删除。在下面的分支中找到了解决方案。

2085
自定义符号 属性的设置不正确。
观察到了结果的转变。
属性是根据其中一个选项设置的

CustomSymbolSetInteger(SName, SYMBOL_FILLING_MODE, ORDER_FILLING_FOK);     Результат: Filling == None
или
CustomSymbolSetInteger(SName, SYMBOL_FILLING_MODE, ORDER_FILLING_IOC);     Результат: Filling == Fill or Kill
или
CustomSymbolSetInteger(SName, SYMBOL_FILLING_MODE, ORDER_FILLING_RETURN);  Результат: Filling == Immediate or Cancel