读光大证劵“股指期货微观市场初探—高频数据、交易的解读”笔记
/*交易信号1:
根据每笔交易价格与交易前报价的关系确定此笔交易的触发方向,即买方触发还是卖方触发。
如价格与买一接近,则此单被定为卖单触发;如价格与卖一接近,则被定为买单触发。
如价格与买一和卖一距离相等,则不确认这单的触发方向。
*/
data trade_test1;
set m_test;
by time1;
length flag1 $8.;
if abs(price-b_price) < abs(price - s_price)
then flag1 = "卖单触发";
else if abs(price - b_price) = abs(price - s_price)
then flag1="不触发";
else flag1 = "买单触发";
run;
/* 其次,我们比较成交单量与报价单量的关系。如成交单量比买一和卖一的
报价单量都大的时候,我们认为初步信号确立,期指市场有可能遵循着此
笔成交的触发方向进行变动。*/
data trade_test2;
set trade_test1;
length flag2 $12.;
if volume gt max(of b_volume,s_volume) then flag2="初步信号确认";
else flag2="无信号";
run;
/* 最后,我们比较当前成交价与近10 笔成交价的算术平均值,如果成交价超
平均值0.2个点,且为买方触发并满足初步信号条件则买入信号确认;如果成交价低与平均值0.2个点,
且为卖方触发并满足初步信号条件则卖出信号确认。
*/
proc expand data=trade_test2 out=trade_test3 method=none;
convert price=ma_price / transformout=(movave 10);
run;
data trade_test4;
set trade_test3;
length flag3 $12.;
retain flag3;
if price gt (ma_price+0.2) & flag1="买单触发" & flag2="初步信号确认" then flag3="买入信号确认";
else if price lt (ma_price-0.2) & flag1="卖单触发" & flag2="初步信号确认" then flag3= "卖出信号确认";
else flag3="无操作";
run;
data trade_test5;
set trade_test4;
by flag3 notsorted;
length flag4 $12.;
if first.flag3 then do;
if flag3 = lag2(flag3) then flag4="无操作" ;
else flag4=flag3;
end;
else flag4="无操作";
run;
/*
在对信号的产生进行统计后发现,此类信号发生的频率过高,平均每日的
换手率高达上千次。过多的信号将会造成频繁的交易,因此必须选用一些
手段来降低信号产生的频率。由前述的测试发现,样本内信号发生后大约
十笔交易时,买卖信号的差异最为明显。因此我们认为信号合理的持续时
间应该为十笔交易,十笔交易之内如无新的信号产生,交易应该结束。十
笔内如有新的信号产生,则新的信号将取代旧的信号,信号持续时间也将
重新开始计算
data trade_test5;
set trade_test4;
length flag $8.;
if flag3=lag(flag3)=lag2(flag3)=lag3(flag3)=lag4(flag3)=lag5(flag3)=lag6(flag3)
=lag7(flag3)=lag8(flag3)=lag9(flag3)=lag10(flag3)="无操作"
then flag="平";
else if flag3=lag(flag3) or
flag3=lag2(flag3) or
flag3=lag3(flag3) or
flag3=lag4(flag3) or
flag3=lag5(flag3) or
flag3=lag6(flag3) or
flag3=lag7(flag3) or
flag3=lag8(flag3) or
flag3=lag9(flag3) or
flag3=lag10(flag3)
then flag="无操作" ;
else flag=flag3;
run;
*/