文华财经交易技术研究部 阎璐
程序化交易具有客观性。它是事先将投资者的交易策略和经验以计算机语言的形式输入电脑中,再以数据计算出来的买卖信号为依据去进行交易。交易中不会受交易者主观策略的影响而随时改变。杜绝投资人可能因为盘势所产生的情绪进行追涨杀跌的操作,从而避免人性化交易的缺点,也进而消除了交易中的主观随意性,大大减轻了交易者下单前的恐惧、持仓中的焦虑和平仓后的后悔
交易中最大的敌人不是市场而是交易者自己。
我们每一次失败的经历都说明:不是市场太聪明而是我们太自作聪明。
为了避免我们被主观情绪所困扰,我们可以使用机械式的交易系统来规范我们的交易活动,但即使有了交易系统,交易是否成功还是决定于人本身,在于交易者能否始终坚持自己的交易体系。
正确认识程序化交易
强化的种类
正强化 — 奖励
负强化 — 惩罚
消退 — 无效
随机强化 — 挑战
策略完善的过程
收盘价在年线上,K线显示红色。
收盘价在年线下,K线显示兰色。
MA200:MA(CLOSE,200);
STICKLINE(CLOSE>MA200,OPEN,CLOSE,COLORRED,0);
STICKLINE(CLOSE<=MA200,OPEN,CLOSE,COLORCYAN,0);
DRAWLINE(CLOSE>MA200,HIGH,CLOSE>MA200,LOW,COLORRED);
DRAWLINE(CLOSE<=MA200,HIGH,CLOSE<=MA200,LOW,COLORCYAN);
策略的图形化
趋势模型示范:
K线变红,做多;
K线变兰,做空。
MA200:=MA(CLOSE,200);
CLOSE>MA200,BPK;
CLOSE<=MA200,SPK;
策略的程序化
交易指令示意图
策略的验证
持续N根K线变色,确定交易。
MA200:=MA(CLOSE,200);
EVERY(CLOSE>MA200,N),BPK;
EVERY(MA200>=CLOSE,N),SPK;
策略的完善
能力扩展
摆脱繁重的盯盘
摆脱大量计算
可以交易更多的品种
当盘中价格上下波动,导致交易信号反复时,如何解决?
在Mytrader一键通2009中可以使用“全自动交易信号消失以后,自动恢复持仓”解决指令忽闪的问题
在全自动状态下,如果指令消失,系统会自动恢复到最近的一次交易指令的状态和手数 例:使用模型自动交易沪铜0811在2008年8月22日发出卖出开仓信号,之后在2008年9月4号发出买开并平空指令,
系统会自动将8月22日的持仓平掉并开多仓,此时如果买平开指令消失,
系统会按照8月22日的开仓方向及手数重新开空仓,并平掉多单,这样既保住了8月22日到9月4日之间的盈利又保持了原来的趋势继续盈利.
交易模型基础编写教程
本节重点掌握:(一)操作符
(二)基本函数和语法
了解学习公式编写时常用的运算符号(加、减、乘、除法)、条件关系(大于、等于、小于等)以及定义变量操作符。
重点内容:
“:=”和“:”在定义变量上的区别。
操作符
意义
例
+
加法
CLOSE+OPEN 表示求收盘价及开盘价的和。 CLOSE-OPEN 表示求收盘价及开盘价的差。 CLOSE*OPEN 表示求收盘价及开盘价的积。 CLOSE/OPEN 表示求收盘价及开盘价的商。
-
减法
*
乘法
/
除法
&&
与(并且)
CLOSE>OPEN 表示判断当前周期是否收阳。 CLOSE=OPEN 表示判断当前周期是否平盘。
||
或(或者)
>
大于
<
小于
>=
大于等于
<=
小于等于
<>
不等于
=
等于
:=
只定义一个局部变量 (这个变量在画图时是不画的)
TMP1:=(OPEN+CLOSE)/2; MA1:MA(TMP1,10); 上面的公式的第一个语句定义了一个局部变量TMP1,在下面一行中引用了这个局部变量,但是要注意的是这个公式在画图的时候只画了第二条语句所求出的结果。
:
声明了一个变量,在画图时画出它并且按这个名字显示。
1、如何查阅函数列表
2、如何新建一个指标
3、常用函数示范编写
CLOSE
引用收盘价(在盘中指最新价),也可简写为 C。
HIGH
引用最高价,也可简写为 H。
LOW
引用最低价,也可简写为 L。
OPEN
引用开盘价,也可简写为 O。
OPI
引用持仓量
VOL
引用成交量,也可简写为 V。
A:=CLOSE;
MA5:MA(A,5);
MA(X,N)
求X在N周期内的简单移动平均。 计算方法:MA=(A1+A2+A3+A4+A5)/5 求A在5个周期内的简单移动平均
MA5:MA(CLOSE,5);
MA10:MA(CLOSE,10),COLORYELLOW;
MA30:MA(CLOSE,30),COLORGREEN;
MA60:MA(CLOSE,60),COLORMAGENTA;
当需要书写的源代码比较长时,如果系统中已经有完整的指标,我们可以直接拿来引用,而不需要重复录入。
本节掌握重点:如何通过【引用其他公式】功能,利用现有指标。
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:SMA(RSV,3,1),COLORWHITE;
D:SMA(K,3,1),COLORYELLOW;
J:3*K-2*D,COLORMAGENTA;
SMA(X,N,M)
得到X在N个周期内的移动平均,M为权重(M为常数)。 计算方法:SMA(N)=SMA(N-1)*(N-M)/N+X(N)*M/N。
HHV(X,N)
得到X在N周期内的最高值,如果N=0,则从本地数据的第一个有效周期开始算起。 例:HHV(HIGH,13);求13个周期内的最高价的最大值。
LLV(X,N)
得到X在N周期内的最小值,如果N=0,则从本地数据的第一个有效周期开始算起。 例:LLV(LOW,25);表示求25个周期内最低价的最小值。
(一)、熟悉交易指令
(二)、如何建立一个新的交易模型
(三)、交易模型的几种基本形式
编写步骤:
1.定义要素
先把模型编写需要的变量进行定义。
2.归纳条件
将交易条件归类编写。相同指令的交易条件需要归纳书写。
交易模型基本格式:
1.定义需要的每个变量
2.组合交易条件+交易指令
交易条件
,
交易指令
;
1.交叉类模型
例如:均线交叉类,MACD交叉类,KDJ指标交叉。
2.多条件模型
例如:均线组合结合KDJ指标等
3.日内模型
例如:尾盘平仓类
交易策略:
10周期的均线上穿20周期的均线时买开;
5周期的均线下叉10周期的均线时卖平;
10周期的均线下叉20周期的均线时卖开;
5周期的均线上穿10周期的均线时买平;
关键函数:CROSS(X,Y)
CROSS(X,Y)
如果X上穿Y则返回1(yes),否则返回0(no)。 例:CROSS(CLOSE,MA(CLOSE,5));表示收盘线从下方向上穿过5日均线
MA5:=MA(CLOSE,5);
MA10:= MA(CLOSE,10);
MA20:= MA(CLOSE,20);
CROSS(MA10,MA20),BK;
CROSS(MA10,MA5),SP;
CROSS(MA20,MA10),SK;
CROSS(MA5,MA10),BP;
5周期均线上穿10周期均线时买开或者KD金叉时并且J值小于30时买开;
KD出现死叉并前个周期J值大于70时卖平
5周期均线下叉10周期均线时卖开或者KD死叉时并且J值大于70时卖开;
KD出现金叉并前个周期J值小于30时买平
REF(X,N)
引用X在N个周期前的值 例:REF(CLOSE,5);表示引用当前周期前第5个周期的收盘价
关键操作符:&&(并且) ||(或者)
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:=SMA(RSV,M1,1);
D:=SMA(K,M2,1);
J:=3*K-2*D;
MA5:=MA(CLOSE,N1);
MA10:=MA(CLOSE,N2);
CROSS(MA5,MA10)||(CROSS(K,D)&&J<30),BK;
CROSS(D,K)&&REF(J,1)>70,SP;
CROSS(MA10,MA5)||(CROSS(D,K)&&J>70),SK;
CROSS(K,D)&&REF(J,1)<30,BP;
在3分钟周期,根据价格与当日开盘后15分钟内最高\低价的大小关系作为买卖条件编写交易模型;
问题:
1、如何取开盘后15分钟的最高\低价数据?
2、如何使交易模型不留隔夜单?
1、使用逻辑判断函数:
开盘后15分钟的最高价可以表示为:
HH:=VALUEWHEN(TIME=0915,HHV(HIGH,6));
2、使用时间函数在尾盘时将所有仓单了结:
TIME>=1454,BP;
TIME>=1454,SP;
VALUEWHEN(COND,DATA)
当条件COND满足时,取当时的DATA的值,否则取得前面一个满足条件COND的值。 例:VALUEWHEN(HIGH>REF(HIGH,5),HIGH); 表示当前最高价大于前五个周期最高价的最大值时返回当前最高价。
因此可编写交易模型如下:
例10
HH:=VALUEWHEN(TIME=0915,HHV(HIGH,6));
LL:=VALUEWHEN(TIME=0915,LLV(LOW,6));
HIGH>HH&&TIME>0915&&TIME<1454,BK;
HIGH>HH||TIME>=1454,BP;
LOW<LL&&TIME>0915&&TIME<1454,SK;
LOW<LL||TIME>=1454,SP;
指标
编写结构
定义需要的变量
标注文字
画图形
变量名称
:=或者:
解释
分号结尾
其他绘图函数
DRAWTEXT
交易模型编写结构
形成交易条件和指令
定义需要的变量
变量名称
:=或者:
解释
分号结尾
交易条件
逗号
BK SP SK BP
分号结尾
注意事项:
1.模型中必须使用‘:=’定义变量名称。不允许只使用‘:’。
2.容易引起歧义的条件,最好用括号把完整条件括起来在和其他条件进行对比。
3.函数不允许作为变量名称
4.结尾一定要用分号
5.不要忘记写函数,例如(CLOSE,5)是错误的
6.涉及到引用系统指标的时候,一定要记得加等号去除画线;如果有参数一定要补齐参数;去除BACKGROUNDSTYLE(1);
7.多条件要用&& ||连接,不能用逗号分隔。
>1455,BP||SP是错误的,要分别书写
正确格式:
TIME>1455,BP;
TIME>1455,SP;
*
*