本帖最后由 技术009 于 2023-4-20 13:53 编辑
白盘获取开盘价的代码我调整了,目前是正常的。稍后给你。但是在此之前,根据我对你这个策略思路的理解,有几个和你这个策略相关的建议:
1.用在小周期上,不要在大周期上。因为你这个取的价格是白盘开盘的,刚好在一个大周期内K,其实取9点价格这个不是问题,大不了跨周期。但是我觉得存在问题是:
你大周期最高或者最低价可能是夜盘时候出现的,这样你在包含9点的那个K上 信号是可能失真的。
2.你用大周期 我的理解是你要限制交易的次数,这个在小周期上也是可以的。我可以在小周期上判断当前小周期在哪个大周期跨度下(跨周期调用大周期的K线时间即可),如果是我在这个跨度内 开过仓了,那我不重复开仓。 简单说 小时K:9:00-10:00 。如果在小周期上9:15 时候开仓了,那么必须要到10点后 再次上穿或者下穿价格 我再开仓。
以上2条建议 你酌情考虑。
然后代码我可以直接给到你,小周期运行的代码:
[PEL] 复制代码 input:y(2023,1900,3000,1),m(4,1,12,1),d(17,1,31,1);//参数控制年月日
INPUT:bar(120,1,300,1);
xd:=1;//这里修改开仓数量;
jiange:=20;
dcon:=barslast(year>=y and month>=m and day>=d)=0;
dt:=cross(dcon,0);
//定位判断位置,小周期上有效
tcond:=(cross(time,130000) and OPENTIME(1)<130000) or (cross(190000,time) and time>130000);
LEN:=TRADINGDATEDIFF(VALUEWHEN(dt,DATE),DATE);//间隔交易日
OO:valuewhen(LEN>=0 and tcond,OPEN);
TODAYBAR2:BARSLAST(tcond);//距离9点K的周期跨度
//整小时K的标记,对应Bar参数,bar是120那就是2小时,180那就是三小时
K_mark:=mod(TODAYBAR2,bar)=0;
//距离小时周期整点的小周期跨度
Lenx:=BARSLAST(K_mark);
AA002:=h>OO;//大于显示面
BB002:=l<OO;//小于显示面
if AA002 and count(AA002,Lenx+1)=1 then begin
sellshort(holding<0,holding,market),ORDERQUEUE;
buy(holding=0 and LEN<JIANGE,xd,market),ORDERQUEUE;
end
if BB002 and count(BB002,Lenx+1)=1 then begin
sell(holding>0,holding,market),ORDERQUEUE;
buyshort(holding=0 and LEN<JIANGE,xd,market),ORDERQUEUE;
end
if len=jiange then
begin
到期平多:sell(holding>0,holding,market);
到期平空:sellshort(holding<0,holding,market);
end
持仓:holding;
|