初学者的问题 MQL5 MT5 MetaTrader 5 - 页 441 1...434435436437438439440441442443444445446447448...1503 新评论 Aleksey Vyazmikin 2015.09.18 08:57 #4401 你能告诉我我做错了什么吗?我需要计算自价格最后一次穿越MA以来已经过去了多少个柱子 - 不包括零柱。 if(Bars>1400) { int Stop; double MATcycle; for(int i=0;i!=1000 || Stop!=1; i++) { MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i+1); if(MATcycle<High[i+1] && MATcycle>Low[i+1]) { Stop=1; Print("MATcycle=",MATcycle," i=",i); } else return (0); } [删除] 2015.09.18 09:31 #4402 -Aleks-:你能告诉我我做错了什么吗?你需要--计算自价格最后一次越过MA以来已经过去了多少个柱子--不包括零柱。 if(Bars>1400) { int Stop; double MATcycle; for(int i=0;i<1000 || Stop==1; i++) { MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i+1); if(MATcycle<High[i+1] && MATcycle>Low[i+1]) { Stop=1; Print("MATcycle=",MATcycle," i=",i); } else return (0); }据我所知,一旦你确定了交叉点并设置了stop=1,就会立即退出循环。好的,那么你需要更进一步,记住发生交叉的蜡烛的编号。I.e.自己写比较容易。for( int i = 1; i < 1000; i++ ) { iMaValue = ...; // Значение МА на i свече if( iMaValue < High[ i ] && iMaValue > low[ i ] ) { num = i; // Запоминаем номер свечи, на котором произошло пересечение break; // Выходим из цикла } }这是你已经确定了蜡烛的数量。如果这个数字=2,并且不考虑当前的,那么自交叉的一个蜡烛就形成了(或者随你的意思解释)。 Aleksey Vyazmikin 2015.09.18 10:17 #4403 Tapochun:据我所知,一旦你确定了交叉点并设置了止损=1,就会有一个立即退出的周期。好的,那么你需要更进一步,记住发生交叉的那根蜡烛的编号。I.e.自己写比较容易。这是你已经确定了蜡烛的数量。如果数字=2并忽略当前的数字,那么自交叉点以来已经形成了一根蜡烛(好吧,或者随你怎么解释)。谢谢你,这就是我的工作方式。int Stop=0; if(Bars>1400) { double MATcycle; for(int i=1;(i!=1000 || Stop==0); i++) { MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i); if(MATcycle<=High[i] && MATcycle>=Low[i]) { Print("MATcycle=",MATcycle," i=",i); Stop=i; break; } } } Ruslan Kuchma 2015.09.18 10:35 #4404 alph: 你能告诉我这是否是一个现实的试验品数字?而一年下来,3000元的去势,结果是好是坏呢? 答案很简单:如果你在测试一个EA,测试者的表现并不真实。策略测试仪 被交易者用来检查ATC的性能,或在线测试手动策略。 [删除] 2015.09.18 10:54 #4405 -Aleks-:谢谢你,我就是这么做的。int Stop=0; if(Bars>1400) { double MATcycle; for(int i=1;(i!=1000 || Stop==0); i++) { MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i); if(MATcycle<=High[i] && MATcycle>=Low[i]) { Print("MATcycle=",MATcycle," i=",i); Stop=i; break; } } }你不应该这样写,因为如果在最后1000个小节期间没有交叉,首先,循环将继续,其次,它可能会循环/出错,因为如果故事结束,没有交叉,将没有循环的出口,因为停止=0。按照我上面提到的方式写会更好。 Aleksey Vyazmikin 2015.09.18 12:35 #4406 Tapochun:你不应该这样写,因为如果在最后1000个柱子期间没有交叉,首先,循环将继续,其次,它可能会循环/出错,因为如果故事结束,没有交叉发生,将没有循环的出口,因为停止=0。按照我上面提到的方式写会更好。 or "符号不起作用--根据表达式,循环要么结束1000条,要么在找到所需结果后立即终止。还是在1000个柱子之前就结束了,如果出现所需的结果,即MA交叉? [删除] 2015.09.18 13:59 #4407 -Aleks-: "或 "字符号不起作用吗--条件中说,要么达到1000条,要么在找到所需结果后立即结束。还是在1000条之前就结束了,如果达到预期的结果,即穿越MA?||意味着如果括号中的至少一个条件为真,循环将重复进行。 因此,即使当i>=1000,但stop=0时,循环将继续进行,i将不断增加,这将导致不正确的MA值(万一它超出历史值)。而break操作符 则负责在找到所需结果时终止循环。 Aleksey Vyazmikin 2015.09.18 14:22 #4408 Tapochun:||意味着如果括号内的条件中至少有一个为真,循环将被重复,因此,即使当i>=1000,但stop=0时,循环将继续,i将继续递增,这将导致错误的MA值(如果历史上有一个异常值)。而break操作符 负责在找到所需结果时终止循环。 明白了,谢谢你的澄清!我以为其中一个条件会出错,然后循环就会停止......。 Николай Никитюк 2015.09.18 23:57 #4409 你好2015.09.19_02:13AM MSC。反正在ArrayResize()函数 中,编译器写道 与数组的大小相反 -- 无论你是否写int,都要用逗号。如果你不写int,它就会说:"-。 我已经改变了它,没有类型。我删除了&参考和方括号--它成功了! 警告:当它被正常写入时,--编译器写道:隐藏标识符 全局级别的声明。而当我在全局层面上删除标识符声明时,--写道 它写道:"错误,未声明的标识符。而我把数组High[]和Low[]改为HighP[]和LowP[]。不是 帮助。编译器写的是同样的东西。02:27 MSC.我附上一个屏幕截图文件。 附加的文件: 4juvbxf_7yy4ltx_mo3w58r551k.png 117 kb Vladimir Karputov 2015.09.19 02:16 #4410 Николай Никитюк:你好2015.09.19_02:13AM MSC。反正在ArrayResize()函数 中,编译器写道 与数组的大小相反 -- 无论你是否写int,都要用逗号。如果你不写int,它就会说:"-。 "没有类型。我还删除了&参考和方括号--这很有帮助! 警告:当它被正常写入时,--编译器写道:隐藏标识符 全局级别的声明。而当我在全局层面上删除标识符声明时,--写道 它写道:"错误,未声明的标识符。而我把数组High[]和Low[]改为HighP[]和LowP[]。不是 帮助。编译器写的是同样的东西。02:27 MSC.我将截图文件附在后面。 图片应该像这样插入:论坛:如何插入图片你根本不看你被建议的内容吗? 关于交易、自动交易系统和策略测试的论坛 初学者的问题 Karputov Vladimir, 2015.09.17 18:46ArrayResize 的拼写错误。应该是这样。//--- устанавливаю размеры массивов с запасом (reserve) ArrayResize(mrate,16,9); ArrayResize(maVal,16,9); ArrayResize(fVal,3,2); ArrayResize(zVal,3); 而为数组设置时间序列标志会是这样的。//--- массив максимальных цен баров ArraySetAsSeries(High,true); //--- ArraySetAsSeries(Low,true); 1...434435436437438439440441442443444445446447448...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你能告诉我我做错了什么吗?
我需要计算自价格最后一次穿越MA以来已经过去了多少个柱子 - 不包括零柱。
if(Bars>1400)
{
int Stop;
double MATcycle;
for(int i=0;i!=1000 || Stop!=1; i++)
{
MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i+1);
if(MATcycle<High[i+1] && MATcycle>Low[i+1])
{
Stop=1;
Print("MATcycle=",MATcycle," i=",i);
}
else return (0);
}
你能告诉我我做错了什么吗?
你需要--计算自价格最后一次越过MA以来已经过去了多少个柱子--不包括零柱。
if(Bars>1400)
{
int Stop;
double MATcycle;
for(int i=0;i<1000 || Stop==1; i++)
{
MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i+1);
if(MATcycle<High[i+1] && MATcycle>Low[i+1])
{
Stop=1;
Print("MATcycle=",MATcycle," i=",i);
}
else return (0);
}
据我所知,一旦你确定了交叉点并设置了stop=1,就会立即退出循环。好的,那么你需要更进一步,记住发生交叉的蜡烛的编号。I.e.
自己写比较容易。
这是你已经确定了蜡烛的数量。如果这个数字=2,并且不考虑当前的,那么自交叉的一个蜡烛就形成了(或者随你的意思解释)。
据我所知,一旦你确定了交叉点并设置了止损=1,就会有一个立即退出的周期。好的,那么你需要更进一步,记住发生交叉的那根蜡烛的编号。I.e.
自己写比较容易。
这是你已经确定了蜡烛的数量。如果数字=2并忽略当前的数字,那么自交叉点以来已经形成了一根蜡烛(好吧,或者随你怎么解释)。
谢谢你,这就是我的工作方式。
int Stop=0;
if(Bars>1400)
{
double MATcycle;
for(int i=1;(i!=1000 || Stop==0); i++)
{
MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i);
if(MATcycle<=High[i] && MATcycle>=Low[i])
{
Print("MATcycle=",MATcycle," i=",i);
Stop=i;
break;
}
}
}
你能告诉我这是否是一个现实的试验品数字?而一年下来,3000元的去势,结果是好是坏呢?
谢谢你,我就是这么做的。
int Stop=0;
if(Bars>1400)
{
double MATcycle;
for(int i=1;(i!=1000 || Stop==0); i++)
{
MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i);
if(MATcycle<=High[i] && MATcycle>=Low[i])
{
Print("MATcycle=",MATcycle," i=",i);
Stop=i;
break;
}
}
}
你不应该这样写,因为如果在最后1000个小节期间没有交叉,首先,循环将继续,其次,它可能会循环/出错,因为如果故事结束,没有交叉,将没有循环的出口,因为停止=0。按照我上面提到的方式写会更好。
你不应该这样写,因为如果在最后1000个柱子期间没有交叉,首先,循环将继续,其次,它可能会循环/出错,因为如果故事结束,没有交叉发生,将没有循环的出口,因为停止=0。按照我上面提到的方式写会更好。
"或 "字符号不起作用吗--条件中说,要么达到1000条,要么在找到所需结果后立即结束。还是在1000条之前就结束了,如果达到预期的结果,即穿越MA?
||意味着如果括号内的条件中至少有一个为真,循环将被重复,因此,即使当i>=1000,但stop=0时,循环将继续,i将继续递增,这将导致错误的MA值(如果历史上有一个异常值)。而break操作符 负责在找到所需结果时终止循环。
你好2015.09.19_02:13AM MSC。反正在ArrayResize()函数 中,编译器写道
与数组的大小相反 -- 无论你是否写int,都要用逗号。如果你不写int,它就会说:"-。
我已经改变了它,没有类型。我删除了&参考和方括号--它成功了!
警告:当它被正常写入时,--编译器写道:隐藏标识符
全局级别的声明。而当我在全局层面上删除标识符声明时,--写道
它写道:"错误,未声明的标识符。而我把数组High[]和Low[]改为HighP[]和LowP[]。不是
帮助。编译器写的是同样的东西。02:27 MSC.我附上一个屏幕截图文件。
你好2015.09.19_02:13AM MSC。反正在ArrayResize()函数 中,编译器写道
与数组的大小相反 -- 无论你是否写int,都要用逗号。如果你不写int,它就会说:"-。
"没有类型。我还删除了&参考和方括号--这很有帮助!
警告:当它被正常写入时,--编译器写道:隐藏标识符
全局级别的声明。而当我在全局层面上删除标识符声明时,--写道
它写道:"错误,未声明的标识符。而我把数组High[]和Low[]改为HighP[]和LowP[]。不是
帮助。编译器写的是同样的东西。02:27 MSC.我将截图文件附在后面。
关于交易、自动交易系统和策略测试的论坛
初学者的问题
Karputov Vladimir, 2015.09.17 18:46