金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 3576|回复: 6

真难啊

[复制链接]

78

主题

283

帖子

283

积分

Rank: 2

等级: 标准版

注册:
2021-12-28
曾用名:
发表于 2022-1-14 18:27 | 显示全部楼层 |阅读模式

尊敬的老师你好!自己鼓捣了N多天就是玩不转,难为我60后大叔了。还是麻烦你帮忙改一下吧,感谢!
我想把如下图表改后台(在后台模型中显示图表信号):
1、套用阿火老师的图表转后台即时下单模型,固定时间间隔——
2、请去掉账户号,默认本账号;
3、股票模型,只有开多、平多;
4、保留 debugfile 代码以便检查调试
5、图表模型如下:

input:ss(100,100,1000,100);
input:zyfd(1.12,1,1.2,0.01);
input:zsfd(0.9,0.8,0.95,0.01);

ma5:ma(close,5);
ma20:ma(close,20);
ma30:ma(close,30);
con1:=cross(ma5,ma20);
con12:=cross(ma5,ma30);
con2:=cross(ma20,ma5);
kd1:=con1;
kd2:=con12;
平多条件:=c>ss*1.1;
开仓价:=enterprice;
止盈条件:=h>开仓价*zyfd;
止盈价:=max(o,开仓价*zyfd);
止损条件c:=c<开仓价*zsfd;
止损:sell(holding>0 and 止损条件c and enterbars>=1 ,0,limitr,c);//指定价
止盈:sell(holding>0 and 止盈条件  and enterbars>=1 ,0,limitr,止盈价);//指定价
平多:sell(holding>0 and 平多条件  and enterbars>=1 ,0,limitr,ss*1.1);//指定价
开多1:buy(holding=0  and kd1 ,ss,limitr,c); //指定价
开多2:buy(holding=0  and kd2 ,ss,limitr,c);//指定价

4、阿火老师的转换范例(即时下单模型,固定时间间隔):

Globalvariable:hold=drawnull;

//蓝色部分改为你自己的模型
buycond:=h>ref(hhv(h,10),1);
sellcond:=l<ref(llv(l,10),1);
if holding>0 and sellcond then sell(1,1,market);
if holding<0 and buycond then sellshort(1,1,market);
if holding=0 and buycond then buy(1,1,market);
if holding=0 and sellcond then buyshort(1,1,market);
cc800988:=holding;//这句放在信号稳定的地方


drawtextex(1,1,800,0,'虚拟持仓为:'+numtostr(cc800988,0));//在图表上输入虚拟持仓以便监控
if not(islastbar) or workmode<>1 then exit;
xiadan800988:=cc800988-hold;
if xiadan800988>0.5 then begin
cang:=min(xiadan800988,abs(hold));
if hold<0 then begin
  tsellshort(1,cang,mkt,0,0,'800988'),allowrepeat;
  debugfile('D:\800988.txt',numtostr(hold,0)+' '+numtostr(cc800988,0)+' 平空 %.0f',cang);
end
cang:=xiadan800988+min(hold,0);
if cang>0 then begin
  tbuy(1,cang,mkt,0,0,'800988'),allowrepeat;
  debugfile('D:\800988.txt',numtostr(hold,0)+' '+numtostr(cc800988,0)+' 开多 %.0f',cang);
end
end
if xiadan800988<-0.5 then begin
cang:=min(abs(xiadan800988),abs(hold));
if hold>0 then begin
  tsell(1,cang,mkt,0,0,'800988'),allowrepeat;
  debugfile('D:\800988.txt',numtostr(hold,0)+' '+numtostr(cc800988,0)+' 平多 %.0f',cang);
end
cang:=abs(xiadan800988)-max(hold,0);
if cang>0 then begin
  tbuyshort(1,cang,mkt,0,0,'800988'),allowrepeat;
  debugfile('D:\800988.txt',numtostr(hold,0)+' '+numtostr(cc800988,0)+' 开空 %.0f',cang);
end
end
hold:=cc800988;




以上诚请得到你的帮助。或者你有更好的方法实现那就更好了。
回复

使用道具 举报

30

主题

7077

帖子

7087

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2022-1-16 10:54 | 显示全部楼层
http://www.weistock.com/bbs/dispbbs.asp?boardid=17&id=173706

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

使用道具 举报

78

主题

283

帖子

283

积分

Rank: 2

等级: 标准版

注册:
2021-12-28
曾用名:
 楼主| 发表于 2022-1-16 15:20 | 显示全部楼层
谢谢!那么下面直接这样可以吗?


tsell(holding>0 and 止损条件c and enterbars>=1 ,0,lmt,c);
止损:sell(holding>0 and 止损条件c and enterbars>=1 ,0,limitr,c);

tsell(holding>0 and 止盈条件 and enterbars>=1 ,0,lmt,止盈价);
止盈:sell(holding>0 and 止盈条件  and enterbars>=1 ,0,limitr,止盈价);//指定价

tsell(holding>0 and 平多条件  and enterbars>=1 ,0,lmt,ss*1.1);
平多:sell(holding>0 and 平多条件  and enterbars>=1 ,0,limitr,ss*1.1);//指定价



buy(holding=0  and kd1 ,ss,lmt,c); //指定价
开多1:buy(holding=0  and kd1 ,ss,limitr,c); //指定价

buy(holding=0  and kd2 ,ss,lmt,c); //指定价
开多2:buy(holding=0  and kd2 ,ss,limitr,c);//指定价


补充内容 (2022-1-16 15:23):
tsell(holding>0 and 止损条件c and enterbars>=1 ,0,lmt,c);——enterbars>=1 也不用加t对吗?

补充内容 (2022-1-16 15:26):
更正如下:
tbuy(holding=0  and kd1 ,ss,lmt,c); //指定价
开多1:buy(holding=0  and kd1 ,ss,limitr,c); //指定价

tbuy(holding=0  and kd2 ,ss,lmt,c); //指定价
开多2:buy(holding=0  and kd2 ,ss,limitr,c);//
回复

使用道具 举报

78

主题

283

帖子

283

积分

Rank: 2

等级: 标准版

注册:
2021-12-28
曾用名:
 楼主| 发表于 2022-1-16 16:19 | 显示全部楼层
老师好:下面这个后台持仓同步是需要单独建一个公式,和引用的模型一同运行后台交易吗?请老师说明一下使用方法。

我们从图表转入后台时候往往会发现后台没有持仓同步这个功能,那是因为后台本质上使用的是账户持仓而非理论持仓
那么如果我们还是想要实现这个功能怎么办呢,这边给出一个模板范例大致原理就是获取图表策略的理论持仓holding然后和账户持仓做匹配。
此外范例增加了有未成交单或者图表最新的持仓和上一根不一样(最新k有发生持仓变化),此时同步不会执行。

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


//策略理论持仓
ho1:stkindiex(stklabel,'BOLL布林带交易系统.ho',0,1,0,500);
//上一根k线的理论持仓
before_ho1:stkindiex(stklabel,'BOLL布林带交易系统.ho',0,1,-1,500);
//账户多头持仓
tbuyho:tbuyholdingex('',STKLABEL,1);
//账户空头持仓
tsellho:tsellholdingex('',STKLABEL,1);
//是否有未成交单,返回1表示有未成交
is_order:TGLOBALSUBMITEX(0,'',stklabel,0);

//如果当前品种有挂单或者理论策略的当根k理论持仓有变化,就不执行
if is_order or (ho1<>before_ho1) then exit;
else
BEGIN
        //多头部分
        //理论持仓大于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

        //空头部分
        //理论持仓小于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




回复

使用道具 举报

30

主题

7077

帖子

7087

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2022-1-16 20:07 | 显示全部楼层
这个不需要后台程序,你可以理解后台策略的信号就是直接读取图表策略的holding来作为信号下单
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

78

主题

283

帖子

283

积分

Rank: 2

等级: 标准版

注册:
2021-12-28
曾用名:
 楼主| 发表于 2022-1-16 20:29 | 显示全部楼层
谢谢。3楼的写法可以吗?
回复

使用道具 举报

30

主题

7077

帖子

7087

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2022-1-16 21:29 | 显示全部楼层
可以
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 00:16 , Processed in 0.268755 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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