想写一个根据sar操作的模型,sar大家都知道显示为两类移动止损点,一种是空头一种是多头(在文华里面空头移动止损点显示为绿色,多头为红色)
操作意愿是
1,账户空仓时,当指定周期某根k线最高点超过空头移动止损点就做多,或k线最低点低于多头移动止损点做空。
2,账户持有多单时,当k线最低点低于多头移动止损点时平多开空。
3,账户持有空单时,k线最高点超过空头移动止损点时平空翻多。
现在模型出现的问题是,系统将sar两类移动止损点看成是一种,所以当某根k线最高点超过sar和最低点低于sar都发生时,会出现开多平空和平多开空同时操作。(如图)
请老师帮忙看看系统应该怎样写好,不胜感激。
以下是程序
开始:SAR(P,STEP,MAXP),CIRCLEDOT;
h1:h;
h2:l;
SARLINE:ABS(SAR(P,STEP,MAXP));//定义SARLINE
手数:=ss;
kdpk:=H>SARLINE;//开多平空条件
kkpd:=l<SARLINE;//开空平多条件
//交易系统
if kdpk then begin
sellshort(holding<0,holding,MARKET);
buy(holding=0,ss,MARKET);
end
if kkpd then begin
sell(holding>0,holding,MARKET);
buyshort(holding=0,ss,MARKET);
end
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;
非常感谢!
你这个是思路问题吧,
H>line
l<line
这两个条件同时满足了,所以才在一根k线上同时做了双向操作
反过来写就不会了
h<line
l>line
如果这样改就变成反向做单了,根本来的买卖相反,而且还是会有那个现象。我的本意是碰到sar信号就做一次反手。
if kkpd then begin
sell(holding>0,holding,MARKET);
buyshort(holding=0,ss,MARKET);
end
改写成
if kdpk then begin
sellshort(holding<0 and enterbars>0,holding,MARKET);
buy(holding=0 ,ss,MARKET);
end
if kkpd then begin
sell(holding>0 and enterbars>0,holding,MARKET);
buyshort(holding=0,ss,MARKET);
end
加了enterbars判断之后,能不在同根k线上做多次平仓