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

 
这是个好东西。 节省了我几个小时的工作。你是个好人!
 

享受吧......但不要剥夺你自己的信心,因为你要建立自己的代码,从而确切地知道它是如何运作的。 使用已有的代码是提高你的知识的一个好方法,"用你的靴带把自己拉起来",如果我在早期没有代码作为例子,我就不会在这里了,但一定要强迫自己学会钓鱼。 在你所做的其他事情中都有价值。

 

@Phillip

你觉得这个怎么样?

tradeVolume = AccountFreeMargin() * risk/100 / ( stopLossPoints * MarketInfo( Symbol(), MODE_TICKVALUE ) ) 。

if(tradeVolume<MarketInfo(Symbol(),MODE_MINLOT) tradeVolume=MarketInfo(Symbol(),MODE_MINLOT)。

如果(tradeVolume>MarketInfo(Symbol(),MODE_MAXLOT)) tradeVolume=MarketInfo(Symbol(),MODE_MAXLOT)。

res=OrderSend(Symbol(),OP_BUY,tradeVolume,Ask,3,Ask - 0.2,Ask + 0.4,"",MAGICID,0,Red)。

 
Ricotter:

tradeVolume = AccountFreeMargin() * risk/100 / ( stopLossPoints * MarketInfo( Symbol(), MODE_TICKVALUE ) 。)


在没有亲自测试以确认数学的情况下,但假设数学是正确的,这看起来是正确的,只要你只把它应用于反面货币也是账户面值的货币对。

例如,如果你的账户是以美元为基础的,那么你只需要将这种交易量计算方法应用于以美元为对应货币的货币对--欧元兑美元、英镑兑美元等。

在我的代码中,这种货币对类型被指定为 "类型2"。

如果你将其应用于以账户面额为基准的符号(例如,账户以美元为基准,则为USDJPY),则计算将出现错误。 同样地,如果应用于任何交叉盘也会出错。

通过我另一篇文章中的 "分析货币符号 "文件中的SymboType()调用函数,注释标题部分有点解释了不同符号类型的基础,以及为什么你需要根据符号类型计算风险资产和交易量(手数)的不同。

但是,如果你的计划只是交易那些欧元兑美元和英镑兑美元类型的货币对,那么你的代码看起来是好的。
 

你好,菲利普......你可能记得在我之前的一个帖子中,我曾说过 "听起来代码对日元对有一些问题。这已经解决了吗?"。嗯,我想这个问题可能在我身上又出现了。我把你的程序正确地添加到我的EA中(我很确定),我设置了MaxPercentEquityAtRisk=1.0(1%)。我的模拟账户 中的资产约为2300美元,因此我愿意在任何特定的交易中冒大约23美元的风险。我的EA使用同等大小的止损和盈利目标--因此,如果我在交易中冒23美元的风险,我就想获得23美元的收益。总之,我的EA昨晚产生了2笔交易。

(1) 买入欧元/日元,9.8个点的止损和9.8个点的盈利目标。你的程序计算出的手数为0.80手(太大了),该交易产生了10点的利润96.91美元。

(2) 买入NZDJPY,16.3点的止损和16.3点的目标利润。你的程序计算的手数为0.28手,交易结果为亏损-56.56美元。


在我看来,这两笔交易应该给我带来大约23美元的胜利或23美元的损失,因为我只冒了2300美元资产的1%的风险,不是吗?


谢谢!

肖恩

 

这可能对Phillp有帮助--这里是你的代码在计算我上面提到的两个订单的手数之后的打印语句记录。


05:14:56 EURJPY,H1: BUY - EURJPY Max EquityAtRisk = $21.99 and Max Lotsize = 0.8085
05:14:56 EURJPY,H1: BUY - EURJPY Current EquityAtRisk = $21.76 and Current Lotsize = 0.8
05:14:56 EURJPY,H1: BUY - EURJPY MarketInfo(MODE_STOPLEVEL) = 30.00000
05:14:56 LibOrderReliable EURJPY,H1: 载入成功
05:14:56 LibOrderReliable EURJPY,H1: OrderSendReliable v3.1:
05:14:56 LibOrderReliable EURJPY,H1: OrderSendReliable v3.1。-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
05:14:56 LibOrderReliable EURJPY,H1: OrderSendReliable v3.1:尝试买入STOP 0.80000000手 @114.78700000 sl:114.68900000 tp:114.88500000



09:02:36 NZDJPY,H1: BUY - NZDJPY Max EquityAtRisk = $23.29 and Max Lotsize = 0.2814
09:02:36 NZDJPY,H1: BUY - NZDJPY Current EquityAtRisk = $23.18 and Current Lotsize = 0.28
09:02:36 NZDJPY,H1: BUY - NZDJPY MarketInfo(MODE_STOPLEVEL) = 70.00000
09:02:36 LibOrderReliable NZDJPY,H1: 载入成功
09:02:36 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1:
09:02:36 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1:-
09:02:36 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1:Attempted BUY STOP 0.28000000 lots @64.29700000 sl:64.13400000 tp:64.46000000
09:02:37 LibOrderReliable NZDJPY,H1: open #155492665 buy stop 0.28 NZDJPY at 64.297 sl: 64.134 tp: 64.460 ok
09:02:37 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1。票据#155492665。成功下了买入止损单,详情如下。
09:02:37 LibOrderReliable NZDJPY,H1: #155492665 2010.11.04 13:02 buy stop 0.28 NZDJPY 64.297 64.134 64.460 64.197 0.00 0.00 0.00 NZDJPY73650016 73650016
09:02:37 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1。

09:02:37 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1:


......看起来它计算Max EquityAtRisk的数字很好......但这些手数导致的利润/亏损远远大于我的1%股权的预期风险。


谢谢

肖恩

 

你的经纪人是谁?

在FXDD上,当我输入这些止损单时,我得到的是0.15手的EURJPY(@25.66 EaR)。

2010.11.04 16:05:39 Assisted_Order_Script_2010.11.01 EURJPY,Daily: open #95896902 buy stop 0.15 EURJPY at 114.827 sl: 114.689 tp: 114.885 ok<br / translate="no"> 2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Daily: attempted OP_BUYSTOP 0.15000000 lots @114.82700000 sl:114.68900000 tp:114.88500000
2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Daily:当前风险资产=25.66美元,当前手数=0.15,盈利目标=10.78美元,盈亏比为0.4:1。
2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Daily:最大允许的风险资产=25.84美元,最大计算手数=0.1511
2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,每日输入。Order_Type="BUY STOP"; OpenBidPrice=114.787; StopLossBidPrice=114.689; TakeProfitBidPrice=114.885; MaxPercentEquityAtRisk=0.5; MinLotOverRide=false。

在IBFX上,我的手数为0.16,EaR为26.77美元(账户的起始资产较大)。

2010.11.04 16:09:34 Assisted_Order_Script_2010.11.01 EURJPY,H4: open #94468219 buy stop 0.16 EURJPY at 114.824 sl: 114.689 tp: 114.885 ok
2010.11.04 16:09:34 Assisted_Order_Script_2010.11.01 EURJPY,H4: attempted OP_BUYSTOP 0.16000000 lots @114.82400000 sl:114.68900000 tp:114.88500000
2010.11.04 16:09:34 Assisted_Order_Script_2010.11.01 EURJPY,H4: 当前 EquityAtRisk = $26.77 and Current Lotsize = 0.16 and Profit Target = $12.10,盈亏比为0.5:1
2010.11.04 16:09:33 Assisted_Order_Script_2010.11.01 EURJPY,H4: 最大允许风险资产=27.19美元,最大计算手数=0.1625
2010.11.04 16:09:33 Assisted_Order_Script_2010.11.01 EURJPY,H4输入。Order_Type="BUY STOP"; OpenBidPrice=114.787; StopLossBidPrice=114.689; TakeProfitBidPrice=114.885; MaxPercentEquityAtRisk=0.5; MinLotOverRide=false;

在IBFX上,NZDJPY的手数为0.09手,EaR为24.53。

2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4: open #94468343 buy stop 0.09 NZDJPY at 64.354 sl: 64.134 tp: 64.460 ok
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4: attempted OP_BUYSTOP 0.09000000 lots @64.35400000 sl:64.13400000 tp:64.46000000
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4: 当前EquityAtRisk = $24.53 and Current Lotsize = 0.09 and Profit Target = $11.82,盈亏比为0.5:1
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4: 允许的最大风险资产=27.19美元,最大计算手数=0.0998
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4输入。Order_Type="BUY STOP"; OpenBidPrice=64.297; StopLossBidPrice=64.134; TakeProfitBidPrice=64.46; MaxPercentEquityAtRisk=0.5; MinLotOverRide=false;

我测试了九个经纪商的兼容性,这些代码已知可以在Alpari(US)、CitiFXPro、CMS、Forex.com(Gain Capital)、FXCM、FXDD、IBFX、MIG Bank和ODL上运行。

这些经纪商的不同之处在于,到目前为止,我对这些代码的经纪商无关性感到满意,因为它们巧妙地处理了跨越这些经纪商的市场参数的差异。

但我们假设你的代码实现没有问题,所以让我们先排除这个问题。试试附件中的脚本,在EURJPY上拖放,像我上面那样输入买入止损的参数,让我知道结果。(显然只能在模拟账户 上使用)

附加的文件:
 

谢谢你,菲利普...我使用的是Alpari英国模拟账户账户净值 为2272.85美元。好的,我把脚本添加到欧元兑日元的小时图上(就像我的EA使用的那样)。它没有做任何事情,也没有下任何挂单,所以我检查了 "专家 "选项卡上的任何错误信息......这是它的内容。


2010.11.04 20:39:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: 删除
2010.11.04 20:38:38 Assisted_Order_Script_2010.11.01 EURJPY,H1:加载成功
2010.11.04 20:37:54 Assisted_Order_Script_2010.11.01 EURJPY,H1: 移除
2010.11.04 20:37:54 Assisted_Order_Script_2010.11.01 EURJPY,H1: uninit reason 0
2010.11.04 20:37:54 Assisted_Order_Script_2010.11.01 EURJPY,H1:零除法
2010.11.04 20:37:53 Assisted_Order_Script_2010.11.01 EURJPY,H1: 允许的最大风险值=22.73美元和最大计算手数=0
2010.11.04 20:37:53 Assisted_Order_Script_2010.11.01 EURJPY,H1输入。Order_Type="BUY"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;


谢谢!

肖恩

 

注意:我刚才又试了一下菲利普的脚本,同样的数字,但把MinLotOverride设置为 "true"。它立即启动了一个市场订单(尽管我的买入价是115.827,而市场只有114.945。手数=0.01,没有止损或盈利目标订单 - 它们都是0.0000。

谢谢

肖恩

 

只是为了确认一下,你的账户面额是美元,对吗?

我现在正在下载Alpari UK来检查它。

订单作为市场而不是买入止损开盘完全是由orderreliable程序控制的...非常奇怪。那我也要调查一下这个问题。

引起我注意的一件事是这个通知。
"模拟账户 的杠杆率自动设置为1:500的最大杠杆率。"

杠杆率不应该影响手数的计算,它应该只影响自由利润的计算,我记得。

编辑: 忘了,我看到平台实际上并不默认这个,它是1:100的最大杠杆。