股票程序化

一、T+1 股票程序化交易
      1、程序化选股
           案例1:选出N日内上涨天数多于下跌天数的股票
      2、T+1运行模组:对选好的股票进行程序化交易
           案例2:均线和布林通道趋势交易系统
      3、T+1交易池:对一篮子股票进行程序化交易
            案例3:利用KDJ模型高抛低吸

二、T+0 股票程序化交易
      1、T+0运行模组:散户对被套股票进行日内交易,减少亏损
            案例4:日内新低做空策略
      2、T+0交易池:机构用来盘活持仓,创造附加利润
            案例5:‘曙光初现’K线形态
            案例6:均线、MACD等多策略



程序化交易在境外的股票市场和国内的期货市场已经得到广泛的应用,如果能将这种交易理念引入到股票交易中,会取得更好的收益。 股票程序化的优势体现在以下几点:
1、股票程序化可以针对一篮子股票进行程序化交易,通过这种交易的方式,投资者可以在分散风险的同时使资金使用率达到最大化。
2、在持有股票的情况下,股票程序化可以实现股票的T+0交易,盘活持仓,增加收益。
3、程序化交易利用计算机高速、快捷的处理能力,抓住股市上价格的瞬间变化,获得利润。


一、T+1 股票程序化交易


传统的股票交易在买入股票后,持有相当长一段时间,赚取长期趋势的利润。但持有的股票完全暴露于市场风险之下,也放弃了从市场环境中短期的变动中获利的可能;长期持有期间,资金一直处于占用状态,大大降低了资金的使用效率。用程序化交易的方式,可以帮助我们识别和利用市场的中短期价格波动,实现在波段中低买高卖,赚取更多利润。


1、程序化选股

公式选股是我们在股票交易过程中常用的工具,是否能选出入场位置优越的股票,是评判选股公式优劣的唯一标准。我们如果确定一个选股公式是否有效呢?下面我们看看如何使用选股回测功能对选股公式进行历史检测的。


案例1:选出N日内上涨天数多于下跌天数的股票

利用选股公式,选出指定的历史时间段中每天符合选股条件的股票,并且可以逐日查看股票明细及K线图

如:选出满足5日内阳线根数多于阴线的股票
选股公式:COUNT(ISDOWN,5)<COUNT(ISUP,5), SELECT;
步骤如下图:


还可以在这次选股结果的基础上,进一步使用其他选股公式进行筛选
选股公式:
B:=VOL>REF(VOL,1);
COUNT(B,3)=3, SELECT;
在进一步优选中选择该选股公式,即可之前选股基础上再次选股

我们通过对历史数据中选出的股票进行分析,便会很快的对选股公式进行判断,是否可以使用或者是否需要进一步优化等。


注:
1、编写选股公式时,选股条件需要用SELECT函数编写;
2、选股回测是基于日K线数据计算;
3、筛选结果是选择的日期对应的日K线满足条件的股票。


2、T+1运行模组:对选好的股票进行程序化交易


跟传统的股票持有方式相对,股票自动交易可以更加灵活的应对组合中各股票的价格波动,实现更多的买卖机会,创造更多利润。


案例2:均线和布林通道趋势交易系统

我们利用指数加权移动平均线和BOLL通道两种技术分析指标,构建双指标的趋势交易系统
如下:
UPPERMA:=EMA(HIGH,30);//计算30根K线最高价的EMA
LOWERMA:=EMA(LOW,30);//计算30根K线最低价的EMA
MID:=MA(CLOSE,26);//布林通道中轨
TMP2:=STD(CLOSE,26);
TOP:=MID+2*TMP2;//布林通道上轨
BOTTOM:=MID-2*TMP2;//布林通道下轨
C>UPPERMA&&C>TOP,BK(1000);//买入
L<LOWERMA&&L<BOTTOM,SP(AVAILABLE_OPI);//卖出
CROSSDOWN(C,BKHIGH-5),SP(AVAILABLE_OPI);//止损
AUTOFINANCING;//自动入金

回测效果:
将该策略在15只股票构成的股票组合中回测,在2011年-2016年中,该策略在股票篮子中的资金曲线与买入持有策略的资金曲线对比如下:



两种策略的收益情况对比如下:
买入持有策略 程序化波段交易
盈利率 资金占用天数占比 盈利率 资金占用天数占比
太原重工 -41.32% 100.00% 65.78% 41%
天成控股 23.22% 100.00% 36.28% 42%
东方航空 -1.31% 100.00% 37.56% 38%
宏图高科 73.96% 100.00% 123.87% 42%
西部资源 -10.15% 100.00% 22.22% 39%
金发科技 -24.61% 100.00% 2.88% 44%
中国船舶 -28.48% 100.00% 23.88% 32%
航天机电 -15.21% 100.00% 13.79% 46%
巨化股份 8.01% 100.00% 33.96% 39%
波导股份 122.31% 100.00% 200.19% 46%
中国平安 32.80% 100.00% 21.34% 35%
太极集团 104.30% 100.00% 130.57% 72%
宜华健康 520.71% 100.00% 648.96% 46%
中粮地产 64.91% p >100.00% 51.63% 41%
宁波联合 17.05% 100.00% 47.32% 44%

一篮子股票组合 14%   58%

加载运行:


步骤一:菜单栏》编写,选择批量回测的功能
步骤二:在股票篮子上点击右键》回测合约池
步骤三:回测完成后,在资金曲线右键》装入到模组,后台运行


加载完成后,在股票合约运行模组中,可以查看各模组运行情况,模组之间独立运行、互不干扰。由于模型中有AUTOFINANCING函数,各个模组按需自动入金,


3、T+1交易池:对一篮子股票进行程序化交易


股票交易池程序化是将一份资金分散投资到多支股票上,在降低投资风险的同时使资金使用率达到最大化。
交易池不同于模组,同一个交易池中的模型共用同一份资金,一个模型平仓后,释放的资金可以用于其他模型,一个交易池中的模型共同计算盈亏、资金,这样就实现了真正意义上的投资组合。


案例3:利用KDJ模型高抛低吸


在交易池中引入KDJ指标推测市场氛围,综合价量因素做出买卖决策。同时根据可用手数和持仓的盈亏情况进行买入卖出的操作,从而实现高抛低吸,赚取利润。
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;//KDJ指标
CROSS(C,SETTLE)&&VOL>MA(VOL,30)&&CROSS(K,D),BK(150);//买入
REFSIG_PRICE(SP,1)>BKPRICE&&CROSS(C,SETTLE)&&VOL>MA(VOL,30)&&CROSS(K,D),BK(100);
CROSSDOWN(C,SETTLE)&&VOL>MA(VOL,30),SP(AVAILABLE_OPI);//卖出
REFSIG_PRICE(SP,1)<BKPRICE&&ISLASTSP&&AVAILABLE_OPI>0,SP(AVAILABLE_OPI);
EVERY(SCALE<REF(SCALE,1),2)&&H>HV(H,30),SP(AVAILABLE_OPI);
REFSIG_PRICE(SP,1)<BKPRICE&&EVERY(H=L,2),SP(AVAILABLE_OPI);
AUTOFINANCING;//自动入金

交易池中的各个股票共用同一份资金,卖出股票后赚取的利润和释放的资金,可以用于买入其他股票。


加载运行:
步骤一:菜单栏》运行》股票账号T+1运行池
步骤二:新建交易池,填入交易池名称、资金、合约和模型等信息


二、T+0 股票程序化交易


合理利用规则,程序化交易模型把前一天的持仓卖掉当天再买回来,先卖后买一样可以日内盈利,变相实现了股票T+0交易。 散户可对被套股票进行日内交易,减少亏损;机构可盘活持仓,创造附加利润。


1、T+0运行模组:散户对被套股票进行日内交易,减少亏损

散户解套型T+0交易:普通散户可以利用被套牢的股票,根据当日的行情走势高抛低吸,变相实现T+0交易,减少亏损。这种交易方式是在一个交易日内先卖后买,一个交易日实际上只能进行一次完整的交易。


案例4:日内新低做空策略


在编写T+0交易的模型时,在模型中加入STOCKT0函数,可以将模型设置为日内模型,但是只能每天做一次完整交易(一次完整交易,是指底仓额底减少后,恢复到底仓额度为一次交易)。

我们利用下面模型进行T+0交易:
N:=BARSLAST(DATE< >REF(DATE,1))+1;
RC:=VALUEWHEN(DATE< >REF(DATE,1),REF(C,1));
OO:=VALUEWHEN(DATE< >REF(DATE,1),O);
DN:=VALUEWHEN(DATE< >REF(DATE,1),L);
OO<RC*(1-0.0001)&&C<DN&&N>=2,SK(1000); TIME>=1450,BP(1000);
STOCKT0;


注:

1.股票T+0必须在回测参数中设置底仓额度,底仓额度用尽不可以再卖出股票,底仓满额不可以再买入股票;
2.STOCKT0函数设置模型T+0标志,但是只能每天做一次完整交易(一次完整交易,是指底仓额底减少后,恢复到底仓额度为一次交易);
3.模型中的SK信号实际是卖出股票;BP信号实际是买入股票。当资金不够买入股票时,后续信号终止,不再计算信号;
4.当股票T+0遇到除权除息,股票股权登记日,就将股票还原回初始。后续可以继续重新开始出信号。此处出信号方式不受过滤非过滤影响。



加载运行:

步骤一:在回测参数中设置底仓额度、资金等内容
步骤二:将模型加载到主图中进行回测
步骤三:回测完成后,在K线图右键》装入到模组,后台运行


2、T+0交易池:机构用来盘活持仓,创造附加利润

一个大型机构,账户中有持仓,并且将长期持有,理论上,如果账户有足够的持仓数量,则可以实现足够次数的盘中T+0交易。
另外,根据现有的打新规则,必须根据资金配备一定市值的股票,这些股票往往长期持有。T+0交易可以盘活这些股票,实现盈利的增值。


案例5:‘曙光初现’K线形态


将“曙光初现”的K线形态作为买卖条件,模型如下。
REF(ISDOWN,1)&&ISUP&&O<REF(L,1)&&C>REF(C,1)+(REF(O,1)-REF(C,1))/2,BP(500);
REF(ISUP,1)&&ISDOWN&&O>REF(H,1)&&C<REF(O,1)+(REF(C,1)-REF(O,1))/2,SK(500);
STOCKT0_PLUS;//设置模型为T+0模式
AUTOFINANCING;//自动入金


回测效果:

将股票合约装入合约篮子中,使用批量回测的功能验证一下“曙光初现”策略在目前持有的各只股票上的回测效果。

步骤一:在二级书签工具条空白处右键》其他》新建篮子




步骤二:在新建的“曙光初现”篮子报价列表右键》合约管理》选入合约


 

步骤三:菜单栏编写菜单》批量回测,选择股票篮子进行回测。回测完成后,切换合约可以查看各个合约的历史回测效果。



加载运行:

步骤一:菜单栏》运行》股票账号T+0交易池
步骤二:新建交易池,填入交易池名称、资金、资金、合约、模型和底仓限额等信息



注:交易池中各只股票共用一份资金,使资金使用率最大化。



案例6:均线、MACD等多策略


根据持有的各只股票的特点,设计不同的交易策略,建立一个多策略的股票交易池。并且交易池中各只股票共用一份资金,是资金使用率最大化。

1号策略:在“宜华健康”上,建立均线组合模型,根据均线的排列进行交易。
MA5:MA(C,5);
MA10:MA(C,10);
MA20:MA(C,20);
MA30:MA(C,30);
MA60:MA(C,60);//定义5条均线 DT:MA5>MA10&&MA10>MA20&&MA20>MA30&&MA30>MA60,NODRAW;
KT:MA5<MA10&&MA10<MA20&&MA20<MA30&&MA30<MA60,NODRAW;
DT,BP;//买入
KT,SK;//卖出
AUTOFILTER;
AUTOFINANCING;//自动入金
STOCKT0_PLUS;//设置模型为T+0模式



2号策略:在“东方航空”“宁波联合”两只股票上,建立MACD背离模型,以指标背离作为入场的依据,同时对当日的亏损次数进行限制。

DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26);
DEA:=EMA(DIFF,9);
MACD:=2*(DIFF-DEA),COLORSTICK;
N:=BARSLAST(CROSS(DIFF,DEA))+1;
N1:=BARSLAST(CROSSDOWN(DIFF,DEA))+1;
DIFF1:=REF(REF(DIFF,N-1),1);
DIFF2:=REF(REF(DIFF,N1-1),1);
C1:=REF(REF(C,N-1),1);
C2:=REF(REF(C,N1-1),1);
DBL1:=DIFF>DIFF1&&CROSS(DIFF,DEA)&&C<C1;//底背离
DBL:=DIFF<DIFF2&&CROSSDOWN(DIFF,DEA)&&C>C2;//顶背离 DBL1&&TODAYLOSSTIMES<2,BP;//买入
DBL,SK;//卖出
EVERY(C<=REF(C,1),5),SK;//卖出
AUTOFILTER; AUTOFINANCING;//自动入金
STOCKT0_PLUS;//设置模型为T+0模式



3号策略:在“西部资源”上,建立Dual Thrust系统。

N:=BARSLAST(DATE<>REF(DATE,1))+1;
HH:=REF(HHV(H,N),N);
LL:=REF(LLV(L,N),N);
CC:=REF(C,N);
RANGE1:=MAX(HH-CC,CC-LL);
OO:=VALUEWHEN(N=1,O);
TOP:=OO+0.7*RANGE1;
BOTTOM:=OO-0.7*RANGE1; CROSS(C,TOP),BP;//买入
CROSSDOWN(C,BOTTOM),SK;//卖出
AUTOFILTER;
AUTOFINANCING;//自动入金
STOCKT0_PLUS;//设置模型为T+0模式



回测效果:

使用组合回测的功能,验证一下多合约、多策略在历史K线上的表现。





加载运行:

步骤一:菜单栏》运行》股票账号T+0交易池
步骤二:新建交易池,填入交易池名称、资金、资金、合约、模型和底仓限额等信息。