本帖最后由 技术009 于 2023-7-6 15:24 编辑
以下是一个简单的在图表程序化上实现的网格交易策略,本策略仅供大家作为实现网格策略的思路参考。大家在实际编写中可以参考范例的思路,自行调整网格交易策略的几个核心要素(品种,价格区间,网格间隔,买卖逻辑)来实现自己的交易策略。实际交易中通常是建议大家在后台程序化使用小周期和较小的轮训间隔来运行网格策略 ,范例里的图表代码经过简单调整也可以在后台上运行:
[PEL] 复制代码 input:dif(5,1,1000,1);//dif为网格间隔参数,单位是最小变动价位;按照此间隔来划分价格区间(也可以按照指定的网格数量来划分价格区间)
input:ss(1,1,1000,1);//ss是手数参数
variable:level:=-1;//全局变量用来记录最近一次 买和卖 时候的价位所在的档位。
//确定网格价格边界。可自行定义价格区间的计算逻辑,但是务必要在价格区间发生变化的时候 进行仓位处理或者全局变量的重置。
h1:=callstock('',vthigh,6,-1);
l1:=callstock('',vtlow,6,-1);
//以昨日最高最低价为基准,上下轨数值调整为 dif整数倍
up:(floor(h1/(dif*mindiff))+1)*(dif*mindiff);//上轨
down:(floor(l1/(dif*mindiff)))*(dif*mindiff);//下轨
//划分出来总的层数
r:(up-down)/(dif*MINDIFF),NODRAW;
if todaybar=1 then //开盘初始化一次
begin
level:=-1;
end
n:floor((up-c)/(dif*mindiff)),nodraw; //当前价格在上轨下 n个dif 之下位置
if level=-1 then level:=max(0,n);
买:=level<n and level>0 and n<r;
卖:=holding>0 and level>0 and n<level;
if 卖 then
begin
sell(1,holding,marketr);
level:=n;
end
if 买 then
begin
buy(1,ss,marketr);
level:=n;
end
if time=closetime(0) then
begin
收盘平仓:sell(1,holding,market);
end
|