如何编码? - 页 304 1...297298299300301302303304305306307308309310311...347 新评论 Mladen Rakic 2012.07.17 05:00 #3031 ... 1.一般来说,没有,检查它没有意义,因为大多数情况下,你会有比移动平均线 "稳定 "所需的多得多的条形。这不是一个旧的错误,而是对历史上有多少个条形的简单检查。 2.2.是的。请记住,由于iClose()(以及类似的iOpen()、iHigh()和iLow())是函数,而Close[]、Open、High[]、Low[]是一个简单的数组,对数值的访问快得多,所以你必须权衡你是否真的需要函数的灵活性而不是数组 的速度和简单的访问。 zzz: 你好,我是编程新手,但不是交易新手。我有一段时间没有发帖,现在,自从我开始开发我的EA,我有很多问题。我先从建立一个指标开始,一旦它达到我想要的效果,我就会进一步开发。我阅读了所有我能找到的手册,所以现在是时候让我继续编写代码了。对不起,如果这是个错误的主题--请让我知道我应该在哪里发布这样的问题。 我现在有两个,可能是基本的问题,请问。 1.在许多使用MAs的指标中,我看到了检查图表上有多少条的线条。那么,如果我需要MA200,而图表上只有,比如说,100条,那么iMA200能工作吗?我想是的--我检查过了,任何MA在任何图表上绘制都没有问题,所以我想这是Metaquotes现在修复的一个旧的错误。那么,在绘制MA或使用iMA功能时,是否有必要检查图表上有多少条? 2.2.Close和iClose之间有什么区别?我的理解是,Close只能返回当前图表上的收盘价,而iClose可以返回任何货币对和任何时间框架的任何收盘价。在这两种情况下,为了获得最后一个收盘条,我必须使用索引[1]。我的看法正确吗? 谢谢你。 gmailer 2012.07.17 06:16 #3032 MT4的DoubleStochastic,真正的DoubleStochastic 大家好--新的MT4用户。 我正在努力寻找MT4的DoubleStochastic指标。它是我在VTT平台上最喜欢的指标。我指的是真正的DoubleStochastic - 而不是Bressert DoubleStochastic,它提供的指示与原始DoubleStochastic完全不同。请看所附文件--VTT的Double与MT4的Double给出的指示有点不同。 有谁能帮我把VTT'2 DoubleStochastic编码到MT4中吗?以下是VTT代码和逻辑。 快速%K = ((今天的收盘价-%K期的最低价)/(%K期的最高价-%K期的最低价))* 100 慢速%K = 快速%K的N期移动平均值 双重%K = ((今天的慢速%K -%K期间的最低慢速%K) / (%K期间的最高慢速%K -%K期间的最低慢速%K))* 100 双倍慢速%K = 双倍%K的N期移动平均数 %D = 双倍慢速%K的3期简单移动平均数 以及代码本身。 St:=Mov(((C-LLV(L,K))/(HHV(H,K)-LLV(L,K)))*100, Sl,Mt); DSt:=Mov(((St-LLV(St,K))/(HHV(St,K)-LLV(St,K))*100,Sl,Mt); DStD:=Mov(DSt,D,MtD)。 有谁能流利地使用MT4? 我已经习惯了VTT的版本,以至于我无法使用其他版本。 How to code? Mladen Rakic 2012.07.17 08:25 #3033 ... gmailer 在这里发布了一个双重随机性:https://www.mql5.com/en/forum/177239/page28(为了把所有版本的随机性放在一个地方)。 我想这就是你要找的东西。 gmailer: 大家好--新的MT4用户。我正在努力寻找MT4的DoubleStochastic指标。它是我在VTT平台上最喜欢的指标。我指的是真正的DoubleStochastic--而不是Bressert Double Stochastic,后者提供的指示与原始DoubleStochastic完全不同。请看附件 - VTT的Double和MT4的Double给出的指示有点不同。 有谁能帮我把VTT'2 DoubleStochastic编码到MT4中吗?以下是VTT代码和逻辑。 快速%K = ((今天的收盘价-%K期的最低价)/(%K期的最高价-%K期的最低价))* 100 慢速%K = 快速%K的N期移动平均值 双重%K = ((今天的慢速%K -%K期间的最低慢速%K) / (%K期间的最高慢速%K -%K期间的最低慢速%K))* 100 双倍慢速%K = 双倍%K的N期移动平均数 %D = 双倍慢速%K的3期简单移动平均数 以及代码本身。 St:=Mov(((C-LLV(L,K))/(HHV(H,K)-LLV(L,K)))*100, Sl,Mt); DSt:=Mov(((St-LLV(St,K))/(HHV(St,K)-LLV(St,K))*100,Sl,Mt); DStD:=Mov(DSt,D,MtD)。 有谁能流利地使用MT4? 我已经习惯了VTT的版本,以至于我无法使用其他版本。 gmailer 2012.07.17 10:24 #3034 ^ 谢谢--这可能是它。你知道如何去掉底部和顶部的那些 "绿色和粉红色的点 "吗? [删除] 2012.07.17 10:52 #3035 谢谢你,这很有意义。 tkuan77 2012.07.17 10:52 #3036 大家好。 我正在努力寻找一种方法,当我的随机指标 线在超买(80)或超卖(20)区域内交叉时触发交易。我能够在我的线交叉时触发交易,但是我无法将其设置为只在超买或超卖区域时触发交易。有谁知道我怎样才能做到这一点,或者有什么其他地方可以参考吗? 我在一些网站上看到一些关于将一些数值设置为20.1和80.1的内容,但没有其他内容。 请帮助提供一些线索。谢谢。 谢谢 特伦斯 Mladen Rakic 2012.07.17 11:02 #3037 ... 特伦斯。 这里有一个主题,有一些实用的代码,可以作为你所需要的例子:https://www.mql5.com/en/forum/179114 tkuan77: 大家好。我正在努力寻找一种方法,当我的随机指数线在超买(80)或超卖(20)区域内交叉时触发交易。我能够在我的线交叉时触发交易,但是我无法将其设置为只在超买或超卖区域时触发交易。有谁知道我怎样才能做到这一点,或者有什么其他地方可以参考? 我在一些网站上看到一些关于将一些数值设置为20.1和80.1的内容,但没有其他内容。 请帮助提供一些线索。谢谢。 谢谢 特伦斯 [删除] 2012.07.17 15:04 #3038 你好,我已经纠正了功能,现在对它们很满意。看起来不错。然而,当我回溯测试 时,交易结果日志只包含一个买入订单。我认为这可能与我的GetLots函数有关,但我不是100%,尽管我看了好几遍--你能不能把你的目光投向它,如果你发现有什么不对,请告诉我?谢谢。 //---计算多头头寸手数的函数 double GetLotsLong (int LowRisk, int HighRisk, double SLDistanceLong, int LastOpenTicket, int LastTicket) { RefreshRates()。 双重MinLots, MaxLots, LotStep; int LotDigit = 2; double LotsLong = 0; MinLots = NormalizeDouble(MarketInfo(Symbol(), MODE_MINLOT), 2); // Lots需要被规范化以适应LotStep。 MaxLots = NormalizeDouble(MarketInfo(Symbol(), MODE_MAXLOT), 2); // 归一化并不是四舍五入,而是削减大于LotStep的任何部分。 LotStep = NormalizeDouble(MarketInfo(Symbol(), MODE_LOTSTEP), 2); // 这样风险就会小一点。 if (MarketInfo(Symbol(), MODE_DIGITS) == 3 || MarketInfo(Symbol(), MODE_DIGITS) == 5) SLDistanceLong *= 10.0; 如果(LotStep == 1.00) LotDigit = 0; 如果(LotStep == 0.10) LotDigit = 1; 如果(LotStep == 0.01) LotDigit = 2; 如果(GetWinLossPreviousLong (LastOpenTicket, LastTicket, WinLossPreviousLong) == "W") { 如果 (AccountBalance() > AccountFreeMargin()) LotsLong = NormalizeDouble(AccountFreeMargin() * (HighRisk / 100) / (SLDistanceLong * MarketInfo (Symbol(), MODE_TICKVALUE)), LotDigit) 。 否则 LotsLong = NormalizeDouble(AccountBalance() * (HighRisk / 100) / (SLDistanceLong * MarketInfo (Symbol(), MODE_TICKVALUE)), LotDigit); } LotsLong = NormalizeDouble(NormalizeDouble(LotsLong / LotStep, 0) * LotStep, LotDigit)。 LotsLong = MathMax(MathMin(LotsLong, MaxLots), MinLots)。 返回(LotsLong)。 如果(GetWinLossPreviousLong (LastOpenTicket, LastTicket, WinLossPreviousLong) == "L") { 如果(AccountBalance() > AccountFreeMargin()) LotsLong = NormalizeDouble(AccountFreeMargin() * (LowRisk / 100) / (SLDistanceLong * MarketInfo (Symbol(), MODE_TICKVALUE)), LotDigit) 。 否则 LotsLong = NormalizeDouble(AccountBalance() * (LowRisk / 100) / (SLDistanceLong * MarketInfo (Symbol(), MODE_TICKVALUE)), LotDigit); } LotsLong = NormalizeDouble(NormalizeDouble(LotsLong / LotStep, 0) * LotStep, LotDigit)。 LotsLong = MathMax(MathMin(LotsLong, MaxLots), MinLots)。 返回(LotsLong)。 } How to code? 需要编码方面的帮助 EA not working under Mladen Rakic 2012.07.17 15:39 #3039 ... 我发布的GetLots()的形式已经过测试,它可以正常工作。不需要对它进行任何改变。使用它作为一个函数,在开仓时确定手数。保留其余的逻辑(该函数应该只做这个:根据风险、止损和当前账户 状态找出订单大小)。 没有其他的代码,我无法帮助你。这就像我可以通过一个小洞看到整个世界一样。这是不可能的。如果你想对代码的其余部分保密,我所能帮助的就是你在这里发布的代码,我再重复一遍:请放心,原始形式的GetLots()可以正常工作,它应该以原始形式使用。 如果你想用可变的结果来使用它,请动态地改变风险或止损的输入(在GetLots()之前的代码中 "决定 "风险或止损,然后用这些改变的风险或止损来调用它--该函数将对给定的改变的输入进行正确计算),不需要改变该函数的代码 crsnape@btinternet.com: 你好,我已经纠正了这些函数,现在对它们很满意。看起来不错。然而,当我回测时,交易结果日志只包含一个买入订单。我认为这可能与我的GetLots函数有关,但尽管我看了好几遍,我还是不能百分之百的理解 - 你能不能把你的眼睛看一下,如果你发现有什么不对的地方,请告诉我?谢谢。//---计算多头头寸手数的函数 double GetLotsLong (int LowRisk, int HighRisk, double SLDistanceLong, int LastOpenTicket, int LastTicket) { RefreshRates()。 双重MinLots, MaxLots, LotStep; int LotDigit = 2; double LotsLong = 0; MinLots = NormalizeDouble(MarketInfo(Symbol(), MODE_MINLOT), 2); // Lots需要被规范化以适应LotStep。 MaxLots = NormalizeDouble(MarketInfo(Symbol(), MODE_MAXLOT), 2); // 归一化并不是四舍五入,而是削减大于LotStep的任何部分。 LotStep = NormalizeDouble(MarketInfo(Symbol(), MODE_LOTSTEP), 2); // 这样风险就会小一点。 if (MarketInfo(Symbol(), MODE_DIGITS) == 3 || MarketInfo(Symbol(), MODE_DIGITS) == 5) SLDistanceLong *= 10.0; 如果(LotStep == 1.00) LotDigit = 0; 如果(LotStep == 0.10) LotDigit = 1; 如果(LotStep == 0.01) LotDigit = 2; 如果(GetWinLossPreviousLong (LastOpenTicket, LastTicket, WinLossPreviousLong) == "W") { 如果 (AccountBalance() > AccountFreeMargin()) LotsLong = NormalizeDouble(AccountFreeMargin() * (HighRisk / 100) / (SLDistanceLong * MarketInfo (Symbol(), MODE_TICKVALUE)), LotDigit) 。 否则 LotsLong = NormalizeDouble(AccountBalance() * (HighRisk / 100) / (SLDistanceLong * MarketInfo (Symbol(), MODE_TICKVALUE)), LotDigit); } LotsLong = NormalizeDouble(NormalizeDouble(LotsLong / LotStep, 0) * LotStep, LotDigit)。 LotsLong = MathMax(MathMin(LotsLong, MaxLots), MinLots)。 返回(LotsLong)。 如果(GetWinLossPreviousLong (LastOpenTicket, LastTicket, WinLossPreviousLong) == "L") { 如果(AccountBalance() > AccountFreeMargin()) LotsLong = NormalizeDouble(AccountFreeMargin() * (LowRisk / 100) / (SLDistanceLong * MarketInfo (Symbol(), MODE_TICKVALUE)), LotDigit) 。 否则 LotsLong = NormalizeDouble(AccountBalance() * (LowRisk / 100) / (SLDistanceLong * MarketInfo (Symbol(), MODE_TICKVALUE)), LotDigit)。 } LotsLong = NormalizeDouble(NormalizeDouble(LotsLong / LotStep, 0) * LotStep, LotDigit)。 LotsLong = MathMax(MathMin(LotsLong, MaxLots), MinLots)。 返回(LotsLong)。 } [删除] 2012.07.17 19:04 #3040 Hi mladen 我完全同意你的观点,你提供的GetLots函数 确实在正常工作;我把它作为我的代码的一部分进行了测试,它很有效。 我对它进行了修改,只是因为我想根据我是赢还是输来改变我的风险 peramter。我基本上对现有的代码进行了阐述(或者说是尝试),加入了额外的资金管理规则。 我可以诚实地说,我的代码不是秘密;我相信许多其他人已经考虑并在代码中实现了我想做的事情;但我想有一个隐私的因素,因为我个人花了这么多时间开发它。 我将继续审查我的代码,我显然想尝试自己解决任何问题,因为我对从头开始学习和做事情感到自豪。 但我理解你的最后一段;我将使用一个'风险'变量,并在一个函数的输出上相应地改变这个风险。 总之,再次感谢你的回复,这个论坛没有你就不一样了,你已经帮助我无数次了。 干杯:-) 1...297298299300301302303304305306307308309310311...347 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
...
1.一般来说,没有,检查它没有意义,因为大多数情况下,你会有比移动平均线 "稳定 "所需的多得多的条形。这不是一个旧的错误,而是对历史上有多少个条形的简单检查。
2.2.是的。请记住,由于iClose()(以及类似的iOpen()、iHigh()和iLow())是函数,而Close[]、Open、High[]、Low[]是一个简单的数组,对数值的访问快得多,所以你必须权衡你是否真的需要函数的灵活性而不是数组 的速度和简单的访问。
你好,我是编程新手,但不是交易新手。我有一段时间没有发帖,现在,自从我开始开发我的EA,我有很多问题。我先从建立一个指标开始,一旦它达到我想要的效果,我就会进一步开发。我阅读了所有我能找到的手册,所以现在是时候让我继续编写代码了。
对不起,如果这是个错误的主题--请让我知道我应该在哪里发布这样的问题。
我现在有两个,可能是基本的问题,请问。
1.在许多使用MAs的指标中,我看到了检查图表上有多少条的线条。那么,如果我需要MA200,而图表上只有,比如说,100条,那么iMA200能工作吗?我想是的--我检查过了,任何MA在任何图表上绘制都没有问题,所以我想这是Metaquotes现在修复的一个旧的错误。那么,在绘制MA或使用iMA功能时,是否有必要检查图表上有多少条?
2.2.Close和iClose之间有什么区别?我的理解是,Close只能返回当前图表上的收盘价,而iClose可以返回任何货币对和任何时间框架的任何收盘价。在这两种情况下,为了获得最后一个收盘条,我必须使用索引[1]。我的看法正确吗?
谢谢你。MT4的DoubleStochastic,真正的DoubleStochastic
大家好--新的MT4用户。
我正在努力寻找MT4的DoubleStochastic指标。它是我在VTT平台上最喜欢的指标。我指的是真正的DoubleStochastic - 而不是Bressert DoubleStochastic,它提供的指示与原始DoubleStochastic完全不同。请看所附文件--VTT的Double与MT4的Double给出的指示有点不同。
有谁能帮我把VTT'2 DoubleStochastic编码到MT4中吗?以下是VTT代码和逻辑。
快速%K = ((今天的收盘价-%K期的最低价)/(%K期的最高价-%K期的最低价))* 100
慢速%K = 快速%K的N期移动平均值
双重%K = ((今天的慢速%K -%K期间的最低慢速%K) / (%K期间的最高慢速%K -%K期间的最低慢速%K))* 100
双倍慢速%K = 双倍%K的N期移动平均数
%D = 双倍慢速%K的3期简单移动平均数
以及代码本身。
St:=Mov(((C-LLV(L,K))/(HHV(H,K)-LLV(L,K)))*100, Sl,Mt);
DSt:=Mov(((St-LLV(St,K))/(HHV(St,K)-LLV(St,K))*100,Sl,Mt);
DStD:=Mov(DSt,D,MtD)。
有谁能流利地使用MT4?
我已经习惯了VTT的版本,以至于我无法使用其他版本。
...
gmailer
在这里发布了一个双重随机性:https://www.mql5.com/en/forum/177239/page28(为了把所有版本的随机性放在一个地方)。
我想这就是你要找的东西。
大家好--新的MT4用户。
我正在努力寻找MT4的DoubleStochastic指标。它是我在VTT平台上最喜欢的指标。我指的是真正的DoubleStochastic--而不是Bressert Double Stochastic,后者提供的指示与原始DoubleStochastic完全不同。请看附件 - VTT的Double和MT4的Double给出的指示有点不同。
有谁能帮我把VTT'2 DoubleStochastic编码到MT4中吗?以下是VTT代码和逻辑。
快速%K = ((今天的收盘价-%K期的最低价)/(%K期的最高价-%K期的最低价))* 100
慢速%K = 快速%K的N期移动平均值
双重%K = ((今天的慢速%K -%K期间的最低慢速%K) / (%K期间的最高慢速%K -%K期间的最低慢速%K))* 100
双倍慢速%K = 双倍%K的N期移动平均数
%D = 双倍慢速%K的3期简单移动平均数
以及代码本身。
St:=Mov(((C-LLV(L,K))/(HHV(H,K)-LLV(L,K)))*100, Sl,Mt);
DSt:=Mov(((St-LLV(St,K))/(HHV(St,K)-LLV(St,K))*100,Sl,Mt);
DStD:=Mov(DSt,D,MtD)。
有谁能流利地使用MT4?
我已经习惯了VTT的版本,以至于我无法使用其他版本。^ 谢谢--这可能是它。你知道如何去掉底部和顶部的那些 "绿色和粉红色的点 "吗?
谢谢你,这很有意义。
大家好。
我正在努力寻找一种方法,当我的随机指标 线在超买(80)或超卖(20)区域内交叉时触发交易。我能够在我的线交叉时触发交易,但是我无法将其设置为只在超买或超卖区域时触发交易。有谁知道我怎样才能做到这一点,或者有什么其他地方可以参考吗?
我在一些网站上看到一些关于将一些数值设置为20.1和80.1的内容,但没有其他内容。
请帮助提供一些线索。谢谢。
谢谢
特伦斯
...
特伦斯。
这里有一个主题,有一些实用的代码,可以作为你所需要的例子:https://www.mql5.com/en/forum/179114
大家好。
我正在努力寻找一种方法,当我的随机指数线在超买(80)或超卖(20)区域内交叉时触发交易。我能够在我的线交叉时触发交易,但是我无法将其设置为只在超买或超卖区域时触发交易。有谁知道我怎样才能做到这一点,或者有什么其他地方可以参考?
我在一些网站上看到一些关于将一些数值设置为20.1和80.1的内容,但没有其他内容。
请帮助提供一些线索。谢谢。
谢谢
特伦斯你好,我已经纠正了功能,现在对它们很满意。看起来不错。然而,当我回溯测试 时,交易结果日志只包含一个买入订单。我认为这可能与我的GetLots函数有关,但我不是100%,尽管我看了好几遍--你能不能把你的目光投向它,如果你发现有什么不对,请告诉我?谢谢。
//---计算多头头寸手数的函数
double GetLotsLong (int LowRisk, int HighRisk, double SLDistanceLong, int LastOpenTicket, int LastTicket)
{
RefreshRates()。
双重MinLots, MaxLots, LotStep;
int LotDigit = 2;
double LotsLong = 0;
MinLots = NormalizeDouble(MarketInfo(Symbol(), MODE_MINLOT), 2); // Lots需要被规范化以适应LotStep。
MaxLots = NormalizeDouble(MarketInfo(Symbol(), MODE_MAXLOT), 2); // 归一化并不是四舍五入,而是削减大于LotStep的任何部分。
LotStep = NormalizeDouble(MarketInfo(Symbol(), MODE_LOTSTEP), 2); // 这样风险就会小一点。
if (MarketInfo(Symbol(), MODE_DIGITS) == 3 || MarketInfo(Symbol(), MODE_DIGITS) == 5) SLDistanceLong *= 10.0;
如果(LotStep == 1.00) LotDigit = 0;
如果(LotStep == 0.10) LotDigit = 1;
如果(LotStep == 0.01) LotDigit = 2;
如果(GetWinLossPreviousLong (LastOpenTicket, LastTicket, WinLossPreviousLong) == "W")
{
如果 (AccountBalance() > AccountFreeMargin())
LotsLong = NormalizeDouble(AccountFreeMargin() * (HighRisk / 100) / (SLDistanceLong * MarketInfo (Symbol(), MODE_TICKVALUE)), LotDigit) 。
否则 LotsLong = NormalizeDouble(AccountBalance() * (HighRisk / 100) / (SLDistanceLong * MarketInfo (Symbol(), MODE_TICKVALUE)), LotDigit);
}
LotsLong = NormalizeDouble(NormalizeDouble(LotsLong / LotStep, 0) * LotStep, LotDigit)。
LotsLong = MathMax(MathMin(LotsLong, MaxLots), MinLots)。
返回(LotsLong)。
如果(GetWinLossPreviousLong (LastOpenTicket, LastTicket, WinLossPreviousLong) == "L")
{
如果(AccountBalance() > AccountFreeMargin())
LotsLong = NormalizeDouble(AccountFreeMargin() * (LowRisk / 100) / (SLDistanceLong * MarketInfo (Symbol(), MODE_TICKVALUE)), LotDigit) 。
否则 LotsLong = NormalizeDouble(AccountBalance() * (LowRisk / 100) / (SLDistanceLong * MarketInfo (Symbol(), MODE_TICKVALUE)), LotDigit);
}
LotsLong = NormalizeDouble(NormalizeDouble(LotsLong / LotStep, 0) * LotStep, LotDigit)。
LotsLong = MathMax(MathMin(LotsLong, MaxLots), MinLots)。
返回(LotsLong)。
}
...
我发布的GetLots()的形式已经过测试,它可以正常工作。不需要对它进行任何改变。使用它作为一个函数,在开仓时确定手数。保留其余的逻辑(该函数应该只做这个:根据风险、止损和当前账户 状态找出订单大小)。
没有其他的代码,我无法帮助你。这就像我可以通过一个小洞看到整个世界一样。这是不可能的。如果你想对代码的其余部分保密,我所能帮助的就是你在这里发布的代码,我再重复一遍:请放心,原始形式的GetLots()可以正常工作,它应该以原始形式使用。
如果你想用可变的结果来使用它,请动态地改变风险或止损的输入(在GetLots()之前的代码中 "决定 "风险或止损,然后用这些改变的风险或止损来调用它--该函数将对给定的改变的输入进行正确计算),不需要改变该函数的代码
你好,我已经纠正了这些函数,现在对它们很满意。看起来不错。然而,当我回测时,交易结果日志只包含一个买入订单。我认为这可能与我的GetLots函数有关,但尽管我看了好几遍,我还是不能百分之百的理解 - 你能不能把你的眼睛看一下,如果你发现有什么不对的地方,请告诉我?谢谢。
//---计算多头头寸手数的函数
double GetLotsLong (int LowRisk, int HighRisk, double SLDistanceLong, int LastOpenTicket, int LastTicket)
{
RefreshRates()。
双重MinLots, MaxLots, LotStep;
int LotDigit = 2;
double LotsLong = 0;
MinLots = NormalizeDouble(MarketInfo(Symbol(), MODE_MINLOT), 2); // Lots需要被规范化以适应LotStep。
MaxLots = NormalizeDouble(MarketInfo(Symbol(), MODE_MAXLOT), 2); // 归一化并不是四舍五入,而是削减大于LotStep的任何部分。
LotStep = NormalizeDouble(MarketInfo(Symbol(), MODE_LOTSTEP), 2); // 这样风险就会小一点。
if (MarketInfo(Symbol(), MODE_DIGITS) == 3 || MarketInfo(Symbol(), MODE_DIGITS) == 5) SLDistanceLong *= 10.0;
如果(LotStep == 1.00) LotDigit = 0;
如果(LotStep == 0.10) LotDigit = 1;
如果(LotStep == 0.01) LotDigit = 2;
如果(GetWinLossPreviousLong (LastOpenTicket, LastTicket, WinLossPreviousLong) == "W")
{
如果 (AccountBalance() > AccountFreeMargin())
LotsLong = NormalizeDouble(AccountFreeMargin() * (HighRisk / 100) / (SLDistanceLong * MarketInfo (Symbol(), MODE_TICKVALUE)), LotDigit) 。
否则 LotsLong = NormalizeDouble(AccountBalance() * (HighRisk / 100) / (SLDistanceLong * MarketInfo (Symbol(), MODE_TICKVALUE)), LotDigit);
}
LotsLong = NormalizeDouble(NormalizeDouble(LotsLong / LotStep, 0) * LotStep, LotDigit)。
LotsLong = MathMax(MathMin(LotsLong, MaxLots), MinLots)。
返回(LotsLong)。
如果(GetWinLossPreviousLong (LastOpenTicket, LastTicket, WinLossPreviousLong) == "L")
{
如果(AccountBalance() > AccountFreeMargin())
LotsLong = NormalizeDouble(AccountFreeMargin() * (LowRisk / 100) / (SLDistanceLong * MarketInfo (Symbol(), MODE_TICKVALUE)), LotDigit) 。
否则 LotsLong = NormalizeDouble(AccountBalance() * (LowRisk / 100) / (SLDistanceLong * MarketInfo (Symbol(), MODE_TICKVALUE)), LotDigit)。
}
LotsLong = NormalizeDouble(NormalizeDouble(LotsLong / LotStep, 0) * LotStep, LotDigit)。
LotsLong = MathMax(MathMin(LotsLong, MaxLots), MinLots)。
返回(LotsLong)。
}Hi mladen 我完全同意你的观点,你提供的GetLots函数 确实在正常工作;我把它作为我的代码的一部分进行了测试,它很有效。
我对它进行了修改,只是因为我想根据我是赢还是输来改变我的风险 peramter。我基本上对现有的代码进行了阐述(或者说是尝试),加入了额外的资金管理规则。
我可以诚实地说,我的代码不是秘密;我相信许多其他人已经考虑并在代码中实现了我想做的事情;但我想有一个隐私的因素,因为我个人花了这么多时间开发它。
我将继续审查我的代码,我显然想尝试自己解决任何问题,因为我对从头开始学习和做事情感到自豪。
但我理解你的最后一段;我将使用一个'风险'变量,并在一个函数的输出上相应地改变这个风险。
总之,再次感谢你的回复,这个论坛没有你就不一样了,你已经帮助我无数次了。
干杯:-)