以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  [求助]百分比开仓记录了手数,但是平仓时数量不正确  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=158670)

--  作者:wonggoo
--  发布时间:2017/10/16 14:04:31
--  [求助]百分比开仓记录了手数,但是平仓时数量不正确
同一框架下有两个窗口,分别运行两个策略,交易标的是相同的;
用资金百分比进行了开仓,并且记录了开仓手数,代码如下:
LastLots:=GETINIFILE( \'D:\\Weisoft Stock(x64)\\开仓.ini\',FORMULANAME ,\'最近开仓手数\');
Lots:=IF(开仓百分数=0,手数,if(LastLots>0,LastLots,INTPART(INTPART(vAsset/(MULTIPLIER*Close*TACCOUNT(41)))*开仓百分数/100)));

………………
…………
……

if ISLASTBAR then 
begin
平多:SELL(平多条件,NUMLOTS,marketR);
平空:SELLSHORT(平空条件 ,NUMLOTS,marketR);
end

Lots:=IF(开仓百分数=0,手数,INTPART(INTPART(vAsset/(MULTIPLIER*Close*TACCOUNT(41)))*开仓百分数/100));
if islastbar then 
    begin       
     开多:BUY(开多条件 ,Lots,MARKETR);
     开空:BUYSHORT(开空条件,Lots,MARKETR);
   if 开多 then 
begin
NumLots:=Abs(holding);
WRITEINIFILE( \'D:\\Weisoft Stock(x64)\\开仓.ini\',FORMULANAME ,\'最近开仓手数\' ,NumLots);
end
end 


总持仓6手,其中一个策略触发平仓条件,且记录上一单的开仓数量为4手,因此,平仓应该只平4手(另外的2手是另一个策略开的单),交易日志显示,平仓手数也是4手,但检测到实际持仓为6手,结果发出了平6手的指令。最终的实际结果是6手全部平了。
交易日志内容如下:
--------------------------------------------------------------

09:30:01.862    2017.10.16 09:30:01【图表】框架:Frame 触发下单 SELL 品种 RB00 下单K线 2017.10.16 13:35:00 公式:2.AMA.R.Update 窗格ID:3 代码行:203
2017-10-16 09:30:01.863    【图表】模型下单 4      -----------------------【这里手数为4】
2017-10-16 09:30:01.864    【图表】下单系数调整后 手数:4       ----------------【这里手数也是4】
2017-10-16 09:30:01.865    【图表】实际持仓 6                    -----------------------【但这里却调整成了账户实际总的持仓】
2017-10-16 09:30:01.866    【图表】直接下单
2017-10-16 09:30:01.868    2017.10.16 09:30:01【图表】框架:Frame 触发下单 BUYSHORT 品种 RB00 下单K线 
2017.10.16 13:35:00            公式:2.R.Update 窗格ID:3 代码行:207
2017-10-16 09:30:01.869    【图表】模型下单 3
2017-10-16 09:30:01.870    【图表】下单系数调整后 手数:3
2017-10-16 09:30:01.872    【图表】直接下单
2017-10-16 09:30:01.875    【图表】RB00 运行完毕
2017-10-16 09:30:01.875    【图表】RB00 运行完毕
2017-10-16 09:30:01.875    【图表】I00 运行完毕
2017-10-16 09:30:01.876    【图表】RB01 运行完毕
2017-10-16 09:30:01.876    【下单】已经调整为 实际持仓为 6 
2017-10-16 09:30:01.877    【下单】RB01 价0.000000 量6 买卖1 类型1 开平1 账户30001670 Formula 1
2017-10-16 09:30:01.878    【下单】确认报单已发送 ID=-32820017 RefID = 6720
2017-10-16 09:30:01.879    【下单】RB01 价0.000000 量3 买卖1 类型1 开平0 账户30001670 Formula 1
2017-10-16 09:30:01.880    【下单】确认报单已发送 ID=-32820007 RefID = 6730
2017-10-16 09:30:01.910    【指令】收到回报指令 ID = -32820017 RefID = 6720
2017-10-16 09:30:01.937    【指令】收到回报指令 ID = -32820017 RefID = 6720
2017-10-16 09:30:01.938    【回报】30001670 : rb1801 - 已报单 6 价格:3773 平 卖
2017-10-16 09:30:02.012    【指令】收到回报指令 ID = -32820017 RefID = 6720
2017-10-16 09:30:02.016    【指令】收到成交回报指令 REFID = 6720 vol = 6
2017-10-16 09:30:02.032    【指令】收到回报指令 ID = -32820007 RefID = 6730
2017-10-16 09:30:02.049    【指令】收到回报指令 ID = -32820007 RefID = 6730
2017-10-16 09:30:02.050    【指令】收到回报指令 ID = -32820007 RefID = 6730
2017-10-16 09:30:02.053    【指令】收到成交回报指令 REFID = 6730 vol = 3
2017-10-16 09:30:02.085    【回报】30001670 : rb1801 - 已成交 6 价格:3776 平 卖
2017-10-16 09:30:02.086    【回报】30001670 : rb1801 - 已报单 3 价格:3773 开 卖
2017-10-16 09:30:02.087    【回报】30001670 : rb1801 - 已成交 3 价格:3776 开 卖
2017-10-16 09:30:02.302    【图表】RB00 运行完毕

--------------------------------------------------------------

图片点击可在新窗口打开查看

图片点击可在新窗口打开查看
请教,应该如何修改代码

--  作者:gxx978
--  发布时间:2017/10/16 15:03:42
--  
可以输出下NUMLOTS的值是多少,如果这个为0,那表示全平,实际交易中会检测下实际账户中的持仓是多少,再全部平仓的。
--  作者:wonggoo
--  发布时间:2017/11/6 21:23:55
--  
谢谢,明白了