金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
12
返回列表 发新帖
楼主: PIN

新手求助,帮检查下代码

[复制链接]

33

主题

145

帖子

145

积分

等级: 免费版

注册:
2023-10-12
曾用名:
 楼主| 发表于 2023-10-23 16:59 | 显示全部楼层
get,是不是其实在实盘运行的时候,信号执行模式相当于总开关,定义了是采用固定论询还是走完K线;而在回测的时候,则需要通过本周期或次周期函数来实现区分;
然后代码那段,当止损后反弹买入的时候,one_enterprice不是再次会被enterprice重新赋值嘛,这样不就又把one_enterprice变成了上次(即反弹买入)的开仓价,虽然从回测结果上看好像确实是对的。。
回复

使用道具 举报

37

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-10-23 17:07 | 显示全部楼层
one_enterprice只会在仓位从无(0持仓)到有持仓时才会被赋值。其余时候不会发生变化。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

33

主题

145

帖子

145

积分

等级: 免费版

注册:
2023-10-12
曾用名:
 楼主| 发表于 2023-10-23 17:46 | 显示全部楼层
好的,原来如此,谢谢!
回复

使用道具 举报

33

主题

145

帖子

145

积分

等级: 免费版

注册:
2023-10-12
曾用名:
 楼主| 发表于 2023-10-27 15:09 | 显示全部楼层
老师您好,针对这个策略,我参照多头调整后的代码写了段空头方向的,交易条件略做了一些调整,经回测结果好像还是有点问题,还想请老师帮看下(应该是出在空头交易代码中)哪里有问题;另外,各个交易指令都写成了模块化的,如果做调整的话也可以写成模块化的方式嘛(比如按多头入场-多头止损-止损后加仓-多头出场-空头入场-空头止损-止损后加仓-空头出场这样的),主要是刚开始这样写好理解一点


//声明变量
input:s(12,5,40,4),p(26,20,100,8),m(9,1,100,10);
input:n(2,1,10,1),m1(20,1,1000,1);
input:m2(14,1,50,1);
input:amounts(1);
input:s_out(1.05,0.9,3,0.1),s_in(0.97,0.7,1,0.01),s_atr(2,0.5,3,0.1);
variable:mark:=0;  //多头止损标记
variable:mark1:=0; //空头止损标记
variable:one_enterprice:=0;  //标记多头开仓(非止损后买入)入场价
variable:one_enterprice1:=0; //标记空头开仓(非止损后买入)入场价

//中间变量
diff:=ema(close,s) - ema(close,p);
dea:=ema(diff,m);
macd1:=2*(diff-dea), colorstick;

bbi:(ma(close,3)+ma(close,6)+ma(close,12)+ma(close,24))/4;
upr:bbi+n*std(bbi,m1);
dwn:bbi-n*std(bbi,m1);

tr1:=max(max((high-low),abs(ref(close,1)-high)),abs(ref(close,1)-low));
atr:=ma(tr1,m2);

//买入开仓
cond_buy1:=cross(diff,dea);  //macd金叉
cond_buy3:=close/dwn<=s_in;  //最新价突破boll下轨超过3%
if cond_buy1 or cond_buy3 then begin
        sellshort(holding<0,0,market); //先平再开
        buy(holding=0,amounts,market); //开仓
        one_enterprice:=enterprice;
end

//买入止损
cond_stop_buy:=one_enterprice-close>=s_atr*atr;  //两倍atr止损
if holding>0 and cond_stop_buy and enterbars>0 then begin
        止损:sell(1,0,market);  //当买入后触发2倍atr止损
        mark:=1; //标记下 当前触发了止损了
end

//止损后开仓
cond_buy4:=close>=one_enterprice-s_atr*atr;   //止损后反弹至止损位时重新开入订单
if mark=1 and cond_buy4 then begin
        反弹开仓:buy(holding=0,amounts,market);       //止损后反弹至2倍atr后重新买入
        mark:=0;
end

//卖出平仓
cond_sell1:=cross(dea,diff);  //macd死叉
cond_sell2:=close/upr>=s_out;  // 最新价穿过boll上轨超过5%
if holding>0 and enterbars>0 and (cond_sell1 or cond_sell2) then begin
        sell(1,0,market);  //平多仓
end

//卖出开仓
cond_buyshort1:=cross(dea,diff); //死叉
cond_buyshort2:=upr/close<=s_in; //最新价突破boll上轨超过3%
if cond_buyshort1 or cond_buyshort2 then begin
        sell(holding>0,0,market);  //先平再开
        buyshort(holding=0,amounts,market);  //开空仓
        one_enterprice1:=enterprice;
end

//卖出止损
cond_stop_buyshort:=close-one_enterprice1>=s_atr*atr; //两倍atr止损
if holding<0 and cond_stop_buyshort and enterbars>0 then begin
        止损1:sellshort(1,0,market);  //止损
        mark1:=1;  //标记止损
end

//止损后开仓
cond_buyshort3:=close<=one_enterprice1+s_atr*atr;  //止损后反弹至2倍atr后重新开空仓
if mark1=1 and cond_buyshort3 then begin
        反弹开仓1:buyshort(holding=0,amounts,market); //反弹开仓
        mark1:=0;
end

//买入平仓
cond_sellshort1:=cross(diff,dea); //金叉
cond_sellshort2:=dwn/close>=s_out; //最新价突破boll下轨超过5%
if holding<0 and enterbars>0 and (cond_sellshort1 or cond_sellshort2) then begin
        sellshort(1,0,market); //平空仓
end

持仓:holding,linethick0;
//资产:asset,noaxis;
//可用现金:cash(0),linethick2,coloryellow,noaxis;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

x
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-10-27 15:26 | 显示全部楼层
具体什么问题?你这个找出一个具体案例来参考才行。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

33

主题

145

帖子

145

积分

等级: 免费版

注册:
2023-10-12
曾用名:
 楼主| 发表于 2023-10-27 15:49 | 显示全部楼层
这个看资产曲线就比较明显了,这个策略是个趋势交易系统,第一张图是纯多头的,资产资线和基准曲线贴合的就比较好,第二张图是多空的,我理解应该当基准走出趋势行情(无论哪个方向)的时候,资产曲线应该也是上涨的才对,实际上好像并非如此,交易信号细节上因为比较混乱,我得找找看。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

x
回复

使用道具 举报

33

主题

145

帖子

145

积分

等级: 免费版

注册:
2023-10-12
曾用名:
 楼主| 发表于 2023-10-27 16:26 | 显示全部楼层
比如这处了,空头交易的时候,图表中三处止损的价格明显不一致,和多头一样我的想法就是enterprice限定为入场时的入场价,而不包括反弹止损后的入场价;这个在空头的时候我参照多头使用one_enterprice1进行了标记,好像不管用。。

对了,还有个先平后开的问题,我在买入和卖出开仓的时候都进行了先平仓操作,但是在止损后开仓的时候并没有设置先平仓指令,这个是可以的么

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

x
回复

使用道具 举报

37

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-10-30 08:43 | 显示全部楼层
PIN 发表于 2023-10-27 16:26
比如这处了,空头交易的时候,图表中三处止损的价格明显不一致,和多头一样我的想法就是enterprice限定为入 ...

如果你不止第一次开仓时需要记录开仓价,还需要在其他开仓条件下进行记录的话,只需要在需要记录的开仓条件语句后面对one_....变量进行赋值即可。(你需要消化掌握全局变量的用法)
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-1 21:05 , Processed in 0.097663 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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