我们是否要按当前仪器对所有货币对进行标准化处理?
dsma2 = NormalizeDouble(SMA[2] - SMA[3], _Digits); // 2-3 号站点的 MA dsma1 = NormalizeDouble(SMA[1] - SMA[2], _Digits); // 1-2 号站点的 MA
Valmars:
我们是否要按当前仪器对所有货币对进行标准化处理?
如何正确执行才不会出现警告?
在原始版本中是这样的:
int Digits_ = SymbolInfoInteger(Symbol_, SYMBOL_DIGITS) + 4;
dsma2 = NormalizeDouble(SMA[2] - SMA[3], Digits_); // 2-3 号站点的 MA
dsma1 = NormalizeDouble(SMA[1] - SMA[2], Digits_); // 1-2 号站点的 MA
AM2:
不发出警告的正确方法是什么?
原始版本是这样的:
+4 和它有什么关系?逻辑上应该是这样的
int Digits_ = SymbolInfoInteger(Symbol_, SYMBOL_DIGITS); dsma2 = NormalizeDouble(SMA[2] - SMA[3], Digits_); // 2-3 号站点的 MA dsma1 = NormalizeDouble(SMA[1] - SMA[2], Digits_); // 1-2 号站点的 MA
sergey1294:
谢谢,可以了!
如果不想收到警告,就必须这样转换。
bdwezensky:
request.volume = Money_M();
这套 EA 是代码井井有条的典范,而且有很好的注释。 但我有一个问题,关于您的手数大小函数 Money_M()。 这背后的决策树是什么,在哪里?
我试着在支持网站上搜索,但没有找到任何参考资料,而且似乎也没有链接到相关的类。
double Money_M() { double Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000*10; Lots=MathMin(5,MathMax(0.1,Lots)); if(Lots<0.1) Lots=NormalizeDouble(Lots,2); else { if(Lots<1) Lots=NormalizeDouble(Lots,1); else Lots=NormalizeDouble(Lots,0); } return(Lots); }
该函数用于计算交易手数的大小。
double Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000*10;
在这个字符串中,计算的是交易手数的大小。计算以可用资金(ACCOUNT_FREEMARGIN) 为基础。风险 = 可用自由资金的 10%。
Lots=MathMin(5,MathMax(0.1,Lots));在这一行中,执行交易手数的标准化。0.1 <= 手数 <= 5.0
Multik:
多币种EA交易.
作者: Andrew Kornishkin