现在的位置: 首页 > 综合 > 正文

高低点比较、突破策略 using sas

2018年10月20日 ⁄ 综合 ⁄ 共 2946字 ⁄ 字号 评论关闭
/*俞高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;

抱歉!评论已关闭.