/*俞高2012年10月15日 1) 高低点比较策略 通常人们判断趋势处于上升的理由是,当前低点比前一个低点要高,当前高点也比前一 个高点要高。判断趋势处于下跌的理由是,当前低点比前一个低点要低,当前高点也比前一 个高点要低。如果仅仅以高低点的比较去判断趋势的涨跌,这样的情况一天内会发出上百次 而导致交易过于频繁。而且很多高低点之间的价格差距并不大,就是说,有时几乎没有上升, 或者上升幅度很小却被判断为上升趋势;或者有时几乎没有下跌或者下跌幅度很小,结果却 被判定为下跌趋势。我们需要一个度量上升和下跌速度的方法。所以必须引入时间这个变量。 引入时间这个因素是基于这样的考虑:股价经过很短时间就有明显上涨和股价经过较长时间才 上涨同样幅度,这显然是不一样的,时间短的上涨说明上升趋势比同样幅度上涨需要较长时 间的更加明显。所以我们设置一个根据时间变动的附加项drift,来对简单的高低点策略进行 完善。 最后的策略分三种情况: ? 建空仓策略:当前高点低于前一个高点,并且低于前一个高点减去附加的漂移项,这个 漂移项等于shift*Time。其中shift 作为整个策略的参数,可以进行优化和人工设置,而 Time 则是两个高点之间所经过的时间,在本文中就是经过了多少个6 秒。 ? 建多仓策略:当前低点高于前一个低点一定幅度,这个幅度等于shift*Time,为了测试 方便,这里将建多仓的shift 参数和建空仓的shift 参数设定为相同。如果对于大势走向 比较明确,可以考虑将这个shift 参数和建空仓的参数设置为不同,但是这样对于优化 的工作量,会成倍增加。 ? 平仓策略:平仓分为多平和空平,但它们的策略都基本一致。以空平为例:如果当前高 点处于前一个高点两条斜线之间则平仓,这两条斜线是从前一个高点引出的加减drift 项射线。多平也是同样的思路。*********************************************/ %macro compare_test(shift=,time=) ; data trading_test1 ; set filtrate_test1; by flag notsorted; length flag1 $8.; if last.flag and flag=1 then do; if ma_price < lag(ma_price) - (&shift*(&time)) then flag1="建空仓"; else if lag(ma_price) -(&shift*(&time)) < ma_price < lag(ma_price) + (&shift*(&time)) then flag1="空平" ; end; if last.flag and flag=-1 then do ; if ma_price > lag(ma_price) + (&shift*(&time)) then flag1="建多仓"; else if lag(ma_price) - (&shift*(&time))< ma_price < lag(ma_price) + (&shift*(&time)) then flag1="多平";; end; run; %mend; %compare_test(shift=0.2,time=6); /****2) 高低点突破策略 行情中还容易出现另外一种典型的情况,以下跌为例,就是直接从一个最高点开始形成 一个主跌段,但是并没有出现连续的高点。如果只用高低点比较的策略,就无法捕捉到此次 卖空机会。高低点突破策略具体如下: ? 建空仓策略:如果滤波后均线往下突破了前一个低点减去漂移项drift_down 的延伸线 和滤波后均线的交叉点, 那么则认为在突破位置出现了一个卖空点。其中 drift_down=downshift*Time,Time 和高低点比较策略里面的值一样,dwonshift 作为参 数输入,这个可以设置为和shift 一样,也可设置为不同。一般在下跌趋势比较明显的 时候可以设为较小的值。 ? 建多仓策略:如果滤波后均线往上突破了前一个高点加上漂移项drift_up 的延伸线和滤 波后均线的交叉点, 那么则认为在突破位置出现了一个买入点。其中 drift_up=upshift*Time,Time 和高低点比较策略里面值相同,upshift 作为参数输入,可 设置为与shift 和dwonshift 不同的值。一般在上涨趋势较明显时可以设为较小的值。 ? 平仓策略:多平的条件是三个:一是之前是多仓,二是当前趋势是向下,三是价格突破 前一个低点的上面一条斜线。空平的条件也是三个:一是之前是空仓,二是当前趋势是 向上,三是价格突破前一个高点的下面一条斜线。另外的一种平仓情况是,当持有多仓 又直接遇到需要开空仓的条件,则先平仓再开空仓。持有空仓的情况类似。************/ %macro tupo_test(shift=,time=) ; data trading_test2 ; set filtrate_test1; by flag notsorted; length flag1 $8.; if last.flag and flag=1 then do; if ma_price < lag(ma_price) - (&shift*(&time)) then flag1="建空仓"; else if lag(ma_price) -(&shift*(&time)) < ma_price < lag(ma_price) + (&shift*(&time)) then flag1="空平" ; end; if last.flag and flag=-1 then do ; if ma_price > lag(ma_price) + (&shift*(&time)) then flag1="建多仓"; else if lag(ma_price) - (&shift*(&time))< ma_price < lag(ma_price) + (&shift*(&time)) then flag1="多平";; end; run; %mend; %tupo_test(shift=0.2,time=6);
3)9.15--9.45集合竞价高频数据的高低点突破策略:突破1分K线高点就多开,跌破1分K线低点就空开; data test ; set test; by date time2 ; length flag $8.; if last.time2 then do; select; when ( dif(high) > 0 & dif(low)> 0 ) flag ='多开'; when ( dif(high) < 0 & dif(low)< 0 ) flag ="空开"; otherwise flag=" "; end; end; run; *计算收益率; data test1; set test; if flag^= '' then output; run; data test1; set test1; by flag notsorted; if first.flag then output; run; data test2; set test1; by date; r=dif(price)/lag(price); if first.date then r=0; format r percentn8.2; run; *统计描述;proc univariate data=test2;var r;run;