IF HOLDING>0 AND ENTERBARS>0 AND KDYL>0 AND KDYL>ENTERPRICE*0.05 AND C<ENTERPRICE+KDZY THEN //开多移动止损
BEGIN
//SELL(1,手数,LIMITR,KDZY+ENTERPRICE);
平多1:SELL(1,手数,MARKET);
FLAG:=1;
END
ELSE
BEGIN
平多0:SELL(平多条件 AND HOLDING>0,手数,MARKET);
FLAG:=0;
END
信号已经出现平多1和平多0,但是flag的作用并没有体现:
IF CROSS(EXITPRICE,C) AND FLAG=1 THEN 开空1:BUYSHORT(1,手数,MARKET);
ELSE 开空0:BUYSHORT(开空条件 AND HOLDING>=0 AND FLAG=0,手数,MARKET);
IF CROSS(C,EXITPRICE) AND FLAG=1 THEN 开多1:BUY(1,手数,MARKET);
ELSE 开多0:BUY(开多条件 AND HOLDING<=0 AND FLAG=0,手数,MARKET);
开仓的条件是这样的,但是开仓的条件一直都没有开空1或者开空2
此主题相关图片如下:微信截图_20160811150333.png
a:CROSS(EXITPRICE,C) AND FLAG=1
通过这个方式输出你的条件,看是否成立,成立是1,不成立是0.
不成立的话,将条件拆分后输出,看具体是哪一项条件不成立
进一步去分析自己的代码
a:CROSS(EXITPRICE,C) AND FLAG=1
通过这个方式输出你的条件,看是否成立,成立是1,不成立是0.
不成立的话,将条件拆分后输出,看具体是哪一项条件不成立
进一步去分析自己的代码
我就是因为输出了,看了全部都是0所以才奇怪
a:CROSS(EXITPRICE,C) AND FLAG=1
通过这个方式输出你的条件,看是否成立,成立是1,不成立是0.
不成立的话,将条件拆分后输出,看具体是哪一项条件不成立
进一步去分析自己的代码
查出来了,就是flag=1这个条件一直不成立
这个一个调试方法。不符合,你就接着找上面的条件。找的具体想进行分析判断。
或者你贴出完整的代码。
这个一个调试方法。不符合,你就接着找上面的条件。找的具体想进行分析判断。
或者你贴出完整的代码。
上面那段我也贴出来了,就是这样的:
IF HOLDING>0 AND ENTERBARS>0 AND KDYL>0 AND KDYL>ENTERPRICE*0.05 AND C<ENTERPRICE+KDZY THEN //开多移动止损
BEGIN
//SELL(1,手数,LIMITR,KDZY+ENTERPRICE);
平多1:SELL(1,手数,MARKET);
FLAG:=1;
END
ELSE
BEGIN
平多0:SELL(平多条件 AND HOLDING>0,手数,MARKET);
FLAG:=0;
END
既然平多1都成立了,为什么flag:=1不成功呢
HOLDING>0 AND ENTERBARS>0 AND KDYL>0 AND KDYL>ENTERPRICE*0.05 AND C<ENTERPRICE+KDZY
这些条件输出是1吗?
HOLDING>0 AND ENTERBARS>0 AND KDYL>0 AND KDYL>ENTERPRICE*0.05 AND C<ENTERPRICE+KDZY
这些条件输出是1吗?
我找出来bug了,可能是因为金字塔的语言如果用在图表交易上的话每个变量的值的有效期只是这根K线,不像其他语言一样会储存应用的。因为我是想用flag标记这次的平仓的类型,然后开仓的信号会根据这些开仓的类型有不同的开仓条件,这样子能实现吗?
你没贴出完整代码,我们无法评估FLAG这个变量到底什么性质的,如果你是想像其他语言那样,你要将变量声明为全局变量才可以。
参考 VARIABLE
你没贴出完整代码,我们无法评估FLAG这个变量到底什么性质的,如果你是想像其他语言那样,你要将变量声明为全局变量才可以。
参考 VARIABLE
好的。其实就是金肯特纳加上止盈止损,大概说一下就是多的一个就是在止盈之后如果价格突破这个止盈的点位,继续做同方向的操作。
/////Bug:
//1、平多开空可能在同一天
//2、flag只能用在一根K线上,值不能延续
//中间变量
INPUT:N(40,1,100,10),SS(1,1,10000,1);
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
手数:=SS;
FLAG:=2;
MA1:REF(MA(((H+L+C)/3,N)),1);//三价平均线
浮动区间:=REF(MA(TR,N),1);//真实振幅的移动平均线
上轨:MA1+浮动区间;
下轨:MA1-浮动区间;
//交易条件
开多条件:=MA1>REF(MA1,1) AND C>上轨;
开空条件:=MA1<REF(MA1,1) AND C<下轨;
平多条件:=C<MA1;
平空条件:=C>MA1;
//止损
IF HOLDING<0 AND (H-ENTERPRICE>ENTERPRICE*0.05) THEN
BEGIN
平空2:SELLSHORT(1,手数,LIMITR,ENTERPRICE*(1+0.05)); ///5%止损
FLAG:=0;
END
IF HOLDING>0 AND (L-ENTERPRICE<-ENTERPRICE*0.05) THEN
BEGIN
平多2:SELL(1,手数,LIMITR,ENTERPRICE*(1-0.05));
FLAG:=0;
END
//止盈
//1、最大获利点数
KDYL:=HHV(H,ENTERBARS)-ENTERPRICE;
KKYL:=ENTERPRICE-LLV(L,ENTERBARS);
IF HOLDING<>0 AND ABS(C-ENTERPRICE)>=ENTERPRICE*0.3 THEN P:=20; //如果盈利20%以上回撤10%止盈
IF HOLDING<>0 AND ABS(C-ENTERPRICE)<ENTERPRICE*0.3 AND ABS(C-ENTERPRICE)>ENTERPRICE*0.05 THEN P:=20; //如果盈利小于20%,回撤5%止盈
//2、计算跟踪止盈价位,向价格不利方向取p%
KDZY:=FLOOR(KDYL*(1-P/100));
KKZY:=CEILING(KKYL*(1-P/100));
IF HOLDING<0 AND ENTERBARS>0 AND KKYL>0 AND KKYL>ENTERPRICE*0.05 AND C>ENTERPRICE-KKZY THEN //开空移动止损
BEGIN
//SELLSHORT(1,手数,LIMITR,ENTERPRICE-KKZY);
平空1:SELLSHORT(1,手数,MARKET);
FLAG := 1;
END
ELSE
BEGIN
平空0:SELLSHORT(平空条件 AND HOLDING<0,手数,LIMITR,MA1);//SELLSHORT(平空条件 AND HOLDING<0,手数,MARKET);
FLAG:=0;
END
IF HOLDING>0 AND ENTERBARS>0 AND KDYL>0 AND KDYL>ENTERPRICE*0.05 AND C<ENTERPRICE+KDZY THEN //开多移动止损
BEGIN
//SELL(1,手数,LIMITR,KDZY+ENTERPRICE);
平多1:SELL(1,手数,MARKET);
FLAG:=1;
END
ELSE
BEGIN
平多0:SELL(平多条件 AND HOLDING>0,手数,MARKET);
FLAG:=0;
END
IF CROSS(EXITPRICE,C) AND FLAG=1 THEN 开空1:BUYSHORT(1,手数,MARKET);
ELSE 开空0:BUYSHORT(开空条件 AND HOLDING>=0 AND FLAG=0,手数,MARKET);
IF CROSS(C,EXITPRICE) AND FLAG=1 THEN 开多1:BUY(1,手数,MARKET);
ELSE 开多0:BUY(开多条件 AND HOLDING<=0 AND FLAG=0,手数,MARKET);
{BUYSHORT(开空条件 AND HOLDING>=0,手数,MARKET);
BUY(开多条件 AND HOLDING<=0,手数,MARKET);}
tiajian :HOLDING>0 AND ENTERBARS>0 AND KDYL>0 AND KDYL>ENTERPRICE*0.05 AND C<ENTERPRICE+KDZY,COLORGRAY,LINETHICK0;
信号:FLAG,COLORGRAY,LINETHICK0;
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;//输出当前资产,但不影响坐标最高最低值