初学者的问题 MQL5 MT5 MetaTrader 5 - 页 440 1...433434435436437438439440441442443444445446447...1503 新评论 Николай Никитюк 2015.09.17 16:37 #4391 你好 2015.09.17_19:07GMT+3 .我已经在EA程序中设置了动态数组的尺寸。而编译器却给出了错误。"预期的逗号"。而如果程序文本中有一个变量,--会给出警告:"变量这样那样隐藏了全局级别的变量声明"。我不明白。一切似乎都是正确的,就像在帮助中一样。这里有一些代码片断。 //-----------------最大条形价格数组 bool ArraySetAsSeries(double &High[],bool)。 //--- bool ArraySetAsSeries(double &Low[],bool); int ArrayResize(double &mrate[],int 16,int 9); int ArrayResize(double &maVal[],int 16,int 9); int ArrayResize(double &fVal[],int 3,int 2); int ArrayResize(double &zVal[],int 3,int 0); int ArrayResize(double &High[],int 1,int 0); int ArrayResize(double &Low[],int 1,int 0); //+------------------------------------------------------------------+ //|专家去初始化函数| //+------------------------------------------------------------------+ 空白的OnDeinit(const int reason)。//--- массив максимальных цен баров bool ArraySetAsSeries(double &High[],bool); //--- bool ArraySetAsSeries(double &Low[],bool); //--- устанавливаю размеры массивов с запасом (reserve) int ArrayResize(double &mrate[],int 16,int 9); int ArrayResize(double &maVal[],int 16,int 9); int ArrayResize(double &fVal[],int 3,int 2); int ArrayResize(double &zVal[],int 3,int 0); int ArrayResize(double &High[],int 1,int 0); int ArrayResize(double &Low[],int 1,int 0); //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { { Questions from Beginners MQL5 来自一个 "傻瓜 "的问题 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. Vladimir Karputov 2015.09.17 16:46 #4392 Николай Никитюк:你好 2015.09.17_19:07GMT+3 .我已经在EA程序中设置了动态数组的尺寸。而编译器却给出了错误。"预期的逗号"。而如果在程序文本中,有 你不能用High[]和Low[]的名字声明数组,因为这些是数组-时间序列的保留系统名称。 ArrayResize 的拼写错误。应该是这样的。//--- устанавливаю размеры массивов с запасом (reserve) ArrayResize(mrate,16,9); ArrayResize(maVal,16,9); ArrayResize(fVal,3,2); ArrayResize(zVal,3); 而为一个数组设置时间序列标志,看起来像这样。//--- массив максимальных цен баров ArraySetAsSeries(High,true); //--- ArraySetAsSeries(Low,true); Николай Никитюк 2015.09.17 16:47 #4393 2015.09.17_19:45 gmt+3.附上一个.png文件,以备不时之需。 附加的文件: srtdaietpv_0hs8ag_vx918u.png 114 kb Николай Никитюк 2015.09.17 16:54 #4394 Karputov Vladimir:你不能用High[]和Low[]的名字声明数组,因为这些是为时间流数组保留的系统名称。 ArrayResize 的拼写错误。它应该这样写。 谢谢你!你这么快就回答了。我在晚上8点出去。我以后再看其他的。19:54 MSC。 Aleksey Vyazmikin 2015.09.17 17:43 #4395 Karputov Vladimir: 如果你指的是我的代码--那么是的,我的代码正在检查一个新条。 我对我附上的代码感兴趣--我想了解它的作用。 Vladimir Karputov 2015.09.17 19:30 #4396 -Aleks-: 我对我所附的代码感兴趣--我想了解它的作用。你给的代码什么也没做,或者说它不起作用。错误。if(TimeN==0) TimeN=TimeC;这个条件只起一次作用--在你第一次运行程序的时候。在这一点上,静态变量 将被初始化。下面的条件根本没有检查的意义,因为你的代码中的变量TimeN将等于永恒的零(或者说是1970年1月1日的日期),这个永恒的零将与变量TimeC相比较,后者等于当前条形图的打开时间)。 if(TimeN==TimeC) return; Aleksey Vyazmikin 2015.09.17 21:04 #4397 Karputov Vladimir:你给的代码什么也没做,或者说它不起作用。错误。这个条件只起一次作用--在你第一次运行程序的时候。在这一点上,静态变量 将被初始化。下面的条件根本没有检查的意义,因为你的代码中的变量TimeN将等于永恒的零(或者说它将是1970年1月1日的日期),这个永恒的零将与变量TimeC相比较,后者等于当前条形的开盘时间)。现在我想知道为什么我应该写它......进入专家顾问。谢谢你的澄清! Aleksey Vyazmikin 2015.09.17 22:24 #4398 Karputov Vladimir:如果新的条形图是在M1时间框架上,那么就打印该信息。结果发现我没有给出完整的代码,正确的代码是 int init() { static datetime TimeN=0; return(INIT_SUCCEEDED); } int start() { datetime TimeC=iTime(NULL,TF,0); if(TimeN==0)TimeN=TimeC; if(TimeN==TimeC) return(0); TimeN=TimeC; // Код программы исполняется при появлении нового бара return(INIT_SUCCEEDED); } 在这种情况下,它是有效的,对吗? Vladimir Karputov 2015.09.18 03:45 #4399 -Aleks-:结果发现我没有给出完整的代码,正确的代码是 int init() { static datetime TimeN=0; return(INIT_SUCCEEDED); } int start() { datetime TimeC=iTime(NULL,TF,0); if(TimeN==0)TimeN=TimeC; if(TimeN==TimeC) return(0); TimeN=TimeC; // Код программы исполняется при появлении нового бара return(INIT_SUCCEEDED); } 在这种情况下,它是有效的,对吗? 你是否尝试过编译这段代码?这里有一个错误:TimeN变量是在OnInit()中声明的,当你退出OnInit()时,这个变量将被销毁。 这就是为什么在OnTick()函数 中出现了一个错误'TimeN' - undeclared identifier下面是工作代码。//+------------------------------------------------------------------+ //| Test.mq4 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- static datetime TimeN; datetime TimeC=iTime(NULL,PERIOD_M1,0); if(TimeN==TimeC) return; TimeN=TimeC; // новый бар, выполняем код Print("New bar"); return; } //+------------------------------------------------------------------+ Aleksey Vyazmikin 2015.09.18 05:47 #4400 Karputov Vladimir: 你是否尝试过编译这段代码?这里有一个错误:变量TimeN是在OnInit()中声明的,这个变量将在退出OnInit()时被销毁。 因此,在OnTick()函数 中出现了一个错误 以下是工作代码。我在int OnInit() 之前的区域写了static datetime TimeN=0;,在这里声明了外部变量和其他变量。 1...433434435436437438439440441442443444445446447...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你好 2015.09.17_19:07GMT+3 .我已经在EA程序中设置了动态数组的尺寸。而编译器却给出了错误。"预期的逗号"。而如果程序文本中有一个变量,--会给出警告:"变量这样那样隐藏了全局级别的变量声明"。我不明白。一切似乎都是正确的,就像在帮助中一样。这里有一些代码片断。
//-----------------最大条形价格数组
bool ArraySetAsSeries(double &High[],bool)。
//---
bool ArraySetAsSeries(double &Low[],bool);
int ArrayResize(double &mrate[],int 16,int 9);
int ArrayResize(double &maVal[],int 16,int 9);
int ArrayResize(double &fVal[],int 3,int 2);
int ArrayResize(double &zVal[],int 3,int 0);
int ArrayResize(double &High[],int 1,int 0);
int ArrayResize(double &Low[],int 1,int 0);
//+------------------------------------------------------------------+
//|专家去初始化函数|
//+------------------------------------------------------------------+
空白的OnDeinit(const int reason)。
{
你好 2015.09.17_19:07GMT+3 .我已经在EA程序中设置了动态数组的尺寸。而编译器却给出了错误。"预期的逗号"。而如果在程序文本中,有
如果你指的是我的代码--那么是的,我的代码正在检查一个新条。
我对我所附的代码感兴趣--我想了解它的作用。
你给的代码什么也没做,或者说它不起作用。错误。
这个条件只起一次作用--在你第一次运行程序的时候。在这一点上,静态变量 将被初始化。
下面的条件根本没有检查的意义,因为你的代码中的变量TimeN将等于永恒的零(或者说是1970年1月1日的日期),这个永恒的零将与变量TimeC相比较,后者等于当前条形图的打开时间)。
你给的代码什么也没做,或者说它不起作用。错误。
这个条件只起一次作用--在你第一次运行程序的时候。在这一点上,静态变量 将被初始化。
下面的条件根本没有检查的意义,因为你的代码中的变量TimeN将等于永恒的零(或者说它将是1970年1月1日的日期),这个永恒的零将与变量TimeC相比较,后者等于当前条形的开盘时间)。
现在我想知道为什么我应该写它......进入专家顾问。
谢谢你的澄清!
如果新的条形图是在M1时间框架上,那么就打印该信息。
结果发现我没有给出完整的代码,正确的代码是
int init()
{
static datetime TimeN=0;
return(INIT_SUCCEEDED);
}
int start()
{
datetime TimeC=iTime(NULL,TF,0);
if(TimeN==0)TimeN=TimeC;
if(TimeN==TimeC) return(0);
TimeN=TimeC;
// Код программы исполняется при появлении нового бара
return(INIT_SUCCEEDED);
}
结果发现我没有给出完整的代码,正确的代码是
int init()
{
static datetime TimeN=0;
return(INIT_SUCCEEDED);
}
int start()
{
datetime TimeC=iTime(NULL,TF,0);
if(TimeN==0)TimeN=TimeC;
if(TimeN==TimeC) return(0);
TimeN=TimeC;
// Код программы исполняется при появлении нового бара
return(INIT_SUCCEEDED);
}
下面是工作代码。
你是否尝试过编译这段代码?这里有一个错误:变量TimeN是在OnInit()中声明的,这个变量将在退出OnInit()时被销毁。 因此,在OnTick()函数 中出现了一个错误
以下是工作代码。
我在int OnInit() 之前的区域写了static datetime TimeN=0;,在这里声明了外部变量和其他变量。