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

 

Bug 24.

探测到的和进口的 蜱虫的数据库不能正确共存。

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

void OnInit()
{
  MathSrand((int)TimeLocal());
  EventSetMillisecondTimer(20); // С такой частотой будем пробрасывать тики
}

void OnTimer()
{
  static bool FirstRun = true;
  static const string Name = _Symbol + (string)MathRand();
    
  static MqlTick Ticks[];
  static int Pos = 0;
    
  if (FirstRun)
  {    
    if (CustomSymbolCreate(Name, NULL, _Symbol) && SymbolSelect(Name, true)) // Создали символ
      PRINT(CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, (ulong)D'2019.06.20' * 1000, 5)); // Взяли 5 тиков для проброса
      
    FirstRun = false;
  }
  else if (Pos < ArraySize(Ticks))
  {
    MqlTick Tick[1];
    
    Tick[0] = Ticks[Pos++];
    
    PRINT(CustomTicksAdd(Name, Tick)); // Пробросили тик.
    PRINT(CustomTicksReplace(Name, Tick[0].time_msc, Tick[0].time_msc, Tick)); // Заменили его же через импорт.
  }
  else
  {
    PRINT(CopyTicksRange(Name, Ticks)); // Взяли всю тиковую историю
    ArrayPrint(Ticks);                  // Распечатали ее.
    
    ExpertRemove();
  }
}


结果

CopyTicks(_Symbol,Ticks,COPY_TICKS_ALL,(ulong)D'2019.06.20'*1000,5) = 5
CustomTicksAdd(Name,Tick) = 1
CustomTicksReplace(Name,Tick[0].time_msc,Tick[0].time_msc,Tick) = 1
CustomTicksAdd(Name,Tick) = 1
CustomTicksReplace(Name,Tick[0].time_msc,Tick[0].time_msc,Tick) = 1
CustomTicksAdd(Name,Tick) = 1
CustomTicksReplace(Name,Tick[0].time_msc,Tick[0].time_msc,Tick) = 1
CustomTicksAdd(Name,Tick) = 1
CustomTicksReplace(Name,Tick[0].time_msc,Tick[0].time_msc,Tick) = 1
CustomTicksAdd(Name,Tick) = 1
CustomTicksReplace(Name,Tick[0].time_msc,Tick[0].time_msc,Tick) = 1
CopyTicksRange(Name,Ticks) = 10
                 [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[0] 2019.06.20 00:00:05 1.12255 1.12268 0.0000        0 1560988805004       6       0.00000
[1] 2019.06.20 00:00:07 1.12259 1.12268 0.0000        0 1560988807693       2       0.00000
[2] 2019.06.20 00:00:08 1.12259 1.12267 0.0000        0 1560988808627       4       0.00000
[3] 2019.06.20 00:00:09 1.12256 1.12267 0.0000        0 1560988809561       2       0.00000
[4] 2019.06.20 00:00:10 1.12255 1.12268 0.0000        0 1560988810083       6       0.00000
[5] 2019.06.20 00:00:05 1.12255 1.12268 0.0000        0 1560988805004       6       0.00000
[6] 2019.06.20 00:00:07 1.12259 1.12268 0.0000        0 1560988807693       6       0.00000
[7] 2019.06.20 00:00:08 1.12259 1.12267 0.0000        0 1560988808627       6       0.00000
[8] 2019.06.20 00:00:09 1.12256 1.12267 0.0000        0 1560988809561       6       0.00000
[9] 2019.06.20 00:00:10 1.12255 1.12268 0.0000        0 1560988810083       6       0.00000


有5只蜱虫陆续被重新取样/进口,但在历史上发现了10只蜱虫。同时,先走五个小点,然后再走同样的五个小点。也就是说,即使是蜱虫数据库中的条目时间也不是连续的。

注意后半段的旗帜,它们与前半段不同。

 
Slava:

不能重现。在导入条形图后,空图会立即更新。

如果图表没有被打开会怎样?在导入条形图后打开图表

或者关闭并打开图表。

或者从图表的上下文菜单中更新图表。

领先的问题)))

我引进了酒吧,并关闭了所有的窗户。

然后重新打开符号,进入Bars标签,在那里选择我的符号。

栅栏应该显示出来吗?它是空白的。

当我点击加载按钮时(预先选择了覆盖期),它们也没有出现。

我试过1970版--同样的情况。

打开/关闭图表和程序都没有帮助。

我还没有开始着手编程。

嗯,一定是这样...


如果你有可能,请远程连接,看看她需要什么,谢谢。

 

https://www.mql5.com/ru/forum/147666/page2#comment_3720399

可能会对某人有所帮助。
但我有一个不同的问题
1.除了2019.hcc文件外,还生成了1970.hcc文件
删除后,它似乎又活过来了。
2. 在o或h位于l h之外的地方有红线

不清楚1970年是怎么来的。
没有这样的日期,没有空行
也许有很多蜡烛,在5万以下

是可以看的,但如何扩大图中更明显的振幅?
我需要在绘制对象时精确瞄准烛台的末端
不方便手动输入属性和设置值
它把图表移到最后,我不得不倒回去。
我怎样才能修复它,使它不会跳到最后一栏?

Тестер не работает
Тестер не работает
  • 2013.11.04
  • www.mql5.com
2013.11.03 17:25:58 TestGenerator: no history data 'EURUSD1' Вот такое сообщение появляется в журнале после нажатия кнопки "Старт"...
 

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

Stanislav Korotky, 2019.08.22 17:34

有人在使用自定义字符时遇到过以下问题吗?CustomRatesUpdate函数通过了正常的报价,但事实上,图表和数据窗口得到了一些奇怪的东西(在这种情况下,在收盘价和低价值比传递的要少100倍)。

另外,在平行的情况下,用CustomTicksAdd来模拟单一的ticks,其收盘价值与日志中的相同(紧接在CustomRatesUpdate之前),也就是说,不清楚报价中减少的值来自哪里。

UPD。

我在美元兑加元上得到了 "反向 "的情况--写完后报价增加了10倍。这是我得到的日志。

2019.08.23 00:04:10.579 RenkoCharts (USDCAD,M1)                  [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
2019.08.23 00:04:10.579 RenkoCharts (USDCAD,M1) [0] 2019.08.23 00:02:00 1.32987 1.32987 1.32980 1.32987           457       48             0
2019.08.23 00:04:10.579 RenkoCharts (USDCAD,M1) Retry: 1 0
2019.08.23 00:04:10.579 RenkoCharts (USDCAD,M1)                  [time]  [open]   [high]   [low]  [close] [tick_volume] [spread] [real_volume]
2019.08.23 00:04:10.579 RenkoCharts (USDCAD,M1) [0] 2019.08.23 00:02:00 1.32980 13.29730 1.32980 13.29730           457       52             0

第一个ArrayPrint是在CustomRatesUpdate中写入的内容,第二个ArrayPrint是在写入后立即用CopyRates从最近的一个酒吧中读取的内容。首先,差异是开盘的最后一位数字,但更重要的是,高点和收盘都增加了10倍。

PS。在滴答声中,一切都很好。

 

Stanislav Korotky:

PS。蜱虫的一切都很好。

Bug 22.

 
fxsaber:

Bug 22.

在最新的版本中,它是否被修复了?

 

什么是4022错误?与试图给自定义字符写一个条子有关。但从代码来看,它是一个通用的。

起初,它得出了这样的结果。

KI      0       16:24:20.957    RenkoCharts (XAUUSD,M1) Alert: Error on writing custom record: 3082, err: 4401
HS      0       16:24:20.957    RenkoCharts (XAUUSD,M1) Failed to add:
LE      0       16:24:20.957    RenkoCharts (XAUUSD,M1)                  [time]   [open]   [high]    [low]  [close] [tick_volume] [spread] [real_volume]
KG      0       16:24:20.957    RenkoCharts (XAUUSD,M1) [0] 2019.08.28 00:06:00 1542.500 1542.500 1542.400 1542.400            15      170             0
GF      0       16:24:20.957    RenkoCharts (XAUUSD,M1) Last known 10 M1:
JN      0       16:24:20.973    RenkoCharts (XAUUSD,M1)                  [time]   [open]   [high]    [low]  [close]       [tick_volume] [spread]       [real_volume]
JJ      0       16:24:20.973    RenkoCharts (XAUUSD,M1) [0] 2019.08.28 00:00:00 1543.100 1543.100 1543.000 1543.000                   4      180                   0
DE      0       16:24:20.973    RenkoCharts (XAUUSD,M1) [1] 2019.08.28 00:01:00 1543.000 1543.000 1542.900 1542.900                   2      180                   0
EP      0       16:24:20.973    RenkoCharts (XAUUSD,M1) [2] 2019.08.28 00:02:00 1542.900 1542.900 1542.800 1542.800                   1      180                   0
ES      0       16:24:20.973    RenkoCharts (XAUUSD,M1) [3] 2019.08.28 00:03:00 1542.800 1542.800 1542.700 1542.700                   1      180                   0
EN      0       16:24:20.973    RenkoCharts (XAUUSD,M1) [4] 2019.08.28 00:04:00 1542.700 1542.700 1542.600 1542.600                   1      180                   0
QH      0       16:24:20.973    RenkoCharts (XAUUSD,M1) [5] 2019.08.28 00:05:00 1542.600 1542.700 1542.500 1542.500                  30      170                   0
RE      0       16:24:20.973    RenkoCharts (XAUUSD,M1) [6] 1970.01.01 00:00:00   +0.000   +0.000   +0.000   +0.000          5365435195        1 1827299883397152768
FF      0       16:24:20.973    RenkoCharts (XAUUSD,M1) [7] 2106.02.07 06:28:16    0.078   +0.000   +0.000   +0.000 4597373804417646592        1                9481
KR      0       16:24:20.973    RenkoCharts (XAUUSD,M1) [8] 1970.01.01 00:00:00   +0.000   +0.000   +0.000   +0.000           136454688        1 1827300776750350336
KL      0       16:24:20.973    RenkoCharts (XAUUSD,M1) [9] 0000.00.00 00:00:00   +0.000    2.150   +0.000   +0.000 1287860306076237824        0          4294967300
CH      0       16:24:20.973    RenkoCharts (XAUUSD,M1) Timeout before retry...

4401当调用CustomRatesUpdate 时。然后用CopyRates读取自定义符号的最后10根柱子(我们可以看到基数中的一些胡言乱语)。然后通过超时几次尝试,再次写出一个条形,直到4022出现。然后异常终止了EA,之后它又重新启动了自己。

 

问题是这样的。

我需要在一个自定义符号中动态地改变停止和冻结水平。

有以下代码用于测试EA。

//+------------------------------------------------------------------+
//| Globals                                                          |
//+------------------------------------------------------------------+
string symbol_name="EURUSD_1";
string symbol_path="";
string symbol_origin="EURUSD";
long stop_lvl=20;
long freeze_lvl=30;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 1) create
   if(!::SymbolInfoInteger(symbol_name,SYMBOL_CUSTOM))
     {
      ResetLastError();
      if(!::CustomSymbolCreate(symbol_name,symbol_path,symbol_origin))
        {
         PrintFormat("Error code: %d",GetLastError());
         return INIT_FAILED;
        }
     }
//--- 2) set levels
   ResetLastError();
   if(!::CustomSymbolSetInteger(symbol_name,SYMBOL_TRADE_STOPS_LEVEL,stop_lvl))
     {
      PrintFormat("Error code: %d",GetLastError());
      return INIT_FAILED;
     }
   if(!::CustomSymbolSetInteger(symbol_name,SYMBOL_TRADE_FREEZE_LEVEL,freeze_lvl))
     {
      PrintFormat("Error code: %d",GetLastError());
      return INIT_FAILED;
     }
//---
   return INIT_SUCCEEDED;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 1) stop level
   stop_lvl=::SymbolInfoInteger(symbol_name,SYMBOL_TRADE_STOPS_LEVEL);
   if(stop_lvl==20)
      stop_lvl=30;
   else
      stop_lvl=20;
   ResetLastError();
   if(::CustomSymbolSetInteger(symbol_name,SYMBOL_TRADE_STOPS_LEVEL,stop_lvl))
     {
      PrintFormat("Error code while setting a new value for the stop level: %d",
                  GetLastError());
      return;
     }
//--- 2) freeze level
   freeze_lvl=::SymbolInfoInteger(symbol_name,SYMBOL_TRADE_FREEZE_LEVEL);
   if(freeze_lvl==30)
      freeze_lvl=40;
   else
      freeze_lvl=30;
   if(::CustomSymbolSetInteger(symbol_name,SYMBOL_TRADE_FREEZE_LEVEL,freeze_lvl))
     {
      PrintFormat("Error code while setting a new value for the freeze level: %d",
                  GetLastError());
      return;
     }
  }
//+------------------------------------------------------------------+

在正常调试模式下,我只在OnTick()处理程序体中得到一个错误。而错误的代码是0。

2019.09.09 23:25:05.010 TestingLevels (EURUSD,M1)       Error code while setting a new value for the stop level: 0


在历史记录的调试模式 下,我在初始化过程中得到一个错误。错误是这样的。

2019.09.09 23:29:43.005 2019.09.02 00:00:00   Error code: 4014

也就是禁止调用系统函数。

不允许使用的功能

4014

系统函数不允许被调用


一般来说,当EA在自定义符号上运行时,是否可以改变停止平移和自由平移的值?

 
Denis Kirichenko:

问题是这样的。

我需要在一个自定义符号中动态地改变停止和冻结水平。

有以下代码用于测试EA。

在正常调试模式下,我只在OnTick()处理程序体中得到一个错误。该错误的代码为0。


在历史记录的调试模式 下,我在初始化过程中得到一个错误。错误是这样的。

也就是禁止调用系统函数。

不允许使用的功能

4014

系统函数不允许被调用


一般来说,当EA在自定义符号上运行时,是否可以改变止损点和冻结点的值?

以及为什么在OnTick()行中

if(::CustomSymbolSetInteger(symbol_name,SYMBOL_TRADE_STOPS_LEVEL,stop_lvl))

и

if(::CustomSymbolSetInteger(symbol_name,SYMBOL_TRADE_FREEZE_LEVEL,freeze_lvl))

在成功改变字符属性时进入错误处理块的主体?(没有"!"符号)

 
Artyom Trishkin:

为什么OnTick()中的这几行

и

在成功改变字符属性时进入错误处理块体?(没有"!"符号)。

Artyom, 谢谢你!我的疏忽。

更新版本。

//+------------------------------------------------------------------+
//| Globals                                                          |
//+------------------------------------------------------------------+
string symbol_name="EURUSD_1";
string symbol_path="";
string symbol_origin="EURUSD";
long stop_lvl=20;
long freeze_lvl=30;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 1) create
   if(!::SymbolInfoInteger(symbol_name,SYMBOL_CUSTOM))
     {
      ResetLastError();
      if(!::CustomSymbolCreate(symbol_name,symbol_path,symbol_origin))
        {
         PrintFormat("Error code: %d",GetLastError());
         return INIT_FAILED;
        }
     }
//--- 2) set levels
   ResetLastError();
   if(!::CustomSymbolSetInteger(symbol_name,SYMBOL_TRADE_STOPS_LEVEL,stop_lvl))
     {
      PrintFormat("Error code: %d",GetLastError());
      return INIT_FAILED;
     }
   if(!::CustomSymbolSetInteger(symbol_name,SYMBOL_TRADE_FREEZE_LEVEL,freeze_lvl))
     {
      PrintFormat("Error code: %d",GetLastError());
      return INIT_FAILED;
     }
//---
   return INIT_SUCCEEDED;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 1) stop level
   stop_lvl=::SymbolInfoInteger(symbol_name,SYMBOL_TRADE_STOPS_LEVEL);
   if(stop_lvl==20)
      stop_lvl=30;
   else
      stop_lvl=20;
   ResetLastError();
   if(!::CustomSymbolSetInteger(symbol_name,SYMBOL_TRADE_STOPS_LEVEL,stop_lvl))
     {
      PrintFormat("Error code while setting a new value for the stop level: %d",
                  GetLastError());
      return;
     }
//--- 2) freeze level
   freeze_lvl=::SymbolInfoInteger(symbol_name,SYMBOL_TRADE_FREEZE_LEVEL);
   if(freeze_lvl==30)
      freeze_lvl=40;
   else
      freeze_lvl=30;
   if(!::CustomSymbolSetInteger(symbol_name,SYMBOL_TRADE_FREEZE_LEVEL,freeze_lvl))
     {
      PrintFormat("Error code while setting a new value for the freeze level: %d",
                  GetLastError());
      return;
     }
  }
//+------------------------------------------------------------------+

现在一切都在正常调试模式 下工作。但在测试器中没有。它一直在那里写。

2019.09.10 07:16:49.867 2019.09.03 00:00:00   Error code: 4014