小额资金管理-指标被新的MQL4毁掉了 - 页 2 12345 新评论 mar 2014.04.02 06:14 #11 @deysmacro:我知道导致除以0 的那条线在哪里。这是因为我需要过去五天的日平均范围。后来在指标中我用ATR除以什么,只要数据不更新,ATR就是零,这就是问题所在。我需要确定至少过去5天的每日数据是可用的。只有这样,ATR才会>0,指标才会工作。 Syed Naufal Gaddafi 2014.04.02 06:29 #12 mar: @deysmacro:我知道导致除以0的那条线在哪里。这是因为我需要过去五天的日平均范围。在指标的后面,我用该ATR除以什么,只要数据不更新,ATR就是零,这就是问题所在。我需要确定至少过去5天的每日数据是可用的。只有这样,ATR才会>0,指标才会工作。 把可用的数据放到GV中,然后检索出来。这样,当有数据出现或数据有差异时,只需更新GV。 也许ATR就是这样工作的。 人们总是说 "先让它工作,然后优化代码"。 有时为了使其工作,代码的行数非常长,但一旦它工作,你可以开始修剪代码。) mar 2014.04.02 06:53 #13 也许这听起来很愚蠢,但什么是GV? Syed Naufal Gaddafi 2014.04.02 06:59 #14 全局变量 mar 2014.04.02 07:15 #15 当然... :-) 还有一些我无法解释的事情。下面的代码是对我发布的第一个代码的一个小修改。它也是一个资金管理指标,但我删除了ATR。它只打印5-100点的止损水平,以5个点为一个步骤。所以,根本就没有ATR计算。当你把这个指标拖到你的图表上时,它运行良好。每个货币对,每个时间框架。没有问题。但是,当你打开MetaTrader时,它会导致除以0的错误,并且再次只打印 "标签 "而不是止损水平。 这个错误是在这一行引起的。 lots=MoneyRisk/SL/(MarketInfo(Symbol(), MODE_TICKVALUE)*multi); 我打印了这一行的所有变量,我得出的结论是AccountBalance()是零,MarketInfo(Symbol(), MODE_TICKVALUE)是零。所以很明显,当你打开MetaTrader时,根本就没有数据可用。这在旧MetaTrader中从未发生过。所以我不知道该怎么做... 这里是代码。 #property indicator_chart_window //--- input parameters extern int Risk=5; extern int SL_Levels=20; int multi, exp1, SL, i, k; double MoneyRisk, Spread, modifySpread, lots; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators k=0; for(i=1; i<=SL_Levels; i++) { if (ObjectFind("SL"+i) == -1) { ObjectCreate("SL"+i, OBJ_LABEL, 0, 0, 0); ObjectSet("SL"+i, OBJPROP_CORNER, 1); ObjectSet("SL"+i, OBJPROP_XDISTANCE, 3); ObjectSet("SL"+i, OBJPROP_YDISTANCE, k); k=k+15; } } if (ObjectFind("Spread") == -1) { ObjectCreate("Spread", OBJ_LABEL, 0, 0, 0); ObjectSet("Spread", OBJPROP_CORNER, 3); ObjectSet("Spread", OBJPROP_XDISTANCE, 3); ObjectSet("Spread", OBJPROP_YDISTANCE, 1); } //-- 4 / 5 Digit Settings -- multi = 1; exp1 = 0; modifySpread = 1; if (Digits==5 || Digits==3) { modifySpread = 0.1; multi=10; exp1=1; } //---- SL = 10; //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- for(i=1; i<=SL_Levels; i++) { ObjectDelete("SL"+i); } ObjectDelete("Spread"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //---- Spread = MarketInfo(Symbol(), MODE_SPREAD)*modifySpread; MoneyRisk = AccountBalance()*Risk*0.01; k=0; Print(Spread); Print(AccountBalance()); Print(MoneyRisk); Print(MarketInfo(Symbol(), MODE_TICKVALUE)); Print(SL); Print(multi); for(i=1; i<=SL_Levels; i++) { lots=MoneyRisk/SL/(MarketInfo(Symbol(), MODE_TICKVALUE)*multi); ObjectSetText("SL"+i, SL+ " : "+DoubleToStr(lots, 2), 10, "Calibri", White); k=k+15; SL = SL+5; } SL = 10; ObjectSetText("Spread", Spread, 10, "Calibri", White); WindowRedraw(); //---- return(0); } //+------------------------------------------------------------------+ Syed Naufal Gaddafi 2014.04.02 07:31 #16 lots=MoneyRisk/SL/(MarketInfo(Symbol(), MODE_TICKVALUE)*multi); 你不知道数学计算的基本命令?我马上就知道问题出在哪里了。你的数学计算命令。 mar 2014.04.02 07:37 #17 你能不能说得更准确一点?它们到底有什么问题(因为它一直在工作...)? 我认为仍然存在一个问题,即我需要的MetaTrader的AccountBalance()和其他数据在启动平台后无法使用。 mar 2014.04.02 07:57 #18 另一个例子。 #property indicator_chart_window //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() //---- { Comment (AccountBalance()); //---- return(0); } //+------------------------------------------------------------------+ 如果你打开MetaTrader,结果将是零!而且一直是零,直到你改变时间框架或货币对。而且一直是零,直到你改变时间框架或货币对。我认为这正是除以零 错误的问题。你不也认为吗? Keith Watford 2014.04.02 08:00 #19 mar: 我打印了这一行的所有变量,我得出的结论是AccountBalance()是零,MarketInfo(Symbol(), MODE_TICKVALUE)是零。所以很明显,当你打开MetaTrader时,根本就没有任何数据可用。这在旧MetaTrader中从未发生过。所以我不知道该怎么做... 以下是代码。 如果你确定这是问题的原因,就在Start()后面加上这句话 if( MarketInfo(Symbol(), MODE_SPREAD)==0 || AccountBalance() == 0 ) return(0); mar 2014.04.02 08:09 #20 嘿,GumRai。 我用上面的指标进行了测试。即使我让MetaTrader运行几分钟,账户余额仍然是零。只有当我手动改变一些东西(货币对、时间框架)时,才会显示正确的账户余额。如果我使用你的解决方案,我没有除以零 的错误问题,但指标将永远不会做它的工作,因为AccountBalance保持为零。 我想知道我是否是唯一有这个问题的人?我认为这是新MetaTrader的一个普遍的数据导入问题... 12345 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
@deysmacro:我知道导致除以0的那条线在哪里。这是因为我需要过去五天的日平均范围。在指标的后面,我用该ATR除以什么,只要数据不更新,ATR就是零,这就是问题所在。我需要确定至少过去5天的每日数据是可用的。只有这样,ATR才会>0,指标才会工作。
把可用的数据放到GV中,然后检索出来。这样,当有数据出现或数据有差异时,只需更新GV。
也许ATR就是这样工作的。
人们总是说 "先让它工作,然后优化代码"。
有时为了使其工作,代码的行数非常长,但一旦它工作,你可以开始修剪代码。)
也许这听起来很愚蠢,但什么是GV?
当然... :-)
还有一些我无法解释的事情。下面的代码是对我发布的第一个代码的一个小修改。它也是一个资金管理指标,但我删除了ATR。它只打印5-100点的止损水平,以5个点为一个步骤。所以,根本就没有ATR计算。当你把这个指标拖到你的图表上时,它运行良好。每个货币对,每个时间框架。没有问题。但是,当你打开MetaTrader时,它会导致除以0的错误,并且再次只打印 "标签 "而不是止损水平。
这个错误是在这一行引起的。
我打印了这一行的所有变量,我得出的结论是AccountBalance()是零,MarketInfo(Symbol(), MODE_TICKVALUE)是零。所以很明显,当你打开MetaTrader时,根本就没有数据可用。这在旧MetaTrader中从未发生过。所以我不知道该怎么做...
这里是代码。
你能不能说得更准确一点?它们到底有什么问题(因为它一直在工作...)?
我认为仍然存在一个问题,即我需要的MetaTrader的AccountBalance()和其他数据在启动平台后无法使用。
另一个例子。
如果你打开MetaTrader,结果将是零!而且一直是零,直到你改变时间框架或货币对。而且一直是零,直到你改变时间框架或货币对。我认为这正是除以零 错误的问题。你不也认为吗?我打印了这一行的所有变量,我得出的结论是AccountBalance()是零,MarketInfo(Symbol(), MODE_TICKVALUE)是零。所以很明显,当你打开MetaTrader时,根本就没有任何数据可用。这在旧MetaTrader中从未发生过。所以我不知道该怎么做...
以下是代码。
如果你确定这是问题的原因,就在Start()后面加上这句话
嘿,GumRai。
我用上面的指标进行了测试。即使我让MetaTrader运行几分钟,账户余额仍然是零。只有当我手动改变一些东西(货币对、时间框架)时,才会显示正确的账户余额。如果我使用你的解决方案,我没有除以零 的错误问题,但指标将永远不会做它的工作,因为AccountBalance保持为零。
我想知道我是否是唯一有这个问题的人?我认为这是新MetaTrader的一个普遍的数据导入问题...