自动计算批量大小的功能? - 页 3

 

啊,我知道问题所在了......你把脚本设置成了 "买入 "订单,而没有把外部变量改为 "买入止损"......这就是为什么它下的是市价订单。

从你的帖子来看。

2010.11.04 20:37:53 Assisted_Order_Script_2010.11.01 EURJPY,H1 inputs:Order_Type="BUY"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;

尝试买入止损。


我在2300美元的模拟账户 上得到了0.12手的EURJPY。

2010.11.04 20:10:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: open #155713274 buy stop 0.12 EURJPY at 115.840 sl: 115.689 tp: 115.885 ok
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: attempted OP_BUYSTOP 0.12000000 lots @115.84000000 sl:115.68900000 tp:115.88500000
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: 当前 EquityAtRisk = $22.44 and Current Lotsize = 0.12 and Profit Target = 6.69 for a 0.3:1 Profit:Loss ratio
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: 最大允许风险资产=23.00美元和最大计算手数=0.123
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1输入。Order_Type="BUY STOP"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;
 

我还做了NZDJPY买入止损的例子。

2010.11.04 20:14:16 Assisted_Order_Script_2010.11.01 NZDJPY,H1: open #155714279 buy stop 0.10 NZDJPY at 64.319 sl: 64.134 tp: 64.460 ok<br / translate="no"> 2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: attempted OP_BUYSTOP 0.10000000 lots @64.31900000 sl:64.13400000 tp:64.46000000
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: Current EquityAtRisk = $22.90 and Current Lotsize = 0.1 and Profit Target = $17.45 for a 0.8:1 Profit:Loss ratio
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1:允许的最大风险资产=23.00美元,最大计算手数=0.1004
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1输入。Order_Type="BUY STOP"; OpenBidPrice=64.297; StopLossBidPrice=64.134; TakeProfitBidPrice=64.46; MaxPercentEquityAtRisk=1; MinLotOverRide=false;

现在,试图进入的订单价格64.297太接近目前的市场价格,所以orderreliable例程为此将进入价格移至64.319,但我仍然得到了一个合理的0.10手的大小。

在这一点上,我不得不得出结论,你的代码在如何实现包含文件和/或如何使用输出方面存在一些问题。 你必须上传代码让我检查,以便我进一步追问。

 

是的,这是一个以美元计价的模拟账户,杠杆率为1:100。好的,我刚刚在欧元兑日元上运行了买入止损,看起来这次我们得到了好的数据。专家日志说。


2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: 删除
2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: uninit reason 0
2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: open #155719095 buy stop 0.11 EURJPY at 115.843 sl: 115.689 tp: 115.885 ok
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: attempted OP_BUYSTOP 0.11000000 lots @115.84300000 sl:115.68900000 tp:115.88500000
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: Current EquityAtRisk = $20.95 and Current Lotsize = 0.11 and Profit Target = 5.71 for a 0.3:1 Profit:Loss ratio
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: 最大允许风险资产=22.73美元,最大计算手数=0.1193
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1输入。Order_Type="BUY STOP"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;
2010.11.04 21:36:23 Assisted_Order_Script_2010.11.01 EURJPY,H1: 载入成功
2010.11.04 21:34:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: 删除
2010.11.04 21:34:11 Assisted_Order_Script_2010.11.01 EURJPY,H1:加载成功



......它把待定的买入止损单放在0.11手。是的,我想我的代码中有些东西是 "错误的",如你所说......笑。不过我在输入你的代码时非常小心......可能是什么原因。好吧,我在这里做一些调试,然后再告诉你。对不起,打扰你了,菲利普。


谢谢

肖恩

 

我应该用你刚刚发布的新版本重新开始吗,菲利普?


肖恩

 

使用最新的是有意义的,我是。

 

嗨,菲利普,我正准备再次对我的EA做手术,升级到你几天前发布的最新版本,但在再次阅读了那个帖子后......它给我留下了相当多的问题。我想在我撕毁我的EA之前,我应该先问问你。


(1) 你提到有两个新的包含文件。


Analyze_Currency_Symbol_2010.10.29.mqh (34.54 KB)

Trade_Position_Management_2010.10.29.mqh (26.68 KB)


... 旧的StopLoss_Manager_2010.05.24.mqh怎么办?那个文件在你的新版本中完全不需要了?


(2) 你说的地方。


"第2步:在你的EA顶部添加以下内容,这样它就可以访问附件文件中的调用函数

#include <OrderReliable_2010.10.12.mqh>.

#include <Trade_Position_Management_2010.10.29.mqh>"


...这是一个新版本还是OrderReliable?我正在使用LibOrderReliable.mqh。这有什么变化吗?另外,我们是不是也需要包括新的Analyze_Currency_Symbol_2010.10.29.mqh文件?


(3) 在这一行代码中,你说在使用你的新版本时要添加。


double CurrentLotSize=LotSize(CurrentEquityAtRisk,OpenPrice_ND,StopLossPrice_ND, CurrentOrderType)。


... 什么是OpenPrice_ND和StopLossPrice_ND?这些变量是需要我声明的,还是嵌入在你的include文件中的某个地方?另外,在你这个新版本的LotSize函数中,参数的数量和顺序都有很大的变化,是吗?在你以前的版本中,对LotSize的调用是。


CurrentLotSize=LotSize(CurrentEquityAtRisk,CurrentStopLossPrice,CurrentOrderType,CurrentSymbolType,CurrentCounterPairForCross)。


(4) 我注意到在我使用你以前的版本的代码中,我指定了CurrentOrderType=OP_BUY;实际上,我在做一个买入止损单。那会有什么不同吗?



对不起,缠着你,但我只是对这些事情有点迷惑不解。


谢谢

肖恩

 

(1) You mention there's 2 new include files:


Analyze_Currency_Symbol_2010.10.29.mqh (34.54 KB)

Trade_Position_Management_2010.10.29.mqh (26.68 KB)


...那旧的StopLoss_Manager_2010.05.24.mqh呢?那个文件在你的新版本中完全不需要了?


我真的不确定为什么要在我的原帖中加入这部分内容,只是为了确保终端用户有一套完整的文件可供借鉴。

我个人使用该止损管理器的更新版本,但它与本主题没有关系,你应该实现你喜欢使用的任何止损程序。 我在这个主题中上传的代码并不依赖于止损包含文件,但它确实依赖于你正确设置你的代码来识别止损价格,以便你可以将其发送到 equityatrisk调用函数

(2) 你说的地方。


"第2步:在你的EA顶部添加以下内容,以便它可以访问附件文件中包含的调用函数

#包括<OrderReliable_2010.10.12.mqh>。

#include <Trade_Position_Management_2010.10.29.mqh>" 。


...这是新版本还是OrderReliable?我正在使用LibOrderReliable.mqh。这有什么变化吗?另外,我们是不是也需要包括新的Analyze_Currency_Symbol_2010.10.29.mqh文件?

这是一个新的版本,我把它的链接贴在了本主题第一页底部的帖子底部(我想链接到它,但搜索被破坏了,唉!)。

我修改了新的版本,使它能透明地与ECN型经纪商一起工作。 通过orderendreliable发送你的订单,不管经纪人是否接受市场订单的SL和TP,orderreliable脚本都会为你处理。

(3) 在这一行代码中,你说在使用你的新版本时要添加。


double CurrentLotSize=LotSize(CurrentEquityAtRisk,OpenPrice_ND,StopLossPrice_ND, CurrentOrderType)。


... 什么是OpenPrice_ND和StopLossPrice_ND?这些变量是需要我声明的,还是嵌入在你的include文件中的某个地方?另外,在你这个新版本的LotSize函数中,参数的数量和顺序都有很大的变化,是吗?在你以前的版本中,对LotSize的调用是。

是的,这些都是变量,你需要在你的代码中的某个点声明,并给它们分配你开立新头寸的市场价格(OpenPrice_ND)和止损价格(StopLossPrice_ND)。

另外,你也可以用你已经使用的变量重新命名我的变量。 把这些变量看作是占位符,在适当的地方替代你的变量。

(4) 我注意到在我使用你以前的版本的代码中,我分配了CurrentOrderType=OP_BUY;实际上,我在做一个买入止损订单。这有什么不同吗?
这没有什么区别。 所有重要的是,你正确地将订单类型传递给各自的调用函数。 它们已经被编码为根据订单类型做正确的事情。 如果你没有向调用函数发送正确的订单类型,那么你肯定会从调用函数本身得到无效的结果。

这些都是很好的问题,如果你不问,那么你就不能指望自己能学会;)
 
1005phillip:

我真的不知道为什么要在我的原帖中加入这部分内容,只是为了确保最终用户有一套完整的文件可以借鉴。

我个人使用该止损管理器的更新版本,但它与本主题没有关系,你应该实现你喜欢使用的任何止损程序。 我在这个主题中上传的代码并不依赖于止损包含文件,但它确实依赖于你正确设置你的代码来识别止损价格,以便你可以将其发送到 equityatrisk 调用函数。



>> 好的!得到了我自己的止损,所以我不需要这个--将删除它!



这是一个新的版本,我在本主题第一页底部的帖子中贴出了它的链接(我想链接到它,但搜索被破坏了,唉!)。

我修改了新的版本,使它能透明地与ECN型经纪商一起工作。 通过ordersendreliable发送你的订单,而且不管经纪人是否接受市场订单的SL和TP,orderreliable脚本都会为你处理。


>> 好吧,我已经在使用OrderSendReliable2Step了,所以我就把我的代码保持原样,使用我现有的LibOrderReliable.mqh。不过,我们不是也需要包括新的Analyze_Currency_Symbol_2010.10.29.mqh文件吗?



是的,这些都是你需要在你的代码中声明的变量,并将你开立新头寸的市场价格(OpenPrice_ND)和止损价格(StopLossPrice_ND)分配给他们。

另外,你也可以用你已经在使用的变量来重命名我的变量。 把这些变量看作是占位符,在适当的地方替代你的变量。


>> 明白了,这就是我认为的它们。我想你跳过了我的这个评论 --> "另外,在你这个新版本的LotSize函数中,参数的数量和顺序有了很大的变化,不是吗?"




这没有什么区别。 重要的是你正确地将订单类型传递给各自的调用函数。 它们已经被编码为根据订单类型做正确的事情。 如果你没有向调用函数发送正确的订单类型,那么你肯定会从调用函数本身得到无效的结果。


>> 好的!



这些都是很好的问题,如果你不问,那么你就不能指望自己能学会;)


>>> 我正在努力!谢谢你,菲利普。


肖恩


 

>>我们不需要也包括新的Analyze_Currency_Symbol_2010.10.29.mqh文件吗?

在你的EA中不需要,但你需要在你的include目录中包含这个文件,因为它是从贸易头寸管理include文件中调用的。

在你的EA中,通过#include<Trade_Position_Management_2010.10.29.mqh>,你已经与Trade_Position_Management_2010.10.29.mqh 和Analyze_Currency_Symbol_2010.10.29.mqh 链接

>>另外,在这个新版本的LotSize函数 中,参数的数量和顺序发生了相当大的变化,不是吗?

你不再需要基于CurrentSymbolType或CurrentCounterPairForCross。

如果你看一下交易头寸文件,你会看到equityatrisk部分,那里有关于该函数使用的评论。 它们可能会有所帮助,但不确定它们是否能自我解释。

 

这是一个只发生在我身上的错误吗?
如果我在MetaEditor mq4中放了一行# include,我就无法编译任何文件。
我也无法编译代码中有一行# include的mq4文件。
只能启用行
# Include <stderror.mqh>
# Include <stdlib.mqh>
# Include <WinUser32.mqh>