自己瞎想的策略,做成伪代码,请高手们来编写一下。
昨天真实波幅大于前五天真实波幅的3倍今天不开仓(5天指的是日周期),如小于则:
当天开盘价大于昨收盘价
空仓情况下
最高价突破上轨做多(上轨价委托),上轨:hhv(h,20);
最低价下穿下轨做空(下轨价委托),下轨:昨天最低
当天开盘价小于昨收盘价
空仓情况下
最高价突破上轨做多(上轨价委托),上轨:昨天最高
最低价下穿下轨做空(下轨价委托),下轨:llv(l,20);
不管当天开盘价是否大于或小于昨天收盘价,持有多仓时
最高价大于 开仓价+5天(日周期)真实波幅均值的3倍止盈(收盘价委托);
上一根收盘价小于多头止损价(开盘价委托),多头止损:max(llv(l,10), max(今开盘,(昨日最高+昨日最低)/2)) //三者最高
最低价突破下轨反手做空(下轨价委托),下轨:max(昨日最高-(昨天最高-昨天最低),昨日最低);
不管当天开盘价是否大于或小于昨天收盘价,持有空仓时
最低价小于 开仓价-5天(日周期)真实波幅均值的3倍止盈(收盘价委托);
上一根收盘价大于空头止损价(开盘价委托),空头止损:min(hhv(h,10),min(今开盘,(昨日最高+昨日最低)/2))//三者最低
最高价突破上轨反手做多(上轨价委托),上轨:min(昨日最低+(昨日最高-昨天最低),昨日最高);
写完鸟~~~
首先建立一个名为F117的公式用来引用数据:
bf1:ref(tr,1),linethick0;
bf5:ref(tr,5),linethick0
然后另外建立个公式写:
n:barslast(date<>ref(date,1)),linethick0;
jk:ref(o,n),linethick0;//今开
tt1:stkindi('if00','F117.bf1',0,6,0),linethick0;//昨天振幅
tt2:stkindi('if00','F117.bf5',0,6,0),linethick0;//前5天振幅
zs:callstock('if00',vtclose,6,-1),linethick0;//昨收
zd:callstock('if00',vtlow,6,-1),linethick0;//昨低
zg:callstock('if00',vthigh,6,-1),linethick0;//昨高
sg:ref(hhv(h,20),1),linethick0;//上轨
xg:ref(llv(l,20),1),linethick0;//下轨
if tt1>3*tt2 then exit;//昨天真实波幅大于前五天真实波幅的3倍今天不开仓
//predayhigh:valuewhen(date<>ref(date,1),ref(hhv(h,n+1),1)),linethick0;非引用的昨高
//predaylow:valuewhen(date<>ref(date,1),ref(llv(l,n+1),1)),linethick0;非引用的昨低
//predayclose:valuewhen(date<>ref(date,1),ref(c,1)),linethick0;非引用的昨收
if jk>zs and h>sg then begin
buy(holding=0,1,thisclose);
end
//最高价突破上轨做多(上轨价委托),上轨:hhv(h,20);
if jk>zs and l<zd then begin
buyshort(holding=0,1,thisclose);
end
//最低价下穿下轨做空(下轨价委托),下轨:昨天最低
if jk<zs and h>zg then begin
buy(holding=0,1,thisclose);
end
//最高价突破上轨做多(上轨价委托),上轨:昨天最高
if jk<zs and l<xg then begin
buyshort(holding=0,1,thisclose);
end
//最低价下穿下轨做空(下轨价委托),下轨:llv(l,20);
if h>enterprice+3*tt2 then sell(holding>0,0,thisclose);//多头止盈
if ref(c,1)<max(ref(llv(l,10),1),max(jk,(zg+zd)/2)) then sell(holding>0,0,limitr,open);//多头止损
if l>max(zg-(zg-zd),zd) then begin
sell(holding>0,0,thisclose);
buyshort(holding,0,limitr,max(zg-(zg-zd),zd));
end //反手做空
if l<enterprice-3*tt2 then sellshort(holding<0,0,thisclose);//空仓止盈
if ref(c,1)>min(ref(hhv(h,10),1),min(jk,(zg+zd)/2)) then sellshort(holding<0,0,limitr,o);//空仓止损
if h>min(zd+(zg-zd),zg) then begin
sellshort(holding<0,0,thisclose);
buy(holding=0,1,limitr,min(zd+(zg-zd),zg));
end//反手做多