金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 2869|回复: 5

请老师帮改下策略

[复制链接]

48

主题

141

帖子

141

积分

等级: 免费版

注册:
2022-5-31
曾用名:
发表于 2023-7-10 10:24 | 显示全部楼层 |阅读模式
策略回测开平仓价格不是收盘价!请老师帮改成收盘价成交!回测也是要真实的收盘价!谢谢



input:n(2,1,30);
input:ss(1,1,10000,1);
input:NMIN(10,1,100,1);
input:b(0.005,0.001,2,0.001);//用于控制止损价
input:d(1,0.001,2,0.001);//用于调整买卖限制价格
收 盘 价:=close;
手    数:=ss;
期 望 数:=b;
倍    数:=d;
开仓历时:=ENTERBARS+1;
开仓时间:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;//OPENTIME(1)表示9:15
平仓时间:=TIME>=CLOSETIME(0)-NMIN*100;//{NMIN 为参数,CLOSETIME(0)-NMIN*100 表示收盘时间提前 N 分钟,N 由 NMIN 控制}
当前资产:ASSET,NOAXIS,COLORGRAY;
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
variable:入场价=0,波动多止损价=0,波动空止损价=0,开多次数=0,开空次数=0,趋买市=0,趋卖市=0;
variable: returnall[100000]=0; //累计回报率
variable: return[100000]=0; //当日回报率
k:=BARPOS;//K线顺序位置

//参考指标
if k=1 then BEGIN //初始化数值
return[k]:=0;
returnall[k]:=1;
END
else BEGIN
return[k]:=(当前资产-当前资产[k-1])/当前资产[k-1]; //计算当期的回报率
returnall[k]:=returnall[k-1]*(return[k]+1); //累计回报率
累计回报率:returnall[k],COLORRED,NOAXIS;
END

//多头止损价:=b*入场价+入场价+4.9
//空头止损价:=入场价-b*入场价-4.9
//均值:=ma(c,4);

//信号指标
n 周期高点:=REF(HHV(H,n),1);//前两期中最高价,n=2
n 周期低点:=REF(LLV(L,n),1);
m:(n 周期高点+n 周期低点)/2;
开多平空:=cross(c,m-1)=1 and holding<=0;
平多开空:=cross(m,c)=1 and holding>=0;

//交易系统
if 开多平空 and holding=0 then BEGIN
开多:BUY(1,手数,LIMITR,m-1)IGNORECHECKPRICE;//开多信号,手术为ss即一百手
end
if 开多平空 and holding<0 then BEGIN
平空:SELLSHORT(1,HOLDING(),LIMITR,m)IGNORECHECKPRICE;
开多 2:BUY(1,手数,LIMITR,m-2)IGNORECHECKPRICE;//先平再开,在同一个时点进行
end
if 平多开空 and holding=0 then BEGIN
开空:BUYSHORT(1,手数,LIMITR,m+2)IGNORECHECKPRICE; //开空信号
end
if 平多开空 and holding>0 then BEGIN
平多:SELL(1,HOLDING,LIMITR,m+2)IGNORECHECKPRICE;
开空 2:BUYSHORT(1,手数,LIMITR,m+2)IGNORECHECKPRICE;
end
收盘平多:sell(平仓时间 and holding>0, 0, thisclose);
收盘平空:sellshort(平仓时间 and holding<0,0,thisclose);
{多头突破失败情况:突破入场后,行情反转。止损的同时我们反手开空,但前提是时间在中午11:30 之后,且多头进场在至少 4 根 K 之前。瞬间止损我们不允许反转,因为这往往是市场
的膝跳反射}

//止损条件
10 单位平均波幅:=ref(MA(high-LOW,10),1);//前十日最值价差均值在10-20之间
前期收盘价:=REF(c,1);
波动多止损价:=MIN(前期收盘价-10 单位平均波幅,前期收盘价-12);//看多反跌
波动空止损价:=Max(前期收盘价+10 单位平均波幅,前期收盘价+12);//看空反而上涨
IF HOLDING>0 AND TIME<150000 AND C<=波动多止损价 THEN BEGIN
多头止损:SELL(1,HOLDING,MARKET);

END
IF  HOLDING<0 AND TIME<150000 AND C>=波动空止损价 THEN BEGIN
空头止损:BUYSHORT(1,HOLDING,MARKET);

//波动空止损价:=MIN(ENTERPRICE+0.15*10 单位平均波幅,ENTERPRICE+3);//多翻空止损价为开仓价加 15%的 10 单位平均波幅和 3 个大点的较小值。
//开空次数:=1;
END

//加仓条件

回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2023-7-10 10:29 | 显示全部楼层
你的这个策略中用到了多个报单指令,有限价limit,对手价thisclose和市价market,你现在要全部改为用限价的本周期收盘价报单?
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

48

主题

141

帖子

141

积分

等级: 免费版

注册:
2022-5-31
曾用名:
 楼主| 发表于 2023-7-10 10:42 | 显示全部楼层
是的,主要是想让回测更真实些
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2023-7-10 10:45 | 显示全部楼层
那你在报单语句中,指令全部用marketr或者用limitr,指定close,这两个在回测中都是用的本周期的收盘价报单的。例如:
开多:BUY(1,手数,LIMITR,CLOSE);
或者
开多:BUY(1,手数,MARKETR);
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

48

主题

141

帖子

141

积分

等级: 免费版

注册:
2022-5-31
曾用名:
 楼主| 发表于 2023-7-10 11:00 | 显示全部楼层
我是个菜鸟不会改啊!请老师帮忙改下
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2023-7-10 11:06 | 显示全部楼层
input:n(2,1,30);
input:ss(1,1,10000,1);
input:NMIN(10,1,100,1);
input:b(0.005,0.001,2,0.001);//用于控制止损价
input:d(1,0.001,2,0.001);//用于调整买卖限制价格
收 盘 价:=close;
手    数:=ss;
期 望 数:=b;
倍    数:=d;
开仓历时:=ENTERBARS+1;
开仓时间:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;//OPENTIME(1)表示9:15
平仓时间:=TIME>=CLOSETIME(0)-NMIN*100;//{NMIN 为参数,CLOSETIME(0)-NMIN*100 表示收盘时间提前 N 分钟,N 由 NMIN 控制}
当前资产:ASSET,NOAXIS,COLORGRAY;
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
variable:入场价=0,波动多止损价=0,波动空止损价=0,开多次数=0,开空次数=0,趋买市=0,趋卖市=0;
variable: returnall[100000]=0; //累计回报率
variable: return[100000]=0; //当日回报率
k:=BARPOS;//K线顺序位置

//参考指标
if k=1 then BEGIN //初始化数值
return[k]:=0;
returnall[k]:=1;
END
else BEGIN
return[k]:=(当前资产-当前资产[k-1])/当前资产[k-1]; //计算当期的回报率
returnall[k]:=returnall[k-1]*(return[k]+1); //累计回报率
累计回报率:returnall[k],COLORRED,NOAXIS;
END

//多头止损价:=b*入场价+入场价+4.9
//空头止损价:=入场价-b*入场价-4.9
//均值:=ma(c,4);

//信号指标
n 周期高点:=REF(HHV(H,n),1);//前两期中最高价,n=2
n 周期低点:=REF(LLV(L,n),1);
m:(n 周期高点+n 周期低点)/2;
开多平空:=cross(c,m-1)=1 and holding<=0;
平多开空:=cross(m,c)=1 and holding>=0;

//交易系统
if 开多平空 and holding=0 then BEGIN
开多:BUY(1,手数,MARKETR);//开多信号,手术为ss即一百手
end
if 开多平空 and holding<0 then BEGIN
平空:SELLSHORT(1,HOLDING(),MARKETR);
开多 2:BUY(1,手数,MARKETR);//先平再开,在同一个时点进行
end
if 平多开空 and holding=0 then BEGIN
开空:BUYSHORT(1,手数,MARKETR); //开空信号
end
if 平多开空 and holding>0 then BEGIN
平多:SELL(1,HOLDING,MARKETR);
开空 2:BUYSHORT(1,手数,MARKETR);
end
收盘平多:sell(平仓时间 and holding>0, 0,MARKETR);
收盘平空:sellshort(平仓时间 and holding<0,0,MARKETR);
{多头突破失败情况:突破入场后,行情反转。止损的同时我们反手开空,但前提是时间在中午11:30 之后,且多头进场在至少 4 根 K 之前。瞬间止损我们不允许反转,因为这往往是市场
的膝跳反射}

//止损条件
10 单位平均波幅:=ref(MA(high-LOW,10),1);//前十日最值价差均值在10-20之间
前期收盘价:=REF(c,1);
波动多止损价:=MIN(前期收盘价-10 单位平均波幅,前期收盘价-12);//看多反跌
波动空止损价:=Max(前期收盘价+10 单位平均波幅,前期收盘价+12);//看空反而上涨
IF HOLDING>0 AND TIME<150000 AND C<=波动多止损价 THEN BEGIN
多头止损:SELL(1,HOLDING,MARKETR);

END
IF  HOLDING<0 AND TIME<150000 AND C>=波动空止损价 THEN BEGIN
空头止损:BUYSHORT(1,HOLDING,MARKETR);

//波动空止损价:=MIN(ENTERPRICE+0.15*10 单位平均波幅,ENTERPRICE+3);//多翻空止损价为开仓价加 15%的 10 单位平均波幅和 3 个大点的较小值。
//开空次数:=1;
END
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-24 03:36 , Processed in 0.117895 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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