金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 3139|回复: 3

后台持仓同步方法

[复制链接]

31

主题

7734

帖子

7744

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2021-12-7 13:51 | 显示全部楼层 |阅读模式
本帖最后由 资深技术05 于 2024-12-16 16:50 编辑

我们从图表转入后台时候往往会发现后台没有持仓同步这个功能,那是因为后台本质上使用的是账户持仓而非理论持仓
那么如果我们还是想要实现这个功能怎么办呢,这边给出一个模板范例大致原理就是获取图表策略的理论持仓holding然后和账户持仓做匹配。
此外范例增加了有未成交单不进行仓位矫正,以避免信号的反复

注意:所引用的策略最后要输出一个ho:holding;用来被调用,另外这里默认调用500根k计算得出持仓结果,如果要和图表上进行对应也需要控制图表k线数量在500
另外这里策略理论持仓是一个策略的,如果你有多个策略引用可以进行多个策略的stkindiex,然后把引用过来的持仓加起来得到一个总的理论持仓。
我们提供了2套思路上略有偏差的模版参考。

模板1: 比对理论持仓(前一个K的)和实际仓位,有差异直接进行仓位矫正
[PEL] 复制代码
//上一根K策略理论持仓
ho1:stkindiex(stklabel,'BOLL布林带交易系统.ho',0,1,-1,500);

//账户多头持仓
tbuyho:tbuyholdingex('',STKLABEL,1);
//账户空头持仓
tsellho:tsellholdingex('',STKLABEL,1);
//是否有未成交单,返回1表示有未成交
is_order:TGLOBALSUBMITEX(0,'',stklabel,0);
 
//如果当前品种有挂单就不执行
if is_order  then exit;
else
BEGIN
        //多头部分                       
        if ho1>=0 and tsellho>0 then tsellshort(1,tsellho,mkt);
        //理论持仓大于0,补仓
        if ho1>0 and ho1>tbuyho then
        BEGIN
                tbuy(1,ho1-tbuyho,mkt);
        END
        //理论持仓大于0,减仓
        if ho1>0 and ho1<tbuyho then
        BEGIN
                tsell(1,tbuyho-ho1,mkt);
        END
 
        //空头部分
        if ho1<=0 and tbuyho>0 then tsell(1,tbuyho,mkt);
        //理论持仓小于0,补仓
        if ho1<0 and abs(ho1)>tsellho then
        BEGIN
                tbuyshort(1,abs(ho1)-tsellho,mkt);
        END
        //理论持仓小于0,减仓
        if ho1<0 and abs(ho1)<tsellho then
        BEGIN
                tsellshort(1,tsellho-abs(ho1),mkt);
        END                       
END


模板2:仅当理论持仓发生变化时候进行操作,否则即便当前理论持仓和实际仓位有差异也不操作。这个思路主要是考虑到实际
运行中,客户的程序未能持续运行的情况:此时我们的理论信号实际是发生在较久远之前的位置,我们已经是错过了那个入场时机了,
此时如果死板直接进行仓位矫正并不合适。

[PEL] 复制代码
//调用1分钟周期前一周期 以及前前一周前的持仓
hd1:=stkindiex(stklabel,'boll布林带交易系统.ho',0,1,-1,500);
hd2:=stkindiex(stklabel,'boll布林带交易系统.ho',0,1,-2,500);
//调用15分钟周期前一周期 以及前前一周前的持仓
hd3:=stkindiex(stklabel,'boll布林带交易系统.ho',0,3,-1,500);
hd4:=stkindiex(stklabel,'boll布林带交易系统.ho',0,3,-2,500);


//上一根k线的理论持仓汇总
ho1:hd1+hd3;
//上上一根k线的理论持仓汇总
ho2:hd2+hd4;

//账户多头持仓
tbuyho:tbuyholdingex('',stklabel,1);
//账户空头持仓
tsellho:tsellholdingex('',stklabel,1);

//是否有未成交单,返回1表示有未成交
is_order:tglobalsubmitex(0,'',stklabel,0);

//如果当前品种有挂单就不执行
if is_order then exit;

//如何没有理论持仓变化就不执行        
if  (ho1=ho2) then exit;
//多头部分                       
if ho1>=0 and tsellho>0 then tsellshort(1,tsellho,mkt);
//理论持仓大于0,补仓
if ho1>0 and ho1>tbuyho then
begin
        tbuy(1,ho1-tbuyho,mkt);
end
//理论持仓大于0,减仓
if ho1>0 and ho1<tbuyho then
begin
        tsell(1,tbuyho-ho1,mkt);
end

//空头部分
if ho1<=0 and tbuyho>0 then tsell(1,tbuyho,mkt);
//理论持仓小于0,补仓
if ho1<0 and abs(ho1)>tsellho then
begin
        tbuyshort(1,abs(ho1)-tsellho,mkt);
end
//理论持仓小于0,减仓
if ho1<0 and abs(ho1)<tsellho then
begin
        tsellshort(1,tsellho-abs(ho1),mkt);
end         








金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

31

主题

7734

帖子

7744

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-12-7 13:59 | 显示全部楼层
本帖最后由 资深技术02 于 2022-5-9 15:23 编辑

二楼附上在后台使用图表持仓进行交易的范例,大致原理就是在我们图表策略开发完成后
每一个开平语句下面跟上一个后台的一样的下单语句即可

http://www.weistock.com/bbs/dispbbs.asp?boardid=17&id=173706
这里要保持后台信号和你图上看到的信号一样请确保以下几点设置
1、图表和后台都要设置从某个固定时间点开始,这样保证起始位置相同
2、后台要使用走完k下单方式,不得使用固定轮询,因为我们看图表往往都是k走完后的信号根本不是盘中信号,此外如果策略中用到未来函数或者小引大的情况,那么不仅走完k信号不固定甚至可能信号要过好久才会确定下来
此时拿后台下单记录和图表比是无法比较的


截图202205091521263204.png
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

31

主题

7734

帖子

7744

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
 楼主| 发表于 2021-12-10 13:42 | 显示全部楼层
本帖最后由 技术008 于 2021-12-23 09:25 编辑

图表与后台对比信号差异可能性(前提是使用2楼的模板范例),强烈建议用户不要老是去计较不一致,因为下面这些很多地方的不同最后都会导致巨大差异的

1、回测时候图表会在最后强制平仓,而后台没有这个概念,一般我们看下总的盈亏大差不差,然后去看交易明细如果数量只差了最后一笔那就是这个原因
2、图表回测多品种是每个品种单独的资金回测相互不干扰,后台回测是多品种共用一个资金来测试,所以如果满仓交易的话第一个品种买入了,其他品种就没钱了会

3、我们在后台设定条件处有一个使用k数量或者开始时间,这个设置会影响我们后台回测中对比如tenterbars这些函数的取值。
4、后台交易后不是立即算成交比如下面例子,一开始会连开两次而不是开一平一
tbuy(1,1,mkt);
tsell(1,tholding,mkt);
5、后台没有所谓ref(texitbars(1),4);这种用法,不像图表可以取到历史上某一天的平仓历史


总结:如果你的信号只根据合约数据计算得到,那么图表和后台可以得到比较一致结果。如果你的策略需要回溯历史上交易结果比如持仓量、成本价、开仓价、开仓历史等等(函数列表里交易函数那些)
那么后台是无法去进行回溯的,他不像图表你可以去获取所谓历史上某个时候的持仓。后台更接近你实盘交易,可以想象你交易时候能知道历史上某一天的持仓吗???
这是一个思路上一定要转换


金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

3

主题

2万

帖子

2万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2021-12-15 17:05 | 显示全部楼层
这个图我们去了解数据量的不同会导致指标的结果不一样,一般来说不要过于相信所谓眼见即为实,加上很多用户根本不理解数据量的概念
都是以图上看到啥就认为他是啥,这种观念是非常错误的,就像下面两个图,都是眼睛看到的,但是结果就会有不同,这就是数据量数据量数据量造成的

而这个数据量会对我们的策略有时产生很大的影响,这也是我们经常发现很多不同功能实现或者说回测到的结果不同,还是这个数据量的可能不同
再加上上面罗列的一些比如回测机制不同

截图202112151702191825.png
截图202112151702285297.png
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-12-22 13:00 , Processed in 0.219660 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表