在组件中如何取得期货合约开仓和平仓的开仓均价

当前位置: >>
程序化交易初级教程(文华)
1 注:此教程适用于赢智 Wh8 和乐期 Wh4。目录第一章公式系统介绍....................................................................................................................... 1 第二章模型编写语法与规则 ........................................................................................................... 4 2.1 数据引用........................................................................................................................... 4 2.2 模型编写语法................................................................................................................... 8 2.3 模型基本结构................................................................................................................. 14 第三章一般模型编写示例............................................................................................................. 18 3.1 条件描述......................................................................................................................... 18 3.2 K 线形态描述.................................................................................................................. 20 3.3 技术指标范例................................................................................................................. 24 3.4 价量走势编写范例 ......................................................................................................... 29 3.5 盘中动态编写范例 ......................................................................................................... 31 3.6 趋势类模型编写范例 ..................................................................................................... 32 3.7 振荡类模型编写范例 ..................................................................................................... 36 3.8 公式条件单范例............................................................................................................. 37 3.9 常见模型公式编写问题 ................................................................................................. 41 第四章复杂模型编写示例............................................................................................................. 47 4.1 跨指标模型..................................................................................................................... 47 4.2 跨周期模型..................................................................................................................... 49 4.3 分组指令......................................................................................................................... 52 4.4 日内模型......................................................................................................................... 53 4.5 TICK 模型........................................................................................................................ 56 4.6 止损模型......................................................................................................................... 59 第五章模型的 5.1 模型回测 ......................................................................................................................... 61 5.2 参数优化......................................................................................................................... 65 5.3 日志检索......................................................................................................................... 71 第六章如何优化你的策略............................................................................................................. 721 6.1 PANZHENG 函数,减少盘整行情中的交易次数 .............................................................. 72 6.2 TRADE_OTHER 函数,在指数交易中的应用 .................................................................. 78 6.3 CHECKSIG 函数,实现更具有优势进场价格 ................................................................ 78 6.4 MULTSIG 函数,在一根 k 线上灵活进出 ...................................................................... 78 第七章后台程序化......................................................................................................................... 78 7.1 后台程序化工作机理 ..................................................................................................... 79 7.2 页面盒子......................................................................................................................... 79 7.3 运行模组......................................................................................................................... 82 7.4 盘口模型运行池............................................................................................................. 82 第八章多账号下单......................................................................................................................... 82 第九章套利交易............................................................................................................................. 86 第十章软件的一些基本操作 ......................................................................................................... 96 附录 2:交易测评报告术语详解 ................................................................................................ 105 附录 3:图表分析各图表项说明 ................................................................................................ 1082 第一章 公式系统介绍软件的公式系统是一套功能强大、使用方便的计算机描述系统。可供引用的函数近 500 个。 可以说其它软件能做的,该软件都能做到,而且能做得更好,更贴近实盘。用户可以通过期货交 易所和证券交易所发送的实时行情数据和软件保存的历史数据按照简单、 复杂的运算法则进行分 析、筛选、系统测试和自动交易,在软件中提供了用于公式编写的编辑器:交易系统公式编辑器交易系统旨在建议一套完整的交易规则体系,通过该编辑器对各个相关的交易环节,包括 买入的切入、卖出、止损以及整体的交易性能检验等等做出定量的规定,帮助投资者建立一套 属于自己的买卖规则和理论。实现对技术图表分析中各类技术指标和自我定义的技术分析指标 的编写,并且通过软件的分析界面形成图表、曲线、以方便和寻找有意义的技术图形和技术特 征。公式编辑器界面介绍 1)操作方法:在启动软件后,点击【公式】菜单,选择【编写趋势模型】会出现趋势模型编写平台。如图 下图所示,分别按照①~④的步骤进行编写。1 2)设定内容及规则说明:通过下面的图,我们可以了解利用该公式系统编写模型需设定的内容和相关规则:2 A:每一个模型必项有一个名称,这个名称由字母、数字或汉子组成,模型名称在所有模型中必 须是唯一的,例如不能同时存在两个 AAA 模型,模型名称最多 31 个字符。 B:模型描述是一段文字,用来简单描述该模型的含义,在模型列表时显示返段文字,这段文字 不宜过长。 C:该项选择定义了该模型显示的位置,是在主图上与 K 线叠加还是显示在副图上,一般来讲, 只有少数几个主图模型会设定为主图叠加,例如 MA 均线、BOLL 线等。 D:计算参数:计算参数用来替代公式中所需要的常数,在使用时可以方便地调节参数,不必修 改模型就可以对计算方法进行调节。计算参数包括参数名称、最小值、最大值、缺省值四个 部分,参数名称用于标识参数,计算模型时采用缺省值计算,而最小值和最大值是参数的调 整范围。 E:公式编辑栏,本栏为模型公式编辑的文本区。 F:设置声音及密码,选中该栏目为模型加密以及定义模型中需要用到的声音文件。 G:公式说明是一段文字,相对于描述而言它可以很长,主要用来描述一个公式模型如何使用、注意事项、计算方法等等。3 第二章 模型编写语法与规则2.1 数据引用2.1.1、数据来源模型中的基本数据来源于接收的每日行情数据, 这些数据由历史数据引用函数从数据库中按 照一定的方式提取,例如,高开低收(HIGH、OPEN、LOW、CLOSE) ,成交量(VOL) ,持仓量(OPI) 等等。2.1.2、数据类型按照模型使用的数据类型,系统可以处理的数据分为两类:变量和常量。 所谓变量就是一个随着时间变化而变化的数据, 例如成交量;常量就是一个永远不变的数据。 例如 3,每个函数需要的参数可能是变量也可能是常量,不能随便乱用,函数计算的结果一般是 一个变量。 例如计算收盘价均线 MA(CLOSE,5), MA 函数要求第一个参数为变量, 而 CLOSE 函数返回的正 是一个变量;MA 函数要求的第二个参数是常量,5 就是一个常量,所以我们就不能这样书写: MA(5,CLOSE)而是要写成 MA(CLOSE,5)。2.1.3、引用方法1)一般数据引用 对于大多数数据,我们可以通过函数直接将其引用,例如 OPEN 函数可以帮我们取到开盘价 这一数据。 编写模型时我们可以将这些数据组合在一起进行加减乘数的数学计算得到我们想要的 分析数据。例如,我们想求得今日 K 线最高价和最低价的差值,就可以利用 HIGH(最高价)和 LOW (最低价)做一个数学运算,即 HIGH-LOW。 2)特殊数据引用 A、跨周期引用指标数据 在软件当中允许使用不同分析周期上的模型数据,并且支持与自身长短不同的任意周期引用, IMPORT 函数可以帮我取到想要的数据。 基本格式为: #IMPORT [PERIOD,N,FORMULA] AS VAR 引用当前合约,PERIOD 参数为 N 的周期,指标 FORMULA 的数据。 PERIOD 支持如下周期:SEC(秒周期) ,MIN(分钟周期) ,HOUR(小时周期) ,DAY(日周期) ,WEEK (一周) ,MONTH(一月) ,QUARTER(一季度) ,YEAR(一年); 数据引用时不限制周期,即,既可以在小周期上引用大周期,也可以在大周期上引用小周期的数 据。4 例如我们要在 1 分钟周期上引用 30 分钟周期的 MA5 和 MA10: 首先建立指标: MA5:MA(C,5);//定义 MA5 MA10:MA(C,10); //定义 MA10 保存指标,命名为 AA 再建立跨周期模型: #IMPORT[MIN,30,AA] AS VAR MA5Y:VAR.MA5;//跨周期引用 30 分钟周期的 MA5 MA10Y:VAR.MA10;//跨周期引用 30 分钟周期的 MA105 B、跨合约引用指标数据 在软件当中允许使用不同合约上的指标数据,但我们需要用一个特殊的函数来进行引用。 基本格式为: #CALL [CODE, FORMULA] AS VAR 引用 CODE 合约的指标 FORMULA 的数据。 例如在 IF1410 合约 1 分钟周期上引用 IF 指数合约 1 分钟的 MA5 和 MA10 指标: 首先建立指标: MA5:MA(C,5);//定义 MA56 MA10:MA(C,10); //定义 MA10 保存指标,命名为 AA 再建立跨合约模型: #CALL [8600,AA] AS VAR MA5Y:VAR.MA5;//跨合约引用 1 分钟周期的 MA5 MA10Y:VAR.MA10;//跨合约引用 1 分钟周期的 MA107 特别注意:软件中,对某合约加载跨周期模型,会自动申请一定数量的该品种及被引用品种的 k 线,但 如果数据量无法满足您的需求, 请手工进行数据补充工作, 手工补充数据方法: (点击文字查看) , 您也可以先浏览一下该品种的对应周期 K 线数据是否完整。2.2 模型编写语法所有的公式系统都是遵守统一的运算法则, 统一的格式进行函数之间的计算。 在我们编写模 型的时候需要遵循以下原则:2.2.1 语法A、命名部分: 支持汉字、字母、数字、划线格式命名,长度控制在 31 字符内;命名不能和已存在的公式名 称重复。 B、定义变量名称 变量名称不能相互重复 不能与参数名重复 不能与函数名重复 C、需在半角输入法的大写状态下进行编写 D、每个语句应该以分号结束 E、参数部分: 可以设置留个参数 首先是参数名称,然后是参数的最小值、最大值、最后是参数的默认值。 在定义参数时要注意的是参数名称不可以重复,要在 12 个字符内。 F、注释或舍去 想要在编写后,加入自己的语言注释,在结尾处用“//”表示;或者想要舍去某段,在某段 最前端加入“//” 。8 2.2.2 操作符操作符将函数连接成为模型, 操作符分为数学运算操作符和逻辑判断操作符和定义变量操作 符。如下图所示: a、数学运算操作符: 包括+、-、*、/,它从分别对操作符两边的数据进行加减乘除计算,这同一般意义上的算术 计算没有差异。b、逻辑判断操作符 包括&&、||、&、&、&&、&=、&=、=八种,分别表示并且、或者、大于、小于、不等于、大 于等于、小于等于、等于运算, “&&”并且操作符表示如果条件成立计算结果就等于 1,否则等 于 0。“||”或者操作符表示两个条件只要有一个成立计算结果就等于 1,都不成立计算结果等 于 0。 例如:3+4=7 和 4&3 的结果就等于 1,3&=12 的结果就等于 1。 4&3&&12&=4 的结果等于 1,4&3||3&12 的结果等于 1。9 c、定义变量操作符 定义变量操作符,一共有四个,分别是: “: ” 、 “:=” 、 “^^”和“..”.之前讲到的赋值语句 和中间语句用到了“: ”和“:=”两个定义变量操作符。 另外两个定义变量操作符“^^”和“..”分别表示定义以主图附加坐标方式显示和以独立坐 标方式显示的指标线。2.2.3 函数函数分类: 根据函数不同的性质,我们将函数分为 18 类 历史数据引用 模组头寸函数 信号控制函数 TICK 数据函数 金融统计函数 行情报价引用 公式条件单函数 信号执行函数 数理统计函数 画线函数 绘图函数 数学函数 信号记录函数 时间函数 计算控制函数 未来函数 逻辑判断函数加密输出函数例 1:CLOSE 取得 K 线图的收盘价。10 注: 1、当盘中 k 线没有走完的时候,取得最新价。 2、可简写为 C。 例 2:CROSS 表示 A 从下方向上穿过 B 这个函数在今后的编写中我们将经常用到, 它表示 “穿越” , A 从下方向上穿过 B, 成立返回 1(Yes), 否则返回 0(No)。 注: 1、 满足穿越的条件必须上根 k 线满足 A&=B,当根 k 线满足 A&B 才被认定为穿越。返回 1 或者 0 //5 日均线上穿 10 日均线: MA5:=MA(C,5); MA10:=MA(C,10); CROSS(MA5,MA10); 例 3:TIME 取 K 线时间 这是一个重要的时间函数,当我们需要尾盘平仓,显示开仓时间时,都要用到这个函数。 注: 1:该函数在盘中实时返回,在 K 线走完后返回 K 线的起始时间。 2:该函数返回的是交易所数据接收时间,也就是交易所时间。 3:TIME 函数在秒周期使用时返回六位数的形式,即:HHMMSS,在其他周期上显示为四位数的形 式,即:HHMM. 4:TIME 函数只能加载在日周期以下的周期中,在日周期及日周期以上的周期中该函数返回值始 终未 1500。 5:使用 TIME 函数进行尾盘平仓的操作需要注意 (1)尾盘平仓设置的时间建议设置为 K 线返回值中实际可以取到的时间(如:螺纹指数 5 分钟 周期 最后一根 K 线返回时间为 1455,尾盘平仓设置为 TIME&=1458,CLOSEOUT;则效果测试 中不能出现尾盘平仓的信号) (2)使用 TIME 函数作为尾盘平仓的条件的,建议开仓条件也要做相应的时间限制(如设置尾盘 平仓条件为 TIME&=1458,CLOSEOUT;则相应的开仓条件中需要添加条件 TIME&1458;避免平 仓后再次开仓的情况)返回时间 //在 14:50 后平仓。 C&O&&TIME&1450,BK; C&O&&TIME&1450,SK; TIME&=1450,SP; TIME&=1450,BP; AUTOFILTER;11 在上面的编写中, 由于我们要在 14 点 50 后平仓, 那么在开仓条件中我们也要加入相应的时间限 制,即开仓条件必须在 14 店 50 前满足才开仓。 例 4:线形描述符 对于模型可以在语句加上线形描述符,用来表示如何画该语句描述的指标线。 线形描述符号包括以下 7 种。描述符写在语句后分号前,用逗号将它们与语句分隔开,例如在上 例当中加入一句线形描述符, C:B*0.618,CIRCLEDOT;该语句在被执行时, 会在图中添加小圆点画 线。ALIGN CIRCLEDOT COLORSTICK CROSSDOT DOT FONTSIZE ICON LINETHICK NODRAW POINTDOT PRECIS SETSTYLECOLOR SOLID SOUND VALIGN VOLSTICK VOLUMESTICK WORD设置文字对其方式(左中右) 小圆点线 画柱线 画小圆圈线 画虚线 设置字体大小 显示图标 线型粗细控制 不画线 虚线 制定数字的输出精度(小数点位数) 线型的粗细和颜色控制 实心显示 播放声音 设置文字对齐方式(上中下) 画柱线 画柱线 显示文字a、COLOR+...可以设置多种颜色,方法:点击公式编写窗口的插入――插入颜色,选择相应颜色 即可。 b、LINETHICK 可以允许对线型的粗细进行自定义的描述,格式“LINETHICK+(1-7) ” :参数的取 值范围在 1-7 之间,“LINETHICK1”表示最细的线,而“LINETHICK7”表示最粗的线。 如果数值相差比较大的指标线在主图中显示, 会使 K 线压缩成一条直线, 此时一般会结合 “..” 操作符使用,意思是不影响坐标最高最低值。例如:A..C,LINETHICK1; 影响坐标最高最低值,用于输出到主图或叠加到其它指标上。 函数取值的验证 对于没有接触过的新函数, 我们可能不知道它的取值是什么、 怎么取, 例如 BARSLAST 函数,12输出收盘价, 但不 我们可以通过插入函数中的讲解知道它可以取得上一次条件成立到当前的周期, 但是我们并不能 知道这个周期数是否包含当前周期。 这时候我们可以通过把函数取值加载到 K 线上的方法来得到 答案。 BARSLAST 函数取值是否包括条件满足的那根 K 线? 首先我们找一个条件,用最简单的,判断上一次收阳到当前的距离: 定义一个变量: AA..BARSLAST(ISUP);(用..定义是为了让变量值独立坐标显示保证不挤压 K 线) 接着我们把这个变量显示在主图 K 线上,从图中我们可以看到,K 线 A 上变量 AA 的取值是 2,也 就是说,BARSLAST 计算离他最近的一根阳线取值是 2 个周期,这就说明 BARSLAST 这个函数在取 值时是不包括条件满足的那根 K 线的。 所以如果我们想要计算包括条件满足的那根 K 线的周期就 要写成 BARSLAST(COED)+1 的形式。模型条件是否满足的验证 我们在研究或测试模型的时候通常会有这种疑惑,觉得条件满足了,但是模型没有出信号, 那么如何去验证呢?可以通过把开仓条件转化成变量的方式来验证。 例如我们要验证下面这个模型的开多条件是否满足: MA5:=MA(C,5); MA10:=MA(C,10); CROSSUP(MA5,MA10),BPK; CROSSDOWN(MA5,MA10),SPK; AUTOFILTER; 然后我们把模型稍作修改把 BPK 的条件提取出来写成一个可以再 K 线图显示线性的变量: MA5:=MA(C,5); MA10:=MA(C,10); AA: CROSSUP(MA5,MA10); CROSSUP(MA5,MA10),BPK; CROSSDOWN(MA5,MA10),SPK; AUTOFILTER;13 加载到主图 K 线上, 我们可以看到左图中有信号的 K 线上 AA 值显示为 1, 也就是说在这根 K 线上 MA5 上穿了 MA10。而右侧的图印证了这一事实。2.2.4 模型语句所有的模型由若干语句按照一定的格式组成, 每个语句表示一个计算结果, 根据各个语句的 功能分为两大类语句,一类是赋值语句,一类是中间表达式。 A、赋值语句 “B:A/Z”和“C:B*0.618”是两条指标线,语言间用分号隔开。该语句被称为赋值语句,在 模型当中, 赋值语句的计算结果将会被计算机执行并形成相应的图形。 每个语句可以有一个名称, 该名称写在语句的最前面, 并用可以显示图形的定义变量操作符将它与语句分隔开, 我们称之为 变量名。 例如:ST:MA(CLOSE,5);表示该语句求收盘价的五日均线,语句的名称(变量名)为 ST,在 该语句后的语句中可以直接用 ST 来替代 MA(CLOSE,5),如:MA(ST,5)表示对收盘价的五日均线 再求五日平均。 B、中间语句 一个语句如果不需要显示,可以将它定义为中间语句,例如在上例当中的第一句“A := X+Y;”,这样该语句就不会被系统辨认为是指标线了,中间语句用“:=”替代冒号,其他与一般 语句完全一样, 使用中间语句可以有效降低模型的书写难度, 还可以将需要重复使用的语句定义 成中间语句以减少计算量。2.3 模型基本结构2.3.1 信号指令介绍 图示 指令 BK14意义 买开多单 BP SK SP BPK SPK CLOSEOUT 2.3.2 模型基本结构定义变量 条件,指令; AUTOFILTER;注:过滤模型下单手数,在软件中设定,无需编写买平,平掉空单 卖开空单 卖平,平掉多单 买平空单同时买开等量多单 卖平多单同时卖开等量空单 平掉所有方向的仓位模型编写需要这样一个过程: 1、勾勒出模型的大概轮廓,量化出必要的条件或者数据,将这些条件或者数据定义成变量。 2、在编写模型开平条件的时候,如果发现变量不全,则补充定义变量。 3、编写过程中养成语法检测的好习惯,以便及时发现编写错误,进行修改。 4、模型编写完整后,加载到主图并查看模型历史回测报告。2.3.3 模型分类模型分为两类,过滤模型、非过滤模型,现在我们先来认识一下这组概念 过滤模型:如下图所示,过滤模型不允许连续出开仓信号或者连续出平仓信号,有多个开仓信号 都满足条件的时候, 取第一个信号作为有效信号, 后面 k 线上的同样信号将被过滤掉。 出信号的顺序是开-平-开-平-开..... 非过滤模型:非过滤模型,允许连续出开仓信号或者连续出平仓信号,可实现加仓、减仓。下图 为编写示范及运行效果。15 2.3.4 模型编写在软件的【公式】菜单下,选择【编写趋势模型】,就会出现如下图所示的趋势模型编写平台。16 我们就可以开始编模型了。 我们在编写模型的时候, 特别是在刚刚开始学如何编写模型的时候, 如果把一个比较复杂的 表达式一口气写下来,往往会使整个模型的结构混乱无法确讣,错误难以查找,所以经常的我们 会利用中间表达式将一些比较复杂的条件分拆开成一个个简单的小语句, 也即结构模块化! 当然 如果您是比较熟悉模型的编写,有些简单的语句就没有必要再如此做法了。 常见的结构就是: 条件一:AA:=...... 条件二:BB:=...... ...... ...... 汇总:AA&&BB&&...... 在以下的章节中我们重点介绍一些指标模型编写过程中的基础技巧, 同样的原理, 这些原理 的潜移默化之后对以后其他的模型的编写大有裨益。 单根 K 线的确认程度相对比较低, 受到未确定的因素的影响比较大, 所以很多的技术分析者 强调整体的配合,也就是多根 K 线的组成分析,但是应该注意的是,多根 K 线的组合需要界定的 规则和条件同样成正比例的增长,所以模型显得比较复杂,同样准确率也会下降。17 第三章 一般模型编写示例软件提供扩展性更为强大的程式化交易模式, 为此提供了一系列的功能和众多交易函数。 这 些函数用户可以在【公式】菜单下的函数列表里找到。程序化交易系统既可以实盘运行策略,又 可以对历史数据进行回测。实盘运行策略的载体有两个,分别是页面盒子(点击查看介绍)和运 行模组(点击查看介绍) 。 一些基础的策略模型需要在每根 K 线走完的时候按照出现的信号方向下单, 我们把这种模型 叫做收盘价模型。 页面盒子是运行收盘价策略模型的功能载体, 适合需要部分手动辅助或结合图 表分析的程序化用户。 运行模组则实现了更丰富的量化策略,例如头寸管理,指令价交易等。这部分会在程序化交易高 级教程中详细介绍。3.1 条件描述阶段涨幅:N 日收盘价的差值的百分比。 (CLOSE-REF(CLOSE,N) )/REF(CLOSE,N)*100 再创新高:所谓再创新高就是指今日最高价是 N 日以来的最高价 HIGH=HHV(HIGH,N) 该函数在当日最高价创 N 日新高时为 1,否者为 0。 放量上攻:指价格上扬,成交量剧增 价格上扬可以描述为:CLOSE/REF(CLOSE,5)&1.2;表示 5 日上涨 20% 成交量剧增可描述为:VOL&MA(VOL,5)*3;表示成交量超过 5 日均量的 3 倍 所以公式可写成为:CLOSE/REF(CLOSE,5)&1.2 AND VOL&MA(VOL,5)*3 窄幅整理:就是指近一段时期价格维持在一定幅度之内 (HHV(CLOSE,20)-LLV(CLOSE,20) )/CLOSE&0.08 ; HHV(CLOSE,20)-LLV(CLOSE,20)表示 20 日收盘价振幅,即 内波动。 均线多头排列:移动平均线(MA)是将一段时间的股票价格用数理统计的方法加以平均,再将 这些平均价标于图上并用线连接起来即可。 它可以用来观察股价的趋势。 均线多头排列可以看做 是上升趋势行情的表现。 5 日、10 日、60 日均线分别表示为: MA5:=MA(CLOSE,5); MA10:=MA(CLOSE,10); MA60:=MA(CLOSE,60);1820日内价格振幅在 8%以 均线多头排列可写成:MA5&MA10&&MA10&MA60(注意不要写成连等形式) 前期高点及其位置 前期高点价格可以写成:HHV(HIGH,20)表示 20 日最高价 前期高点位置:HHVBARS(HIGH,20)表示 20 日内最高价到现在的周期数,若 HHVBARS(HIGH, 20)等于 6,则表示前期高点出现在 6 日前。 60 天前到 40 天前之间的最高价:是用 HHV 函数只能得到当天以及前若干天的最高价,若对本问 题进行分析可以得到,它实际上就是一个 20 天最高价,只不过是计算 40 天前的 20 日最高价, 所以公式可以写成为:REF(HHV(HIGH,20) ,40) 动态平均: 指数平滑移动平均是一种常用的平均线求法,其宗旨是将当日数据乘以权值a与上一天平均数乘 以权值b 相加,这两个权值相加等于1,因而指定权值a就可以确定计算方法。如: EMA(X,N)权值a=2/(N+1); SMA(X,N,M)权值a=M/N; 而对于DMA动态平均,其权值a不是一个常数,例如可用成交量作为权重计算均线: SMA(CLOSE,VOL) 点到面转化: 有时我们需要判断过去发生的事件。例如最近20日内是否发生大涨等,由于该事件仅在当天可 计算出来因此需要用点到面转换将该影响延续成一段时间: TTTT:=CLOSE/REF(CLOSE,1)&1.02表示涨幅大于2% COUNT(TTTT,20),该函数统计20 日内大涨的天数,若发生大涨则会对将来30天产生影响。 COUNT、SUM、HHV、LLV 等函数均由点到面转化的作用。上图分别显示 TTTT、HHV(TTTT,20) 、COUNT(TTTT,20)两条曲线的相对位置关系,我们看到, 每当发生大涨时 TTTT 就为 1,否则就为 0;HHV(TTTT,20)只要 20 天以内发生过大涨就为 1,19 否则为 0, 它利用了发生情况时数值最大这一特点将求最大值转化为求指定值; 而 COUNT (TTTT, 20)则表示了 20 天之内发生过多少次指定事件,应该说对于本问题这个函数用的最适合。 面到点转换: 有时我们需要反过来做面到点转换,例如当 RSI 高于 80 表示股价处于超买阶段,应该卖出。但 由于超过 80 是一个阶段,如果这个阶段中每天都发出卖出信号就不是太好了,需要一个将连续 区间转化为一个信号的函数,即面到点的转换。 CROSS(RSI,80) ,表示 RSI 向上穿越 80,由于对于一个阶段来说穿越只会发生一次,仅而完 成了面到点的转换。 线性回归: 是统计学中最常用的方法之一, 它用一条直线来近似描述一条曲线。 直线可用起点和斜率来表示, 因此可以更为简便的描述当前股价的趋势。线性回归函数有两个:FORCAST 和 SLOPE,分别表示 起点和斜率。 FORCAST 的作用与均线类似, 有对未来趋势的预测作用, 指标较均线更为灵敏; SLPOE 表示该线性回归的斜率, 即事件每增加 1 天价格的发动情况, 它可以表示一段时间内的平均价格 发化率,可以用它来描述近期价格的涨跌趋势及强度。 例如:SLOPE(CLOSE,10)/REF(CLOSE,10)&0.05 则表示近期有每日平均 5%的升幅趋势。 之字转向: 每当股价涨跌幅度超过指定界限并发生趋势方向发化时, 之字转向将产生一个转折点, 将所有转 向点用线段连接就成为之字转向, 之字转向能够很好地描述股价的大体走势, 对于相态分析有一 定的作用。 转向点分为波峰和波谷两类, 分别表示向下转向和向上转向, 与之对应的我们有四个函数用于描 述它从的价格和位置: PEAK 和 TROUGH 表示波峰和波谷的价格; 表示波峰和波谷距现在的周期数PEAKBARS 和 TROUGHBARS这四个函数都有一个参数用于描述向前数第几个波峰, 用这个特性我们就可以在测试 W 底时比较 上一个波谷和前一个波谷的位置和大小,进而规范了一 W 形底的描述。3.2 K 线形态描述K 线图又称阴阳线,最初是日本米商用来表示米价涨跌状况的工具,后来引入股市,并逐渐 风行于东南亚地区。K 线图以其直观、立体感强的特点而深受投资者欢迎,实践证明,精研 K 线 图可以较准确地预测后市走向, 也可以较明确的`断多空双方的力量对比, 仅而为投资决策提供 重要的参考。 K 线图的画法与分类:画 K 线图前应先准备一张坐标纸,按一定的比例表明股价(指数)的 相应位置。它将市场每天(周、月)的 开盘价、最高价、最低价和收市价画在统计图上以反映 市场的波动情形。20 K 线图共有三部分组成:即上影线、下影线和实体三部分,上影线为最高价,下影线为最低 价,实体由收盘价和开盘价构成。 当收盘价高于开盘价时,用阳线或红线来表示,当开盘价高于收盘价时,用阴险和黑线来表 示。 它有十二种基本形态:A 阳线、B 阴线、C 光头阳线、D 带帽阳线、E 带尾阳线、F 光头阴 线、G 带尾阴线、H 带帽阴线、I 平盘线、J 十字星、K 丁字线、L 倒丁字线,由这些的组合形成了所有的 K 线形态,由于组合的多样性和不确定性,从而也有了许多的不同理解、意见相左 的 K 线分析。3.2.1 大阳线首先我们编制一个简单的单根 K 线的公式,一根 K 线由四个价格组成,开盘价、收盘价、最 高价、最低价四个价格组成,所以对它的描述只需要能够做到清楚地描述这四个价位中的相关 值即可。 观察其特点: 开盘即为最低 BB := LOW=OPEN; 收盘即为最高 AA := CLOSE=HIGH; 假设量化的结果是阳线长度上涨幅度大于 4% CC:CLOSE/OPEN&4%; 所以 BB := LOW=OPEN; AA := CLOSE=HIGH; CC :=CLOSE/OPEN&1.04; 综合判断条件 AA&&BB&&CC3.2.2穿头破脚穿头破脚有两只 K 线组成, 表示行情将要转向, 穿头破脚第二支蜡烛烛身部分长于第一根蜡 烛且蜡烛颜色相反;若是上升行情第二支蜡烛为阳线,若是下跌行情第二支蜡烛为阴线,并且包 含了前一根。 量化:如果只是一般意义上的满足以上条件的 K 线组合,则信号的含义并不强,所以可以通 过强化一些条件或者补充一些条件来加强信号的内涵。 例如在本例中我们规定当前 K 线的开收至 少有 4%的差值,如果是向上穿头破脚的类型,那么该 K 线应该收阳,同时当前 K 线的最高价和 最低价要包住前一根 K 线。 K 线形体描述:开盘价要低于收盘价的 4%以上 A1:=REF(CLOSE,1);21 A2:=REF(OPEN,1); 今日的 K 线形体: B1:=OPEN&A1; B2:=CLOSE&A2;(高于昨天的开盘) BB: C/O&1.04; 综合判断条件 BB AND B1 AND B2 最终的公式为: A1:=REF(CLOSE,1); A2:=REF(OPEN,1); BB: C/O &1.04; B1:=OPEN&A1; B2:=CLOSE&A2; 综合判断条件 BB&&B1&&B2 如果是向下的穿头破脚,只需要改动几个数值的方向即可!3.2.3吊颈吊颈与锤头形态相同,只是吊颈出现在上升行情中,表示将见顶回落。吊颈出现在上升行情 中,有较长的脚部,蜡烛实体部分很少,并在顶部出现。同样可以有阳线实体的的吊颈和阴线实 体之分,以下将以阴线实体的吊颈为例。 量化:开盘所得即为当天最高价; AA:= OPEN=HIGH; 阴线实体的长度小, 量化后我们选择以整个线体进行对比, 满足条件其长度小于整个线体的 1/3: B1 := OPEN-CLOSE; B2 := HIGH-LOW; BB := B1/B2&1/3; 另外对线型的绝对长度作出规定,选择整个线体的长度大于最高价的 5%,意义在于加强线体的 含义,以免出现极小的,出现在弱市中的信号; CC := B2/HIGH&0.05; 公式组为: AA := OPEN=HIGH; B1 := OPEN-CLOSE; B2 := HIGH-LOW; BB := B1/B2&1/3;;22 CC := B2/HIGH&0.05; 综合判断条件 AA&&BB&&CC3.2.4低开大阳线低开大阳线出现在拉升初期或者整理的末期的机率较高,当天的开盘明显低于昨天的 K 线, 但是整个线体呈现为一根长阳,气势逢人! 量化:今日低开,小于上一周期的最低价,并且开盘时的跌幅达到了 2%以上: A1 := REF(CLOSE,1); A2 := REF(LOW,1); A3 := OPEN&A2; A4 := OPEN/A1&0.98; 收盘长阳,收盘价高出开盘价至少 4%以上: B1 := CLOSE/OPEN&1.04; 所以公式组为: A1 := REF(CLOSE,1); A2 := REF(LOW,1); A3 := OPEN&A2; A4 := OPEN/A1&0.98; B1 := CLOSE/OPEN&1.04; 综合判断条件 A3&&A4&&B13.2.5跳空缺口就是两条 K 线的高低价出现不b接的情况,有两条 K 线组成,是日后支撑和压力点的参考 价位。当一个跳空缺口出现时,可以假设一个沿着原来跳空方向上的趋势的加速已经开始了。 量化:有两条 K 线组成,两跳 K 线间存在明显的间隔;跳空分为向上和向下两种情况,以下 已向上跳空的例子: 本周期的最低价高于上一周期的最高价: A1 := REF(HIGH,1); A2 := LOW&A1; 跳空缺口越大,则信号越强烈!所以加入辅劣条件缺口的长度至少要求有两个点位: B1 := LOW/A1&1.02; 所以公式组为: A1 := REF(HIGH,1);23 A2 := LOW&A1; B1 := LOW/A1&1.02; 综合判断条件 A2&&B13.3 技术指标范例3.3.1均线指标MA(金叉) ,普通金叉 用 CROSS 表示 MA5 日均线向上穿过 MA10 均线,函数 CPOSS(X,Y)的含义从函数表中可以 得出为指标线 X 向上穿过指标线 Y。 首先我们用两个中间表达式表达两条指标线 X、Y 分别为 5 日均线和 10 日均线,最终使用 CROSS 即得。 MA5:=MA(CLOSE,5); MA10:=MA(CLOSE,10); 综合判断条件 CROSS(MA5,MA10); MA5 和 MA10 在 30 日均线之上运动,并当日发生了金叉: “在 MA10 和 MA30 之上”,可以简略地描述为“大于”即可,其他的条件套用!所以我们先表 达出两个条件分别用 AA 和 CC 表示: AA 是: MA5:=MA(CLOSE,5); MA10:=MA(CLOSE,10); AA:=CROSS(MA5,MA10); CC 是:MA30:=MA(CLOSE,30); CC:=MA5&MA30 AND MA10&MA30; 最后将两个综合的条件用逻辑与函数连接成为一个表达式, 要注意在条件选股的公式中只能存在 一个逻辑判断式,所以我们以后经常会使用一些逻辑连接符连接多个条件。 综合判断条件 AA&&CC 三条均线多头排列 由于所谓多头排列没有一个具体的量化的概念, 所以需要根据自己平时经验来取得一个比较 有效的标准来衡量。例如我们在下面的公式中的模型是:MA5&MA10&MA30,维持时间 3 天 作为多头排列的定义。24 并且注意请不要使用连等或者连续的大于号,就像上面的“MA5&MA10&MA30”不可以 直接出现在公式组当中,用“AND”连等符将两个连接判断式连接起来! MA5:=MA(CLOSE,5); MA10:=MA(CLOSE,10); MA30:=MA(CLOSE,30); CC:=MA5&MA30 AND MA10&MA30; 综合判断条件 EVERY(CC,3)=1 均线死叉 方向刚好相反,用同样的表达方式,但是注意 CROSS 函数使用时两条均线的位置已经颠倒 了,思维方式换一下,CROSS(X,Y)本身的含义为 X 上穿 Y,反过来当要表达 X 向下穿过 Y 的时 候--其实也就是 Y 向上穿过了 X。 CROSS(MA10,MA5) 当日成交量放大 2 倍的金叉 成交量放大两倍作为一个辅助条件出现, 很多的交易者都习惯用成交量来验证均线走势的可 靠性;其中需要量化一点的是,选用一个参照系来描述成交量的变化,我们选用了与上一周期的 成交量进行对比的方式。 MA5:=MA(CLOSE,5); MA10:=MA(CLOSE,10); AA:=CROSS(MA5,MA10); BB:=VOL/REF(VOL,1)&2; 综合判断条件 AA AND BB 3.3.2 KDJ指标回顾公式基本买卖原则:K 值由右边向下交叉 D 值作买,K 值由右边向上交叉 D 值作买;高 档连续两次向下交叉确认跌势,低档两次向上交叉确认涨势; D 值 20%超卖, D 值 80%超买; J 值 100%超买, J 值 10%超卖; KD 值于 50%左史徘徊或交叉时, 无意义,投机性太强的个股不适用。 K 向上交叉 D,并且 D 小于 20 首先, 简单导入 KDJ 的指标数据我们有两种方法: 第一是在条件选股当中点击“引入指标公 式”,然后选中 KDJ,好处在于同时也引进了参数,方便在条件选股参数优化的过程当中调整适 当的参数,在快速入门中我们已经进行了比较完整的介绍,这里就不再赘述了。 第一种:将原来的 KD 指标转化为中间表达式,然后写出逻辑判断式:RSV:=(CLOSE-LLV(LOW,N1))/(HHV(HIGH,N1)-LLV(LOW,N1))*100;25 K:=SMA(RSV,N2,1); D:=SMA(K,N3,1); 综合判断条件 CROSS(K,D)&&D ; 3.3.3 RSI指标回顾公式基本买卖原则: 短期 RSI 值在 20 以下,由下向上交叉长期 RSI 值时为买入信号;短期 RSI 在 80 以上,由 上向下交叉长期 RSI 时为卖出信号;短期 RSI 值由上向下突破 50,代表股价已经转弱,短期 RSI 值由下向上突破 50,表示强。 N1[2.0.7] N2[2.0.14]LC := REF(CLOSE,1); RSI1:SMA(MAX(CLOSE-LC,0),N1,1)/SMA(ABS(CLOSE-LC),N1,1)*100; RSI2:SMA(MAX(CLOSE-LC,0),N2,1)/SMA(ABS(CLOSE-LC),N2,1)*100; 3.3.4 WR指标回顾公式基本买卖原则: 威廉指标计算公式与强弱指数、随机指数一样,计算出的指数值在 0-100 之间波动:当 WR 线达到 20 时,市场处于超买状况,股价走势随时可能见顶。因此 20 的横线一般称为卖出线,投 资者在此时可以伺机卖出;相反,当 WR 线达到 80 时,市场处于超卖状况,走势可能即将见底, 80 的横线被称为买入线。 N[2.100.14] WR:100*(HHV(HIGH,N)-CLOSE)/(HHV(HIGH,N)-LLV(LOW,N)); 综合判断条件 CROSS(WR,80) CROSS(WR,20) 3.3.5 MACD指标回顾公式基本买卖原则: DIF,MACD 在 0 以上,大势属于多头市场,可做买,若 DIF 向下跌破,MACD 只可做原单的 平仓,不可新单进场;DIF,MACD 在 0 以下,大势属空头市场,DIF 向下跌破 MACD,可做卖,若 DIF 向上突破 MACD,只可做原单的平仓,不可新买单入场: L1[1.40.12] L2[1.100.26] L3[1.60.9]DIFF:EMA(CLOSE,L2)-EMA(CLOSE,L3); DEA:EMA(DIFF,L1); MACD:2*(DIFF-DEA),COLORSTICK;26 3.3.6BOLL通道回顾公式基本买卖原则: BOLL 又称布线指标,是利用统计学原理,先规定一个标准差,再求算出一个上下限波动 区间,其波动的上下限轴股价浮动应用原则。 必须配合其它技术指标共同分析,当布林通道由宽发窄时,说明股价逐渐向中值回归,股市 进入一个整理区间,投资者应以观望为主;当布林通道由窄发宽时,意味着行情开始发生发化: 如果股价逼近或穿过上限值, 表明超买力量增强, 股市可能会短期下跌, 此时应卖出股票, 反之, 当股价逼近或穿过下限值时,表明超卖力量增强,股市可能会反弹向上。 N[5.300.26] M[1.100.26] P[1.10.2]MID:MA(CLOSE,N);//求 N 个周期的收盘价均线,称为布林通道中轨 TMP2:=STD(CLOSE,M);//求 M 个周期内的收盘价的标准差 TOP:MID+P*TMP2;//布林通道上轨 BOTTOM:MID-P*TMP2;//布林通道下轨 3.3.7 多空指数(BBI)指标指标原理: 是一种关于不同日数移动平均线的综合指标,长期以来理论界一直为中短期的移动 平均线采用多少天数而争讳不休, 从而衍生出了 BBI 指标。 多空指数就是通过几条不同日数的移 动平均线加权平均的方法来解决这一问题。多空指数是将 3 天、6 天、12 天、24 天 4 种平均股 价(或指数)相加后除以 4 得出的数值。 计算方法:BBI=(3日MA+6日MA+12日MA+24日MA)/4; 编写要点 中间表达式之一: MA的表达方式如下,假设我们需要引用一条均线,但是不需要显示出来,所以在冒号后面加 上等号将它从表达为中间表达式。 MA5:=MA(CLOSE,5); 中间表达式之二: 当一条指标线有了名字以后,其后面的指标线就可以将该指标线作为一个函数来使用。请 看下例,求收盘价的5日移动平均价的10日移动平均线,写成: MA(MA(CLOSE,5),10); 若给收盘价5日移动平均线ǜ雒郑颐怯帜苷庋矗 MA5:MA(CLOSE,5); MA(MA5,10); 与前者不同的是,后者同图绘出两条指标线。软件中的计算符号同一般算术符号相通,所以27 BBI 计算如下: 指标内容和使用解析 MA3 := MA(CLOSE,3); MA6 := MA(CLOSE,6); MA12 := MA(CLOSE,12); MA24 := MA(CLOSE,24); BBI:(MA3+MA6+MA12+MA24)/4; 3.3.8 乖离率(BIAS)指标指标原理:BIAS 是运用股价指数与移动平均值的比值关系,观测股价偏离移动平均线的程度, 以此决定投资者的买卖行为。 计算方法:((当日收盘价-当日 MA 均线值)/当日 MA 均线值)*100 编写要点:在参数表内设定好相应的 3 个参数,从最大值到最小值为参数的变动范围,缺省值为 当前指标的取值。 注意:在软件中的百分比的表达方式不可以是“%”而是“/100”; 注意:以下的表达式中的函数嵌套关系的表达方法,不存在大括号、中括号等等,全部是用小括 号相互嵌套而成; 指标内容和使用解析 BIAS1:((CLOSE-MA(CLOSE,L1))/MA(CLOSE,L1))*100; BIAS2:((CLOSE-MA(CLOSE,L2))/MA(CLOSE,L2))*100; BIAS3:((CLOSE-MA(CLOSE,L3))/MA(CLOSE,L3))*100; 应用原则: 偏离率与移动平均值一致时, 偏率为0, 偏离率为正值时, 偏离率在移动平均线上方, 说明股市呈上升趋势;偏离率为负值时,偏离率在移动平均线下方,说明股市有下跌趋势;Y值偏 离移动移动平均线的界定范围大体在15%至-15%,即:当Y值在 0-(-15%)时,可适当卖出股票, 股价有可能反跌,当Y值在0-15%时,可适当买入股票,股价有可能反弹。 3.3.9 OBV指标编写指标原理:OBV 的英文全称是 On Ralancc Volumc,中文名称直译是平衡成交量,有些人 把每一天的成交量看作像海里的潮汐一样,形象地称 OBV 为能量潮,OBV 是由 Granville 于六 十年前发明并广泛流行的。我们可以利用 OBV 验证当前股价走势的可靠性,并可以由 OBV 得到 趋势可能反转的信号,对于准确预测未来是很有用的,比起单独使用成交量,OBV 得清楚。 计算方法:OBV 构成的基本原理,是根据潮涨潮落的原理。每一天的成交量可以理览成潮 水,但这股潮水是向上还是向下,是保持原来的方法,还是中递回落?这个问题就有 当天的收盘价与昨天的收盘价的大小比较而决定。28比成交量看 1、如果今收盘价&=昨收盘价,则这一潮水属于多方的潮水, 2、如果今收盘价&昨收盘价,则这一潮水属于空方的潮水。 编写要点:第一步,如果今收盘价&昨收盘价,那么成交量为正: AA:=IFELSE(CLOSE&REF(CLOSE,1),VOL,0); 第二步,如果今收盘价<昨收盘价,那么成交量为负: BB:=IFELSE(CLOSE&REF(CLOSE,1),-VOL,0); 第三步,将所有的成交量加和: CC:=AA+BB; 第四步,统计所有的周期上的成交量即得 OBV。 OBV:SUM(CC,0) 从上面编写的例子使用了IFELSE函数, AA计算了多方力量同时将空方的成交量忽略为 0, 同样在 计算空方成交量的同时我们又忽略了多方的力量,将两者加和就得到了我们所需要的OBV。3.4 价量走势编写范例也就是股票价格走势和成交量两大要素之间配合的选股方案。 价格、 成交量被形容为股票运 动的基本元素, 同时也被技术分析派认为是技术分析的最根本和最小的技术单位。 由两者在一段 连续的时间内的相互构造可以派生出其他所有的技术分析方法和技术指标。 所以也有许多的投资 者选用了价量作为研究对象, 力求从最简单的分析组合、 最基础的分析对象来把握对复杂市场运 动的准确描述。 在以下的许多单独的个例中, 我们节选出一些常见的成交量和价格配合使用的选股条件进行 编写。 3.4.1 放量创出新高概念简单,成交量放大的同时走出一个新的高点,但是同样需要一个具体量化的过程,成交 量放大到多少?和哪一天的成交量进行比较?--以上问题的解决是建立选股模型的前提。 “5 日成交量均量较前一周期放大一倍,同时收盘价创下了 30 天内的新高” AA:=MA(VOL,5); BB:=REF(AA,1); CC:=HHV(CLOSE,30); 综合判断条件 AA/BB&2&&CLOSE=CC; 以上是我们测试中的一个例子,它是符合我们的选股条件,但是后来的事实又说明它是一 个失败的信号,之所以把它选择出来,是因为通常人的心理是报喜不报忧,这里提出的原因 是我们希望股民朋友从多观察,注意防范风险,三思而后行!29 3.4.2阶段涨幅 选出 N 日以来的个股涨幅大于 M%的股票 参数设置: 参数名 N M 缺省值 24 20 最小值 5 5 最大值 100 100AA:=REF(CLOSE,N); C/AA&1+M/100; 3.4.3持续放量走高 连续的成交量放大同时股价攀高: 量化: 连续三天:5 日均量依次放大;价格步步攀高; 那么,建立的模型就是连续 3 天 MA(VOL,5)和 CLOSE 保持上升,当然我们将 5 日的 均量指标标注的话,效果会更加明显: AA:=MA(VOL,5) &REF(MA(VOL,5),1); BB:=COUNT(AA,3)=3; CC:=CLOSE&REF(CLOSE,1); DD:=COUNT(CC,3)=3; 判断条件: BB&&DD 3.4.4突破长期整理平台 它描述了股票的价格在一定的范围上下波动, 如果有庄家主力在其中悄悄吸纳......直到某 一天股价一鹤冲天!我们寻找各种特征,建立以下的模型: “长期”,150 天;“横盘”,设为股价在 150 日均线上下 15%波动;放量,设为比昨日成交量 放大;创下 150 天以来的历史新高! 比昨日成交量放大 2 倍: V1:=MA(VOL,5); V2:=VOL/ REF(V1,1); 长期盘整,分别取得当天 150 日均价,150 日最高价,150 日的最低价,设为股价在 150 日均线上下 15%波动,也即高低落在 15%的幅度之内: PZ1:=MA(CLOSE,M); PZ2:=HHV(HIGH,M);30 PZ3:=LLV(LOW,M); PZ4:=(PZ2-PZ1)/PZ1; PZ5:=(PZ1-PZ3)/PZ1; PZ:=REF(PZ4,1)&0.15 AND REF(PZ5,1)&0.15; 今天成为新的高位! TP1:=HHV(HIGH,M); TP:= HIGH=TP1; 综合判断条件 V2&&PZ&&TP 3.4.5创下历史新低 新高和新低是投资者经常关注的变化, 因为它们通常寓意着一些重要的信息, 尤其是历史的 新高或者新低,其意义应该是更加重要。如果细心的话在软件的函数介绍当中,屡次提到了如果 HHV、LLV、MA 等引用类函数的时段为 0 的话,那么该函数的计算范围是本地所有的数据,下面 的例子以历史低点计算目标。 量化的结果: 当日股价曾经到了历史的最低价之下,也就是“当天的最低价为上市以来所有交易日的最低 价”: AA:=LLV(LOW,0); LOW=AA; 刚好相反的历史新高编写如下: AA:=HHV(HIGH,0); HIGH=AA ; 3.4.6跌破30生命线 我们先量化这个概念:是收盘价线当日下穿了 30 日的均价线。 AA:=CLOSE; BB:=MA(CLOSE,30); CROSS(BB,AA);3.5 盘中动态编写范例技术派的拥护者秉承“盘面反映一切”的观点, 相信尽管股票市场发化多端, 影响股价波动 的因素错综复杂,但是,这些因素对于股价的影响都会通过盘面表现出来,例如国家政策、经济 形式、各种消息,和上市公司的经营状况,市场主力动向以及中小散户的心理等等,一切都会通31 过价格的波动和成交量的变化呈现在您的面前。 3.5.1尾盘大单拉升 无论怎样,在尾盘的时间内经常出现一些出人意料的走势,让人叹为观止,也是主力庄家的 一种做盘的手法,其具体的含义也因为不同的事件、不同的形态、不同的基本面有不同的解释。 尾盘拉升: 量化模型一: 尾盘是指收盘前十分钟内的成交量达到当天均量的 3 倍手数以上, 并且拉升的幅度要求大于 2%; AA:=TIME&=1455; BB:=SUM(VOL,240)/240;//当天均量 CC:=SUM(VOL,10)/10;//10 分钟内的成交均量 DD:=REF(CLOSE,10); AA&&CC/BB&3&&CLOSE/DD&1.02 这其中的量化模型可以有很多, 因人而异, 例如尾盘 2 分钟内, 14:58―15:00 的时段分析行情。 3.5.2盘中巨单向上成交 有的时候盘中会突然出现很大很大的成交量, 出现了十分明显的异动, 例如一旦当价位格拉 升了 3%,甚至于直接拉钟涨停板的位置,如何描述这种形态呢? 分析和量化: 首先选择合适的分析周期,既然描述的是单笔的变化,当然是选用分笔成交分析周期合适! 本笔和上笔的价差达到 3%以上。单笔成交量达到了 2000 手以上。 AA:=REF(CLOSE,10); CLOSE/AA&1.03*VOL&2000 ; 3.5.3买卖五档寻找机会 盘口是反映市场的第一窗口, 往往我们能从盘口五档行情中找到许多交易机会, 比如突然盘 口的买方挂单量激增,我们就可以抓住这一机会顺势而为。 ASKVOLL:ASK1VOL+ASK2VOL+ASK3VOL+ASK4VOL+ASK5VOL;//盘口买量前五档 BIDVOLL:BID1VOL+BID2VOL+BID3VOL+BID4VOL+BID5VOL;//盘口卖量前五档 ASKVOLL*3&BIDVOLL3.6 趋势类模型编写范例3.6.1均线类①均线排列模型32 关键函数:MA 建议使用周期:任意 模型说明:MA5,MA10,MA20多头排列时做多,空头排列时做空。编者以一个周期内这三条均 线的大小关系为判断标准举例,大家也可以使用多个周期的比较来判断多/空头排列关系。 //中间变量 MA5:=MA(CLOSE,5); MA10:=MA(CLOSE,10); MA20:=MA(CLOSE,20); //交易系统(条件,指令) MA5&MA10&&MA10&MA20,BPK; //买平开 MA5&MA10&&MA10&MA20,SPK; //卖平开 //过滤函数 AUTOFILTER; 容易犯的编写错误: A、对于三个数的比较,大家往往习惯写成 MA5&MA10&MA20 这样,而在软件的模型编写中,目前 只能两个变量之间进行比较,也就是说此类三个以上变量连续比较需要像模型中那样拆分来 写:MA5&MA10&&MA10&MA20 B、缺少计算函数。 如:求均线时,写为 MA5:(CLOSE,5),而缺少了 MA。②均线金死叉模型关键函数:MA、EMA、EMA2、CROSS 建议使用周期:所有 K 线周期。 模型说明:短期均线上穿长期均线(金叉)做多,短期均线下穿长期均线(死叉)做空。 参数设置:参数名 N1 N2缺省值 5 30最小值 0 0最大值 100 100A、简单移动平均线:B、指数加权平均线:C、线性加权平均线: //中间变量 //中间变量 //中间变量P1:=MA(CLOSE,N1);P1:=EMA(CLOSE,N1);P1:=EMA2(CLOSE,N1); P2:=MA(CLOSE,N2);P2:=EMA(CLOSE,N2);P2:=EMA2(CLOSE,N2); //交易条件//交易条件//交易条件 TMP1:=CROSS(P1,P2); TMP1:=CROSS(P1,P2);33TMP1:=CROSS(P1,P2); TMP2:=CROSS(P2,P1); TMP2:=CROSS(P2,P1); //交易系统 TMP1,BPK; //平空操作 TMP2,SPK;//平多操作 //过滤函数 AUTOFILTER;TMP2:=CROSS(P2,P1);注:3个指标交易条件不同,交易系统写法相同。故此处分别列了3个指标的中间变量、交易条 件,只写一个交易系统。③均线结合MACD 模型关键函数:EMA 建议使用周期:日线 模型说明:利用 DIFF 和 DEA 的比较和收盘价的 15 日指数加权和最新价的比较作为买卖依据进 行交易。 //中间变量 DIFF := EMA(CLOSE,12) - EMA(CLOSE,26); DEA:= EMA(DIFF,9); EMA15:=EMA(CLOSE,15); //交易条件 TMP2:=DIFF&DEA&&CLOSE&EMA15; TMP1:=DEA&DIFF&&EMA15&CLOSE; //交易系统 TMP1,BPK;//平空操作 TMP2,SPK;//平多操作 //过滤函数 AUTOFILTER; 3.6.2通道类①唐奇安通道模型关键函数:HHV、LLV、REF、CROSS 建议使用周期:日线 模型说明: 参数设置: 突破前 20 天最高价做多,突破前 20 天最低价做空。参数名 X//中间变量缺省值 20最小值 1最大值 10034 XH:=REF(HHV(HIGH,X),1);//X 周期高点,X 是参数,自行调整 XL:=REF(LLV(LOW,X),1); //X 周期低点,X 是参数,自行调整 //交易条件: TMP1:=HIGH&XH&&开仓时间; //开多平空条件 TMP2:=HIGH&XL&&开仓时间; //开空平多条件 //交易系统: TMP1,BPK; TMP2,SPK; //过滤函数 AUTOFILTER; 容易犯的编写错误: 最高价高于前 20 周期最高价。应写为 HIGH&REF(HHV(HIGH,20),1),常见错误是直接写为 HIGH&HHV(HIGH,20);②布林通道结合阴阳K线模型关键函数:STD、CROSS、ISUP、ISDOWN 建议使用周期:日线 模型说明: 收盘价向上突破布林通道下轨并且当根 K 线收阳做多, 收盘价向下突破布林通道上轨 并且当根 k 线收阴做空。 参数设置:参数名 N M缺省值 26 26最小值 1 1最大值 100 100//中间变量 MID:=MA(CLOSE,N); TMP2:=STD(CLOSE,M); TOP:=MID+2*TMP2; BOTTOM:=MID-2*TMP2; //交易条件 TJ1:=CROSS(CLOSE,BOTTOM)&&ISUP;// 平空开多条件 TJ2:=CROSS(TOP,CLOSE)&&ISDOWN; //平多开空条件 //交易系统: TJ1,BPK; TJ2,SPK;35 //过滤函数 AUTOFILTER;3.7 振荡类模型编写范例3.7.1 主动买和主动卖模型 关键函数: CROSS,VALUEWHEN,TIME 模型说明: 现价大于当日开盘价并且主动买大于主动卖时买平开, 现价小于开盘价并且主动卖大 于主动买时卖平仓。 建议使用周期:分钟线 //中间变量 AA:=SCALE*VOL;//主动买 BB:=(1-SCALE)*VOL;//主动卖 //交易条件 TMP1:= CLOSE&OPEN&&AA&BB; TMP2:= CLOSE&OPEN&&AA&BB; //交易系统: TMP1,BPK; TMP2,SPK; //过滤函数 AUTOFILTER; 3.7.2 ROC(变动速率)与价格趋势变动背离: 关键函数:REF,CROSS,MA,HHV 建议使用周期:所有 K 线周期。 模型说明:价格创新高,ROC 未配合上升,显示上涨动力减弱;价格创新低,ROC 未配合下降, 显示下跌动力减弱 参数设置:参数名 N M//中间变量缺省值 24 20最小值 5 5最大值 100 100ROC:=(CLOSE-REF(CLOSE,N))/REF(CLOSE,N)*100; ROCMA:=MA(ROC,M); //交易条件36 TMP1:=C&REF(HHV(C,N1),1)&&ROC&ROCMA; TMP2:=C&REF(LLV(C,N1),1)&&ROC&ROCMA; //交易系统: TMP1,BPK; TMP2,SPK; //过滤函数 AUTOFILTER; 3.7.3三减六日乖离模型: 关键函数:REF,MA,HHV,LLV 使用周期:所有K线周期 模型说明:乖离值为正数时,未能突破前期高值,卖出;反之,买进。 参数设置:参数名 N//中间变量缺省值 24最小值 5最大值 100B36:= MA(CLOSE,3)-MA(CLOSE,6); B612:=MA(CLOSE,6)-MA(CLOSE,12); //交易条件 TMP1:=REF(B36&REF(HHV(B36,N),1),1)&&B36&REF(B36,1); TMP2:REF(B36&REF(LLV(B36,N),1),1)&&B36&REF(B36,1); //交易系统: TMP1,BPK; TMP2,SPK; //过滤函数 AUTOFILTER;3.8 公式条件单范例我们常会在交易中设置时间条件单或价格条件单, 但如果想利用更灵活一些的思路作为条件 单的触发条件,如:5 日均线和 20 日均线死叉平仓等,则是传统条件单做不到的。“公式条件 单”可按照指标策略编写条件单,让条件单不再停留在简单的价格条件和时间条件上。 公式条件单与普通的程序化模型不完全相同, 普通的程序化模型是一套完整的策略, 有对应 的开平仓指令,可进行从开到平这样一次完整的交易,而公式条件单是单一的思路,只能实现开37 /平一种指令形式,其本质,是一种特殊的条件单。公式条件单的编写规则 1、 公式条件单源码中必须有一句“CONDITION_ORDER”语句2、未来函数可写进条件单; 3、BARSSK、 BARSBK、 BKPRICE、SKPRICE 不允许写入公式条件单; 例: C&REF(C,1)&&BARSSK&2,BP; CONDITION_ORDER; (×) 4、指令分组,不允许写入公式条件单; 例:C&REF(C,1),SP('B'); CONDITION_ORDER; (×)38 5、每个公式条件单只能写 BK、SK、BP、SP 其中一种指令,可写多行指令; 例 1:C&MA(C,5),BP; C&REF(C,1),BP; CONDITION_ORDER;(√) 例 2:C&MA(C,5),BP; C&REF(C,1),SP; CONDITION_ORDER; (×) 6、每个公式条件单只能写 BPK、SPK 其中一种指令,且只能写一行指令; 例 1:C&REF(C,1),BPK; CONDITION_ORDER; (√) 例 2:C&REF(C,1),BPK; C&REF(C,1),SPK; CONDITION_ORDER; (×) 7、支持 CLOSEOUT 指令。 8、每个公式条件单只能写 BK(N)、SK(N)、BP(N)、SP(N)其中一种指令,可写多行指令; 但不允许带手数的指令和不带手数的指令混写。 如何将公式条件单加载到页面盒子运行: 步骤一: 将公式条件单加载到主图后装入页面盒子,如下图①②③所示39 步骤二:运行页面盒子并启动公式条件单,如下图④⑤所示40 常见注意事项: 1、模型的历史信号是否对公式条件单有影响? 答:模型的历史信号对公式条件单没有影响,在模组运行时,公式条件单每一个信号都不考虑 历史信号,完全根据公式写的条件出信号。 2、如果账户持仓小于公式条件单指令所写的持仓,如何处理? 答: 账户持仓如果不够, 有几手平几手; 账户持仓多余指令所写的持仓时按照指令中的手数平仓。 3、公式条件单中全部条件都产生信号后,公式条件单是继续循环运行还是终止? 答:全部条件都产生信号后,会自动终止运行。 4、同一根 K 线上是否支持出多个信号? 答:一根 K 线上信号确定以后(复核后) ,会计算下一个信号,支持一根 K 线上先后出现多个 信号。但是,在模型具有 MONO_SIGNAL 语句的情况下,一根 K 线只支持一个信号,取最 先出现的信号作为有效信号。 5、如果公式条件单的某一个信号没有成交,那么它之后的信号会受到影响么? 答:公式条件单各个信号是独立的,上一个信号没有执行完的情况下,新信号不理会现有的挂 单,照常执行。 6、 为什么我的条件单在加载的时候没有弹出初始化窗口? 答:带手数的公式条件单模组不会弹出初始化对话框; 不带手数的公式条件单模组弹出初始化对话框,可设置每次下单手数(CLOSEOUT 除 外,CLOSEOUT 默认全平交易账户买卖持仓) 。 7、公式条件单在程序化运行过程中的规则请参照下方链接 答:http://www.wenhua.com.cn/popwin/tiaojiandan-sm.htm3.9 常见模型公式编写问题(1)正向思考编写条件 编写时掉入逻辑思维的陷阱,在考虑模型条件时,不需要考虑什么条件下不进行交易,而 是正向的去考虑一定要达到何种条件时才会进行交易, 这样在编写语句的时候, 只需将要求的 各个条件逐个罗列出来,使用操作符连接即可。 例如,均线与 MACD 结合编写模型时,要求均线金叉时,MACD 数值不得为负值,那么正向 考虑,均线金叉时 MACD 的数值应该大于等于 0,直接编写为: MACD&0 AND CROSS(MA5,MA30) (2)AND 与 OR 关系书写不完整明确,使得语句执行的结果不实际想要表达的内容不符。41 如:MACD 数值为正时,5日线金叉10日线或者10日线金叉30日线时进行交易的条件语句 不可直接写作: MACD&0 AND CROSS(MA5,MA10) OR CROSS(MA10,MA30); 而应该使用括号将后面的均线条件括起来: MACD&0 AND (CROSS(MA5,MA10) OR CROSS(MA10,MA30)); 注:不要吝啬使用(),只有准确的书写了语句才能达到想要的结果。 (3)进行日内交易时注意时间函数的使用。 不仅平仓条件中需要使用时间函数控制, 开仓条件也需要使用时间函数来进行控制。 另外 如果采用了当前 K 线走完后发出交易指令的交易策略, 更加要注意时间轴刻度与语句执行时间 的关系。如: MAN:=MA(CLOSE,15); TMP1:=TIME&=0915&&TIME&1455&&CLOSE&MAN; BMP1:=TIME&=1455||CLOSE&MAN; TMP2:=TIME&=0900&&TIME&1455&&CLOSE&MAN; BMP2:=TIME&=1455||CLOSE&MAN; BMP1,BP; //交易系统之平空操作 TMP1,BK;//交易系统之开多操作 BMP2,SP; //交易系统之平多操作 TMP2,SK; //交易系统之开空操作 说明:5 分钟周期,09:15 之后进行日内交易,14:55 进行平仓,不仅需要在平仓条件中写 入时间 1455,还需要写入开仓条件,否则可能会在 1455 平仓后,继续开仓进行交易。 另外如果策略为 K 线走完发出交易指令, 该机制是出现指令的下一根 K 线开盘时发委托, 由于尾盘平仓是在 1455 是最后一根 K 线, 所以当天不会发指令, 而是在明天第一根开盘 时发委托,一定要注意掌握使用。 (4)如何编写设置委托价格形式? 答:软件的信号价格设置,通过模型的编写来实现 ①未编写委托价格函数,模组默认为对价委托 ②委托价格函数:SETSIGPRICETYPE(SIG,PRICE),不同的信号设置不同的委托方式。 SIG 位置为交易指令,包括 BK\SK\BP\SP\BPK\SPK\CLOSEOUT 所有指令。 PRICE 位置为委托方式,包括以下十种: NEW_ORDER 最新价 PASSIVE_ORDER 排队价 ACTIVE_ORDER 对价 TRACING_ORDER 自动连续追价42 CMPETITV_ORDER 超价 LIMIT_ORDER 市价 SIGPRICE_ORDER 指令价 SIGIMPROVED_ORDER 指令超价 CANCEL_ORDER 自动撤单 (自动撤单参数在交易界面-参数设置-自动撤单中进行设置) 指定价 可以为具体的数值,也可以为表达式,即支持如下的写法:A:HHV(H,3);//定义 A 为 3 个周期内的最高价 SETSIGPRICETYPE(BK,A);//BK 信号按照 3 个周期的最高价委托 例: C&HV(H,20),BK;//价格大于前 20 周期高点买开仓 C&LV(L,20),SK;//价格小于前 20 周期低点卖开仓 C&HV(H,10),BP;//价格大于前 10 周期高点平空仓 C&LV(L,10),SP;//价格小于前 10 周期低点平多仓 SETSIGPRICETYPE(BK,SIGPRICE_ORDER);//买开的委托以指令价委托 SETSIGPRICETYPE(SK,SIGPRICE_ORDER);//卖开的委托以指令价委托 SETSIGPRICETYPE(BP,TRACING_ORDER);//买平的委托以自动连续追价委托 SETSIGPRICETYPE(SP,TRACING_ORDER); //卖平的委托以自动连续追价委托 AUTOFILTER; ③一种指令只能设置一种价格方式,例如分组指令 BK(‘A’) 设置一种价格方式 ④该函数可以用于模组运行, 也可以用于页面盒子运行 (仅对全自动下单的页面盒子有效) (5)如何编写设置模型运行方式: 答:使用 SETMODRUNTYPE(N);可以设置模型运行方式 ①N=0,按模型中编写的信号执行方式出信号并下单 ②N=1,按模型中编写的信号执行方式出信号,由算法交易运行池中的模型来控制 (相当于以前的设置信号执行方式后绑定组件) ③N=2,由算法交易运行池中的模型接管所有信号,控制出信号和下单。 (相当于以前的组件接管所有信号) 6)如何避免指标返回值过大或是过小导致的 K 线被压缩: 答:利用定义变量函数&:=&。 例:布林通道+均线指标,优于 TMP2 值过小,导致指标图形被压缩,如下图 MID:MA(CLOSE,26);43BK(‘B’)都只能统一对 BK TMP2:STD(CLOSE,26); TOP:MID+2*TMP2; BOTTOM:MID-2*TMP2; MA1:MA(CLOSE,5),LINETHICK1; MA2:MA(CLOSE,20),LINETHICK1;修改指标后,可以正常显示,如下图: MID:MA(CLOSE,26); TMP2:=STD(CLOSE,26); TOP:MID+2*TMP2; BOTTOM:MID-2*TMP2; MA1:MA(CLOSE,5),LINETHICK1; MA2:MA(CLOSE,20),LINETHICK1;7)如何设置模型的属性 答:如下图所示44 三种指标属性含义: 副图指标:默认加载到幅图,可通过叠加指标的方式加载到主图,坐标方式为独立坐标,多指 标叠加,指标值不影响图形显示。典型指标:KDJ,MACD。 K 线附属指标:默认加载到主图,坐标方式为附属 K 线,多指标叠加,指标值差异可能导致图 形压缩。典型指标:MA 组合,BOLL 布林通道线。 主图 K 线形态:默认加载到主图,每个主图只能加载一种 K 形态,系统默认的 K 线形态是&K 线(蜡烛图)&。典型指标:竹线,宝塔线。 属性为&K 线附属指标&的 KDJ 加载到主图后,K 线压缩。45 属性为&副图指标&的 KDJ 加载到主图后,K 线和 KDJ 指标各自坐标独立,均能正常显示。如何在主图叠加&副图指标&属性的指标 在主图点右键设置技术指标,如下图。46 上述模型仅供参考,据此交易风险自负。第四章 复杂模型编写示例4.1 跨指标模型模型中跨指标,是将多个指标交易思想结合在一起进行看盘断势。 关键操作符:..(独立坐标方式显示线型) 在编写跨指标模型前,我们先来深入了解一个操作符―“..”。 当我们需要把多种条件放在一起进行判断时, 会遇到这样一个问题, 由于每个变量计算结果差异 较大,当加载到主图时线型会被压缩,如下图所示: RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; AA:HHV(H,20); BB:LLV(L,20); DD:(AA+BB)/2; M:SMA(RSV,3,1);47 这种情况,我们就需要使用“..”操作符来定义变量,用“..”操作符定义的变量,线型会被显 示出来,并且各线型之间坐标相互独立,不会发生挤压的情况。如下图所示: RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; AA:HHV(H,20); BB:LLV(L,20); DD:(AA+BB)/2; M..SMA(RSV,3,1);趋势判断与精细分析相结合范例关键函数:CROSSUP,CROSSDOWN 建议使用周期:各周期 模型说明:利用跨指标模型,可以将趋势判断模型和摆动分析模型结合起来,用趋势模型判断方48 向,用摆动模型找入场点,从而达到趋势判断与精细分析相结合的目的。 1、确定要整合的指标 //①MA 均线模型 MA5:MA(C,5); MA10:MA(C,10); CROSSUP(MA5,MA10),BK; //MA5 上穿 A10,买入。 CROSSDOWN(MA5,MA10),SP;//MA5 下穿 MA10,卖出。 //②MACD 模型 DIFF : EMA(CLOSE,SHORT) - EMA(CLOSE,LONG); DEA : EMA(DIFF,M);2*(DIFF-DEA),COLORSTICK; CROSS(DIFF,DEA),BK;//DIFF 上穿 DEA,买入。 CROSS(DEA,DIFF),SP;//DIFF 下穿 DEA,卖出。 2、整合两指标变量和交易条件,完成跨指标模型编写 //中间变量 MA5:=MA(C,5); MA10:=MA(C,10); DIFF := EMA(CLOSE,SHORT) - EMA(CLOSE,LONG); DEA := EMA(DIFF,M);//交易条件+交易系统 MA5&MA10&&CROSSUP(DIFF,DEA),BK;//5 日均线大于 10 日均线并且 MACD 金叉买入 MA5&MA10&&CROSSDOWN(DIFF,DEA),SP;//10 日均线大于 5 日均线并且 MACD 死叉卖出 AUTOFILTER;4.2 跨周期模型关键函数:#IMPORT 函数语法: #IMPORT [PERIOD,N,FORMULA] ASVAR A1:VAR.A; PERIOD 需要被引用的 K 线周期级别; N 被引用的具体 K 线周期; FORMULA 被引用的指标(模型)名称; VAR 给被引用指标起一个新名字49 引用其他周期 FORMULA 指标中的变量 A 注: PERIOD 支持如下周期级别: SEC (秒周期) ,MIN (分钟周期) ,HOUR (小时周期) ,DAY (日周期) ,WEEK (一周),MONTH(一月) ,QUARTER(一季度),YEAR(一年); N 为大于等于 1 的整数,支持自定义周期; FORMUL 被引用指标名称不能包含汉子和符号; VAR 定义变量名不能与函数名重复,可以和被引用指标名称相同; #IMPORT 函数是没有分号结尾的! 运行原理: 跨周期函数每笔数据都会运行一次, 因此所引用的数据跟随实时行情变动, 这种计算方式不 存在任何未来函数性质,是真正意义上的跨周期引用,更准确。编写范例1)在 5 分钟周期引用昨天日 K 线的收盘价 模型说明:跨周期模型从编写到加载共需要三步,首要要建立要引用的指标,再次建立跨周期模 型,最后将模型加载到应用的周期上。 //step1:建立指标 ACC:REF(C,1);50 //step2:建立指标 B#IMPORT[DAY,1,A] AS A1 C1:A1.CC;//step3:将指标 B 应用到 5 分钟 K 线图 2)多周期共振判断行情 模型说明:1 小时周期均线多头排列,5 分钟 KD 指标金叉,做多 ;1 小时周期均线空头排列,5 分钟 KD 指标死叉,做空 //Step1:编写被引用的均线指标 MM M1:MA(C,5); M2:MA(C,10); M3:MA(C,20); //Step2:新建模型 DKMA #IMPORT[HOUR,1,MM] AS MM MA1:MM.M1; MA2:MM.M2; MA3:MM.M3;//调用 1 小时 K 线周期的均线指标 RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; K:=SMA(RSV,3,1); D:=SMA(K,3,1);//增加 5 分钟周期的 KD 指标 MA1&MA2&&MA2&MA3&&CROSS(K,D),BPK; MA1&MA2&&MA2&MA3&&CROSS(D,K),SPK; AUTOFILTER;//编写开平仓条件 3)跨合约引用数据 关键函数:#CALL 函数语法: #CALL [CODE, FORMULA] AS VAR A1:VAR.A; CODE 被引用合约文华码 FORMULA 被引用指标(模型)名称 #CALL 函数也是没有分号结尾的! 模型说明:当文华 CCI 价格破 20 日新高,主力合约均线金叉,做多; 当文华 CCI 价格破 20 日 新低,主力合约均线死叉,做空; //Step1:新建突破指标 HLHH:C&HV(HIGH,20);51 LL:C&LV(LOW,20);//Step2:新建模型 HLMAMA5:MA(C,5); MA10:MA(C,10); #CALL[7186,HL] AS HL1 H1:=HL1.HH; L1:=HL1.LL; H1&&CROSSUP(MA5,MA10),BPK; L1&&CROSSDOWN(MA5,MA10),SPK; AUTOFILTER;4.3 分组指令传统模型编写平仓条件没有对不同的开仓条件加以区分。分组指令可以对开平条件分成 n 个组, 某个组的条件开的仓位只有某个组对应的平仓条件条件才能平, 其他组的平仓条件满足不 会出信号,也就不会委托。1)过滤模型分组指令编写关键函数:BK('A'),SK('A'),SP('A'),BP('A') 建议使用周期:所有K线周期 模型说明:不同的开仓条件想以不同的平仓条件来平仓,可以使用指令分组来实现。2)非过滤模型分组指令编写关键函数:BK('A'),SK('A'),SP('A'),BP('A')52 建议使用周期:所有K线周期 模型说明:首次入场策略与加仓策略不同,想以不同的止损平仓策略来平仓,可以使用指令分组 来实现。需要注意的地方: 过滤模型: 如果上一根 K 线信号是组 A 发出的开仓信号(bk sk bpk spk) 当前 K 线只能是组 A 的平仓信号 如果上一根 K 线信号是组 A 发出的平仓信号(bp sp) 当前 K 线可以是任意组的开仓信号 (以信号 出现的顺序取第一个开仓信号) 。 注:不分组的平仓条件只能平不分组的开仓条件 非过滤模型: 如果上一个信号为组 A 发出的开仓信号,则下一信号必须为组 A 的加仓信号或平仓信号 如果上一个信号为组 A 的平仓信号并且组 A 持仓为 0,下一信号可以为任意组的开仓信号; 如果 A 组持仓大于 0,则必须为 A 组的开仓信号或平仓信号 注:不分组的平仓条件只能平不分组的开仓条件4.4 日内模型1)今天信号不受前日影响关键函数:DAYTRADE1 建议使用周期:分钟周期 模型说明:当我们做日内周期,只想以当日数据来运行模型,并且希望昨日的信号和今天的信号53 间相互独立,这时就需要用到DAYTRADE1函数。 策略举例:5周期均线上穿10周期均线,买开仓, 5周期均线下穿10周期均线,卖开仓;亏10个点 止损,收盘前1分钟清仓,只用日内数据进行计算。 //中间变量 MA5^^MA(C,5); MA10^^MA(C,10); //交易条件+交易系统 CROSSUP(MA5,MA10),BK;//5周期均线上穿10周期均线,买开仓 CROSSDOWN(MA5,MA10),SK;//5周期均线下穿10周期均线,卖开仓 C&BKPRICE-10*MINPRICE,SP;//亏损10点平多 C&SKPRICE+10*MINPRICE,BP;//亏损10点平空 CLOSEMINUTE&=1,CLOSEOUT;//收盘前一分钟,清仓。 AUTOFILTER;//过滤模型 DAYTRADE1;//分钟周期上,只用日内数据进行计算 关键函数说明: DAYTRADE1 分钟周期上只用日内数据计算。 用法: DAYTRADE1 模型中写入该函数,分钟周期上,只用日内数据进行计算,以避免行情跳空导致指标 数据失真。 注: 1、该函数适用日线以下周期。 2、不同函数对当天数据的引用不同,使用时需注意函数用法,如: MA(X,N)函数 N 的取值:当天如果 k 线小于 N 根,则返回空值。如果 k 线为大于等于 N 根,则 取 N。 HHV(X,N)函数 N 的取值:当天如果 k 线小于 N 根,则返回实际根数,如果 k 线为大于等于 N 根,则取 N。2)开盘价突破模型关键函数:REF,VALUEWHEN,TIME,CROSS,DATE 建议使用周期:五分钟 模型说明:五分钟周期开盘第一根K线的收盘价与当日开盘价比较及最新价和当日开盘价的比较 作为买卖依据进行交易,尾盘平仓不留隔夜单。 //中间变量 A:=VALUEWHEN(TIME=0905,CLOSE); B:=VALUEWHEN(DATE&&REF(DATE,1),OPEN);54 //交易条件 TMK1:=A&B&&CROSS(CLOSE,B)&&TIME&1450; TMP1:=(A&B&&CROSS(B,CLOSE))||TIME&=1450; TMK2:=A&B&&CROSS(B,CLOSE)&&TIME&1450; TMP2:=(A&B&&CROSS(CLOSE,B))||TIME&=1450; //交易系统 TMK1,BK; TMP1,SP; TMK2,SK; TMP2,BP; //过滤函数 AUTOFILTER; 容易犯的编写错误: A、所选周期不所用模型时间上不统一 如 5 分钟周期最小能取到的时间点就是 5 分钟,如 ,1445 这样,所以其最后一 根 K 线是 1455 这根。而如果您使用的是 3 分钟周期,那么 1455 就不是最后一根 K 线了,因为 3 分钟周期上所能取到的时间点为每 3 分钟,如 ,那么就需要作出相应修改,如平空 条件:=TIME=1455;就需要修改为平空条件:=TIME=1457; B、开仓漏写时间控制 进行日内交易时注意时间函数的使用, 不仅平仓条件中需要使用时间函数控制, 有时开仓条 件也需要使用时间函数来进行控制。 例如:上面的模型,14:50 进行平仓,不仅需要在平仓条件中写入时间 1450,还需要写入 开仓条件,否则可能会在 1450 平仓后,继续开仓进行交易。 C、使用这种 VALUEWHEN(TIME=AA,DATA)格式的交易模型,一定要注意限制开仓时间在时 间 AA 之后,否则在开盘到 AA 之前,对比的是昨日的 DATA 值3)开盘后前三十分钟最高最低价突破模型关键函数:REF,VALUEWHEN,TIME, DATE,HHV,LLV,BARSLAST 建议使用周期:五分钟 模型说明:以最新价与开盘 30 分钟内的最高最低价进行比较开仓,在收盘前平仓。 //中间变量 NN:=BARSLAST(DATE&&REF(DATE,1) )+1; B:=VALUEWHEN(TIME&=0930,HHV(HIGH,NN)); D:=VALUEWHEN(TIME&=0930,LLV(LOW,NN)); //交易条件55 TMK1:=CLOSE&B&&TIME&1455&&TIME&0930; TMP1:=TIME=1455; TMK2:=CLOSE&D&&TIME&1455&&TIME&0930; TMP2:=TIME=1455; //交易系统 TMK1,BK; TMP1,SP; TMK2,SK; TMP2,BP; //过滤函数 AUTOFILTER;4)单均线模型关键函数:MA,TIME 使用周期:1 分钟 K 线 模型说明:开盘后 15 分钟再根据均线不收盘价之间的关系进行日内买卖,尾盘平仓。 //中间变量 MA15:=MA(CLOSE,15); //交易条件 TMK1:=TIME&=0915&&TIME&1455&&CLOSE&MA15&&BARSLAST(CROSS(CLOSE,MA15 ))&=3; TMP1:=TIME&=1455||(CLOSE&MA15&&BARSLAST(CROSS(MA15,CLOSE ))&=3); TMK2:=TIME&=0900&&TIME&1455&&CLOSE&MA15&&BARSLAST(CROSS(MA15,CLOSE ))&=3; TMP2:=TIME&=1455||(CLOSE&MA15&&BARSLAST(CROSS(CLOSE,MA15 ))&=3); //交易系统 TMK1,BK; TMP1,SP; TMK2,SK; TMP2,BP; //过滤函数 AUTOFILTER; 注:加入BARSLAST函数过滤,避免短时间段内频繁交易。4.5TICK 模型在学习 TICK 模型编写之前,我们先了解一些盘口的概念: 主动买:买开、卖平56 主动卖:卖开、买平 增仓:持仓量的增减 现手:成交量 价格和数量反映了目前多空双方达成一致的均衡: 1、价格不变化或者变化很小,市场正处于横盘小幅震荡的走势 2、价格在很大范围内上下变化,市场正处于剧烈震荡中 3、价格不断升高,上涨行情,反之下跌行情 4、价格变化缓慢,缺乏动力 5、价格不断跳动,有走出趋势行情的动力 交易不活跃 交易不活跃 交易活跃 交易不活跃 交易活跃6、价格迅速跳动,价格均速变大,价位连续,稳健趋势行情的特征,后期可能加速 7、价格迅速跳动,变化不连续,呈跳跃性,表示放量突破的行情 ?? TICK模型需要一类特殊函数来编写,这类函数叫做TICK函数1)TICK趋势模型编写 关键函数:BKPRICE,ISLASTBK,MONEYTOT,SKVOL57 使用周期:TICK周期 模型说明:价格一直上行于 10 周期均线之上并且大于 20 周期的最高价,做多,反之做空;0.8 个点位的限价止损,盈利保持 40 个周期出场。 //中间变量 M:=30; J:MA(C,M); //交易条件 TMK1: EVERY(NEW&J,10)&& NEW&HV(NEW&,20)&&TIME&151450; TMK2: EVERY(NEW&&J,10)&& NEW&LV(NEW&,20)&&TIME&151450; TMP1: NEW&BKPRICE+0.8; TMP2: NEW&SKPRICE-0.8; TMP3: NEW&BKPRICE-0.8; TMP4: NEW&SKPRICE+0.8; TMP5: EVERY(NEW&=SKPRICE,40)&&BARSSK&40; TMP6: EVERY(NEW&=BKPRICE,40)&&BARSBK&40; //交易系统 TMK1,BK; TMK2,SK; TMP1,SP; TMP2,BP; TMP3,SP; TMP4,BP; TMP5,BP; TMP6,SP; TIME&=151450,CLOSEOUT; //过滤函数 AUTOFILTER; 当我们编写熟练时,可以将交易条件和交易系统合并,那么模型就可以写成这样: M:=30; J:MA(NEW&,M); EVERY(NEW&J,10)&& NEW&HV(NEW&,20)&&TIME&151450,BK; EVERY(NEW&J,10)&& NEW&LV(NEW&,20)&&TIME&151450,SK; NEW&BKPRICE+0.8,SP; NEW&SKPRICE-0.8,BP;58 NEW&BKPRICE-0.8,SP; NEW&SKPRICE+0.8,BP; EVERY(NEW&=SKPRICE,40)&&BARSSK&40,BP; EVERY(NEW&=BKPRICE,40)&&BARSBK&40,SP; TIME&=151450,CLOSEOUT; AUTOFILTER; 2)TICK盘口策略模型编写 关键函数:BKPRICE,ISLASTBK,MONEYTOT,SKVOL 使用周期:TICK周期 模型说明:调用 10 笔 TICK 数据,通过判断盘口买卖量之间的差异决定交易时机。 DEF_TICKDATA(1,10); SETBIGVOL(50); SHE:=ASKBIGCOUNT; BHE:=BIDBIGCOUNT; SHE&=4&&RISING(10)=1,SK; BHE&=4&&RISING(10)=0,BK; NEW&=BKPRICE-4*MINPRICE,SP; NEW&=SKPRICE+4*MINPRICE,BP; NEW&=BKPRICE+4*MINPRICE,SP; NEW&=SKPRICE-4*MINPRICE,BP; AUTOFILTER;4.6 止损模型在设计策略的时候, 我们可能会想到为模型加入止损止盈语句, 但是简单的限价止损是不是 足够支持我们的交易了呢? 下结论之前,我们先思考一个问题: 如果还没达到穿越平仓条件,趋势已经反转,能否立即止损减少损失? 如果赢利,能否最大化赢利,让平仓位置跟随行情走高而提高? 很显然,当趋势已经反转时,即使穿越平仓条件还没有满足也应该立即止损减少损失,这是止损 的纪律。而盈利最大化当然是我们所希望的,是不是有方法实现呢?答案是肯定的,我们可以利 用追踪止盈来实现盈利的最大化。 止损原理介绍: 1、限价止损、限价止盈原理: 传统止损止盈方式,以固定价差做止损止盈。 2、跟踪止损原理59 这是一种动态止损方法,止损价位会随着盈利的增加而变化,这种方法可以最大程度实现& 让盈利奔跑&。做多开仓,设置跟踪止损后的最高价每上涨一个价位,止损平仓价就跟着上涨一 个价位,当价格从 做空则相反。 回撤了设置的止损价差时,触发止损。下图为做多跟踪止损示意图,:此最高价是从设置止损后开始记录的,不一定是开仓后的最高价。3、保本策略原理 做多开仓后,在&开仓均价+设置的保本价差&位置产生了一条保本线,最新价超过设置的保 本止损线后, 再回落到这个保本止损线时才触发止损。 这是一种现代人的止损思想――盈利状态 下止损,目的是保住赚到的利润,文华软件中通常称之为&保本&。下图为做多保本止损示意图, 做空则相反。60 范例:双重均线系统模型编写关键函数:BKPRICE,BKHIGH 建议使用周期:所有K线周期 模型说明:当 100 日均线穿越 350 日均线的时候买入或卖出,限价止损+追踪止盈。 //中间变量 MA1:MA(C,100); MA2:MA(C,350); //定义双重均线 //交易条件 TMK1:CROSS(MA1,MA2); TMK2:CROSS(MA2,MA1); TMP1:CROSS(MA2,MA1)||C&BKPRICE-N||(C&BKPRICE&&C&BKHIGH-M); TMP2:CROSS(MA1,MA2)||C&SKPRICE+N||(C&SKPRICE&&C&SKLOW+M);//限价止损+回撤止损 //交易系统 TMK1,BK; TMK2,SK; TMP1,SP; TMP2,BP; //过滤函数 AUTOFILTER;第五章 模型的回测作为专业为程序化投资者服务的一款软件, 仅仅只提供强大的量化语言支持是不够的, 随着 用户的经验增长以及对量化的功能要求增多, 量化的编写难度将变得越来越大。 为了让您的量化 之路更加的畅通无阻,请您认真的学习一下本章所介绍的软件各种调试技巧和模型回测方法。5.1 模型回测在程序化交易软件中为技术指标以及交易系统建立了统一的测试平台。 (一)测试模型在历史 K 线的效果(查看回测报告) 如下图所示, 是如何加载模型并查看回测报告,加载模型后点击 【回测报告】 按钮查看报告。61 如上图所示:加载到主图上的模型,可查看详细的模型分析报告,360 度检验模型。如:报 告中红框位置显示模型的盈利率很高, 但权益最大回撤值也比较大, 这样的模型虽然收益高但在 实盘中可能会有权益锐减的情况,说明这个模型并不是稳健型模型62 点击下图③处的【资金曲线】,可非常直观的看资金曲线的变化情况,从而去检查模型的效 果是否符合我们的预期要求。详细报告术语解释请见附录(点击链接查看) (二)了解模型(查看模型交易明细) 资金最大回撤发生在哪一根 K 线?出现资金最大回撤时的几笔交易的盈亏都是多少?模型 测试的每笔交易的时间和价格具体是多少?这一系列问题都可在“交易明细”中找到答案。交易 明细以表格的形式给出了模型完整的成交明细,让我们深度了解模型。 如下图红框位置所示:通过【交易明细】按钮,查看详细的效果测试成交明细。63 (三)测试模型的敏感度 两个盈亏比相同的模型,滑点对盈亏比影响小的那一个,显然是更优的模型。而敏感性测试 图能以滑点和平均盈利/平均亏损为横、纵坐标,用线的形式直观显示出滑点变化对平均盈亏的 影响,帮助我们找到更好的模型。除了以滑点和平均盈利/平均亏损为横纵坐标外,还可显示以 手续费和收益率、 开仓手数和平仓盈亏等多种参数为横纵坐标的测试图, 从各个方面测试模型的 敏感度。 如下图红框位置所示:选择横坐标和纵坐标要考量的变量后,点击【计算】按钮查看敏感性 测试图。64 5.2 参数优化当您的指标中有多个参数时, 您可以使用优化功能对您指标中的参数配对进行排列组合, 近 而帮助您选出最佳参数组合运用到测试和交易中去。 我们会发现在一段时间内表现很好的模型, 过了一段时间就好像失效了一样, 这种情况可能 是由于模型参数不再适应当前市场行情引起的, 我们需要统计历史数据寻找新的最优参数, 但单 凭人工计算几乎是不能的。利用“参数优化”功能,可在指定的范围内让计算机筛选出最适合当 前行情的参数。 如下图所示:通过①【枚举】按钮,进行大范围海选抽样。通过②【遗传】按钮,在已经筛 选的优质参数附近寻找更优的参数。65 进行参数优化的操作步骤 1、如下图所示是如何进行枚举:66 设置参数关系如何减少参数优化时间: 有些模型各个参数间有严格的逻辑管理,以下面的模型为例: MA5:MA(C,N1); MA10:MA(C,N2); CROSSUP(MA5,MA10),BPK; CROSSDOWN(MA5,MA10),SPK; AUTOFILTER; 模型中的两个变量必然遵循一大一小规则,这样的模型我们可以首先为他们设置参数关系, 如 N1&N2,这样在优化时,所有比 N2 大的 N1 值都不用参加计算,运算量可以减少 1/2.这样每配 置一个参数关系,计算次数就减少一半;配置 4 个,就减少到原来的 1/16,以此类推,有效减 少了参数优化时间。 如下图所示,软件正在进行枚举参数优化,为您筛选最优参数配置。67 2、参数优化计算完会以排序的方式显示优化出来参数组(如下图所示) ,按照下图步骤完成参数 组的保存后,点击“关闭”按钮即可。3、结束枚举后,点击保存好的“优化参数组 1/2/3/4” ,准备进行遗传(如下图所示) 。例如, 刚才我们将枚举优化的结果保存到了“优化参数组 1”中,现在,我们就切换到“优化参数 组 1” ,在点击【遗传】按钮,对上次枚举的结果进行遗传。68 4、如下图所示设置好参考标准的比重后,点击“确定”按钮,开始进行遗传算法。5、按照和枚举同样的方法来保存遗传后的结果,以便进行回测(如下图所示) 。69 6、如下图,选择保存好的“优化参数组 1/2/3/4” ,点击【用新参数重新测算】 ,新的参数组计 算的结果就会显示在“分析报告”中了。70 5.3 日志检索软件中提供了交易日志检索功能,我们可以通过该日志查看到与交易有关的记录。 方法:在菜单栏上,点击【账户】 ,选择【监控运行日志】 。71 第六章 如何优化你的策略6.1 PANZHENG 函数,减少盘整行情中的交易次数很多趋势模型,在行情出现趋势的时候,都可以很好的抓住趋势,实现盈利,但长期运行下 来,最终的结果却是小赚甚至亏钱,问题出在哪里? 原因在于,盘整行情中模型在不断的反复交易,而盘整中的交易都是不盈利甚至亏损的,行 情中绝大部分又都是盘整行情,长时间的连续小亏损导致之前的利润全部回吐 。72 关键函数:PANZHENG, 判断当前行情是否为盘整 注:返回 1:表示盘整,返回 0:表示不是盘整。 作用一:增加收益率 简单的均线模型 MA1:=MA(C,5); MA2:=MA(C,}

我要回帖

更多关于 合约交易开仓平仓 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信