一般说的偷价是怎么回事,我还不明白,可以具体说一下这个偷价吗
这个直接看下面这段:
“
如果一个交易策略要求你利用信号触发前的价格进行交易,那么这个交易策略就存在偷价的问题。偷价发出的交易信号不会消失,但是你已经没有机会利用这个信号进行交易了。
例如,信号可能提示,如果当天收盘价高于前一天最高价,则利用当天开盘价进行买入,而在开盘价成交已经几乎是不可能的事情了。
”
大致是这么个意思。
我想用两个开仓条件,kd1,kd2两个开仓条件,但是,总仓位不受影响,比如,kd1开仓了,但在kd1没有平仓之前,kd2不开仓,在空仓情况下,kd1,kd2,谁先达到开仓条件就谁先开仓,依然保持一个仓位
参考这个范例。
VARIABLE:mark:=0;
ma5:ma(c,5);
ma10:ma(c,10);
//开平条件1
majc:cross(ma5,ma10);
masc:cross(ma10,ma5);
input:n(9,1,100,10),p1(3,2,40,4),p2(3,2,40,4);//参数设置
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:=SMA(RSV,P1,1);
D:=SMA(K,P2,1);
J:=3*K-2*D,NODRAW;
//开平条件2
kdjjc:cross(k,d),NODRAW;//kdj金叉
kdjsc:cross(d,k),NODRAW;
if majc and holding=0 and mark=0 then
begin
mak:buy(1,1,market);
mark:=1;
end
if kdjjc and holding=0 and mark=0 then
begin
kdk:buy(1,1,market);
mark:=2;
end
if masc and holding>0 and mark=1 then
begin
map:sell(1,holding,market);
mark:=0;
end
if kdjsc and holding>0 and mark=2 then
begin
kdp:sell(1,holding,market);
mark:=0;
end
就是用一个全局变量在开仓时候纪录下。平仓时候判断下全局变量值情况,并且在平仓时重置全局变量。
如果价格超出当前K价格范围,不用的话 就不会出信号。想要出信号,就这么个办法,这个函数就是为了解决这个问题的。
KD:CROSS(C,MA(C,10))AND Y0>Y1 C>MA(C,10)*1.00080;//开仓条件
开仓数值:=MAX(REF(MA(C,10),1),(MA(C,5)*1.0020));//数值
PD:CROSS(MA2,C)and C<MA2*0.90 ;//平仓条件
平多:SELL(PD,holding,market);//平多信号1
开多:buy(KD and holding=0,3,limit,开仓数值),IGNORECHECKPRICE;//开仓信号
hd:holding;
2021-04-26 21:44:58
13163333136 : RB10 - 已报单 3 价格:5388 开 买
2021-04-26 21:45:14
13163333136 : RB10 - 已报单 3 价格:5391 开 买
2021-04-26 21:45:14
13163333136 : rb2110 - 已成交 3 价格:5391 开 买
2021-04-26 21:45:14
13163333136 : rb2110 - 全部成交 3
2021-04-26 21:46:37
13163333136 : RB10 螺纹钢2110 - 已撤单 量:3
为什么会重复开仓?