本帖最后由 技术009 于 2023-4-20 14:30 编辑
这个价格区间 是和当前图上最高最低价有关(不是图上加载数据量最高最低价,仅仅是视图范围内,这个是有区别的),但是具体坐标网格算法是系统底层实现的,这一块没有相关资料,所以无法按照系统的这个方式去切分。 另外你伸缩图表后,这个区间是会变的,其实不适合按照这个方式做一个网格的系统。
如果你需要一个网格系统
1.可以考虑下系统自带的网格交易系统。
https://www.weistock.com/docs/HE ... BA%A4%E6%98%93.html
2.可以提供一个范例网格。你在这个基础上进行细节的调整
[PEL] 复制代码 INPUT:DIF(5,1,1000,1),SS(1,1,1000,1);//DIF为网格间隔参数,单位是最小变动价位;SS是手数参数
VARIABLE:levelb:=-1,levels:=-1;//全局变量用来记录最近一次 买和卖 时候的价位所在的档位。
//网格边界,可自行定义H1,L1的计算逻辑,但是务必要在H1,L1变化时候 进行仓位或者全局变量的重置。
L1:CALLSTOCK('',vtLOW,6,-1);//网格上限
H1:CALLSTOCK('',vtHIGH,6,-1);//网格下限
if TODAYBAR=1 then //开盘初始化一次
begin
levelb:=-1;
levels:=-1;
end
//这2个值反应了当前收盘价 距离上下限 的间隔数
level1:FLOOR((H1-c)/DIF);//当前价格从最高点回落的 档位,数值变小是价格上涨
level2:FLOOR((c-l1)/DIF);//当前价格从最低点上涨的 档位,数值变小是价格下跌
if levelb=-1 then levelb:=max(1,level1);
if levels=-1 then levels:=max(1,level2);
upprice:=H1-(max(levelb,level1))*DIF;//跌破这个价格买入,每次买后,levelb升一档。考虑到价格可能不连续变化,实际取(上次记录的档位,当前实际档位)最大值计算价格
dnprice:=L1+(max(levels,level2))*DIF;//突破这个价格卖出,每次卖后,levels升一档。
买:=c<=upprice and levelb>=0 and level2>0 ;
卖:=c>=dnprice and HOLDING>0 and levels>=0;
if 卖 then
begin
sell(1,SS,market);
levels:=level2+1;
end
if 买 then
begin
buy(1,SS,market);
levelb:=level1+1;
end
if time=CLOSETIME(0) then
begin
收盘平仓:sell(1,holding,market);
END
|