错误、漏洞、问题 - 页 2898

 

给开发者的信息。Python脚本在某些情况 下通过copy_rates_from_pos 接收数据时挂起。

让我解释一下这种情况。经纪人有大约4千种工具。
我通过搜索和过滤,按照一定的规则,对乐器进行初级选择。

在终端中的一个工具上没有历史记录(即在市场观察和符号列表中,该工具是存在的,但数据是空的)。

当试图执行脚本时。rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1,1, analysis_days),
脚本就挂了。尝试或检查无也没有用,因为错误本身并没有发生,一切都挂在这一行。

如果我尝试执行:Rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1,0, analysis_days),
,即指定从0开始的条数,它不会挂起,而是返回一个空表。

补遗。当我通过copy_rates_from_pos检索数据时,我也发现了一个类似的问题,要求的条数比历史记录中的条数多。脚本也会挂起。第二项请求不存在这种错误。这就是为什么似乎很难重复这个错误(也许,只有通过删除该符号的整个历史记录)。

我可能是错的,或者遗漏了什么,但这似乎是一个错误,因为这个函数要么返回数据,要么出错。

 
Alexander Mikheev:

亲爱的开发者,如果我搞错了或没有考虑到什么,请纠正我。

你是否希望有人花时间根据你的数据编写源代码,并在不同的交易服务器上进行测试?

这是不可能的。尊重他人的时间:充分提供重现问题的数据--来源、服务器、机器配置等等。


资料来源简明扼要,并带有评论,这样你就不会浪费时间去解析那里写了什么。告诉你想得到什么,你得到了什么。

 
fxsaber:

一个受密码保护的ZIP档案。

在MQL中是否支持锁定的档案?

 
Stanislav Korotky:

在MQL中是否支持锁定的档案?

我不知道。

 
suncrypto:

给开发者的信息。Python脚本在某些情况 下通过copy_rates_from_pos 接收数据时挂起。

让我解释一下这种情况。经纪人有大约4千种工具。
我通过搜索和过滤,按照一定的规则,对乐器进行初级选择。

在终端中的一个工具上没有历史记录(即在市场观察和符号列表中,该工具是存在的,但数据是空的)。

当试图执行脚本时。rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1,1, analysis_days),
脚本就挂了。尝试或检查无也没有用,因为错误本身并没有发生,一切都挂在这一行上。

如果我尝试执行:Rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1,0, analysis_days),
,即指定从0开始的条数,它不会挂起,而是返回一个空表。

补遗。当我通过copy_rates_from_pos检索数据时,我也发现了一个类似的问题,要求的条数比历史记录中的条数多。脚本也会挂起。第二项请求不存在这种错误。这就是为什么似乎很难重复这个错误(也许,只有通过删除该符号的整个历史记录)。

也许我搞错了什么,或者遗漏了什么,但这似乎是一个错误,因为这个函数必须要么返回数据,要么出错。

复制,更正。

 
TesterHideIndicators(false)已经停止工作。
 
suncrypto:

给开发者的信息。Python脚本在某些情况 下通过copy_rates_from_pos 接收数据时挂起。

让我解释一下这种情况。经纪人有大约4千种工具。
我通过搜索和过滤,按照一定的规则,对乐器进行初级选择。

在终端中的一个工具上没有历史记录(即在市场观察和符号列表中,该工具是存在的,但数据是空的)。

当试图执行脚本时。rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1,1, analysis_days),
脚本就挂了。尝试或检查无也没有用,因为错误本身并没有发生,一切都挂在这一行上。

如果我尝试执行:Rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1,0, analysis_days),
,即指定从0开始的条数,它不会挂起,而是返回一个空表。

补遗。当我通过copy_rates_from_pos检索数据时,我也发现了一个类似的问题,要求的条数比历史记录中的条数多。脚本也会挂起。第二项请求不存在这种错误。这就是为什么似乎很难重复这个错误(也许,只有通过删除该符号的整个历史记录)。

我可能是错的,或者遗漏了什么,但这似乎是一个错误,因为这个函数应该要么返回数据,要么出错。

已修复,将在下一个测试版中出现
 
Aleksey Vyazmikin:
TesterHideIndicators(false)停止工作。

TesterHideIndicator为之后创建的指标设置可见性标志

它不会改变以前创建的指标的可见性标志

你可以向以下专家查询

//+------------------------------------------------------------------+
//|                                     TestTesterHideIndicators.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

int ExtHandleMacd;
int ExtHandleEma;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   TesterHideIndicators(true);
   ExtHandleMacd=iMACD(NULL,0,12,26,9,PRICE_CLOSE);
   TesterHideIndicators(false);
   ExtHandleEma=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  }
//+------------------------------------------------------------------+

在可视化工具和简单测试后打开的图表中,MACD指标 不可见,移动平均线可见。

因此,它的工作原理与预期一致

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Комбинация флагов видимости объекта определяет таймфреймы графика, на которых объект отображаем. Для установки/получения значения свойства OBJPROP_TIMEFRAMES можно использовать функции ObjectSetInteger()/ObjectGetInteger...
 
DMITRII PECHERITSA:
错误 - 指针的操作不一致 (5.00, 2650)

编译错误。有什么想法吗?



明确地使用解除引用的语句

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   C201022_090654 c_1(* new C201022_090641); //works
   C201022_090654 c_3(* new C201022_092325(1)); //works
//---'new' - parameter passed as reference, variable expected
   C201022_090654 c_2(* new C201022_090641(1)); //not works
                      ^
  }
 

A100:
Ошибка при компиляции:

typedef void (*fn)();
void f() {}
fn g() { return f; }
oid OnStart()
{
        g()(); //Error: ')' - expression expected
}

以前研究过这个问题,这是我的发现。

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

虫子,虫子,问题

Sergey Dzyublik, 2020.04.04 21:46

Bug MT5(build 2375)在通过函数的指针调用函数时出现编译错误,当使用一个函数的指针数组时:

#define  PRINT(x) ; Print(#x, ":", string(x))

void test(){
   PRINT(__FUNCSIG__);
}

template<typename T>
void call(T f_ptr){
   f_ptr();
}


template<typename T>
class A{
public:
   T arr_1[1];
   
   typedef void (*ff)();
   ff arr_2[1];  
   
   
   T test_1(){
      return arr_1[0];
   } 
   
   ff test_2(){
      return arr_2[0];
   } 
   
   T operator[](int index){
      return arr_1[index];
   }
};

void OnStart(){
   typedef void (*ff)();
   ff arr[1];
   arr[0] = test;   
   
   ff f_ptr = arr[0];
   f_ptr();             //Ok
   call(arr[0]);        //Ok
   arr[0]();            //Compile Error: ')' - expression expected   
   
   
   A<ff> a;             
   a.arr_1[0] = test;
   a.arr_2[0] = test;
   
   
   a.arr_1[0]();        //Compile Error: ')' - expression expected   
   a.arr_2[0]();        //Compile Error: ')' - expression expected   
   
   a.test_1()();        //Compile Error: ')' - expression expected   
   a.test_2()();        //Compile Error: ')' - expression expected   
   
   a[0]();              //Ok ???
}