后台交易。多策略对一个账户交易,单策略里 会有加仓。加仓的时候会读取是否已有持仓。 那么多策略的时候 怎么避免其他策略的持仓 被当下的策略读取呢?
避免不了。你就一个账号,持仓都是汇总的。直接读取持仓情况下是没办法区分开到底是哪个策略下单的仓位。
那么那些 有几十组 上百组策略的 交易是如何实现的呢? 准备几百个账户吗?
你可以考虑采用全局变量记录的方式去记录,每次开仓和平仓时候维护下这个全局变量。开仓+1,平仓-1. 开仓和平仓之前也需要读取下这个全局变量,来作为开仓和平仓的判断依据。
如果真的要每个策略完全独立开操作,其实除了多账户没有其他办法。全局变量记录的方式,实现起来是很麻烦的。
//固定时间间隔,有信号就下单,信号闪烁情况下造成HOLDING值不稳定,故不能调用图表的HOLDING来控制仓位,必须使用后台程序化交易, 总体思路是用BARPOS和全局变量结合起来,控制是否开仓。
//序列模式运行
//t1_flag 0表示没有仓位,1表示持有多头,-1表示持有空头
//bar控制一根K线只能有一次开平仓
ss:=1; //手数
ma5:ema(c,5);
buycond:=h>ma5;
sellcond:=l<ma5;
//平多
if extgbdata('t1_flag')>0 and sellcond and barpos>extgbdata('bar') then
begin
tsell(1,ss,mkt);
extgbdataset('t1_flag',0);
end
//平空
if extgbdata('t1_flag')<0 and buycond and barpos>extgbdata('bar') then
begin
tsellshort(1,ss,mkt);
extgbdataset('t1_flag',0);
end
//固定时间间隔,有信号就下单,信号闪烁情况下造成HOLDING值不稳定,故不能调用图表的HOLDING来控制仓位,必须使用后台程序化交易, 总体思路是用BARPOS和全局变量结合起来,控制是否开仓。
//序列模式运行
//t1_flag 0表示没有仓位,1表示持有多头,-1表示持有空头
//bar控制一根K线只能有一次开平仓
ss:=1; //手数
ma5:ema(c,5);
buycond:=h>ma5;
sellcond:=l<ma5;
//平多
if extgbdata('t1_flag')>0 and sellcond and barpos>extgbdata('bar') then
begin
tsell(1,ss,mkt);
extgbdataset('t1_flag',0);
end
//平空
if extgbdata('t1_flag')<0 and buycond and barpos>extgbdata('bar') then
begin
tsellshort(1,ss,mkt);
extgbdataset('t1_flag',0);
end
你可以考虑用这种方式记录自己开仓手数。但是不能百分比达到控制。其中牵扯的因素很多。包括未成交因素、高速开平触发情景等情况的影响。