交易指令基础
第1行: | 第1行: | ||
− | + | 智能交易攻略(1)-交易指令基础 | |
作者:仁心慧能 | 作者:仁心慧能 | ||
− | + | 博庭公司推出的量化软件继承了飞狐交易师优秀的技术分析功能,并且增加了许多新特性, | |
− | + | 尤其是在公式系统和程序化交易方面,祝愿再创辉煌! | |
− | + | 软件用于编写公式的语言称为金语言(KingLanguage,KL),它有许多增强的特性,我们将逐步讲解。 | |
− | + | 软件在公式树中增设了一项新的智能交易公式类型,它与旧的交易系统公式相似而又不同。 | |
第40行: | 第40行: | ||
命名为“攻略”,然后在其下【新建公式】,输入名称“例1_1”,确定后,出现公式编辑器,输入以下源代码: | 命名为“攻略”,然后在其下【新建公式】,输入名称“例1_1”,确定后,出现公式编辑器,输入以下源代码: | ||
− | //------- | + | //-------智能交易公式-------------- |
//例1_1 均线交叉延时过滤买卖策略 | //例1_1 均线交叉延时过滤买卖策略 | ||
{策略: | {策略: | ||
第108行: | 第108行: | ||
Buy、Sell表示操作股票时的买入、卖出,如果我要操作期货呢?既做多也做空,我们试试下面的公式: | Buy、Sell表示操作股票时的买入、卖出,如果我要操作期货呢?既做多也做空,我们试试下面的公式: | ||
− | //------- | + | //-------智能交易公式-------------- |
//例1_2 自适应均线转向多空策略 | //例1_2 自适应均线转向多空策略 | ||
{策略: | {策略: | ||
第152行: | 第152行: | ||
以上例子属于趋势交易策略,我们再试试用布林通道实现振荡交易策略。 | 以上例子属于趋势交易策略,我们再试试用布林通道实现振荡交易策略。 | ||
− | //------- | + | //-------智能交易公式-------------- |
//例1_3 布林通道振荡策略 | //例1_3 布林通道振荡策略 | ||
{策略: | {策略: |
2013年6月19日 (三) 09:36的版本
智能交易攻略(1)-交易指令基础
作者:仁心慧能
博庭公司推出的量化软件继承了飞狐交易师优秀的技术分析功能,并且增加了许多新特性,
尤其是在公式系统和程序化交易方面,祝愿再创辉煌!
软件用于编写公式的语言称为金语言(KingLanguage,KL),它有许多增强的特性,我们将逐步讲解。
软件在公式树中增设了一项新的智能交易公式类型,它与旧的交易系统公式相似而又不同。
旧交易系统的范式是:交易信号: 条件表达式
新智能交易的范式是:If 条件表达式Then 交易指令
与交易系统的四种信号对应,新智能交易也有四种基本指令,如下所示:
交易类别:老交易系统信号 –> 新智能交易指令
开多、多头开仓、买入开仓、买入:ENTERLONG–> Buy
平多、多头平仓、卖出平仓、卖出:EXITLONG–> Sell
开空、空头开仓、卖出开仓、空头卖出:ENTERSHORT–> SellShort
平空、空头平仓、买入平仓、空头回补:EXITSHORT–> BuyTocover
旧交易系统只能定义交易信号,但无法在公式中进行仓位控制等复杂操作。
新智能交易公式可以通过交易指令的参数以及许多交易相关函数进行各式各样的精细控制。
最好的学习方法是多实践。让我们开始创建公式,在公式树【智能交易】下【新建文件夹】,
命名为“攻略”,然后在其下【新建公式】,输入名称“例1_1”,确定后,出现公式编辑器,输入以下源代码:
//-------智能交易公式-------------- //例1_1 均线交叉延时过滤买卖策略 {策略: 1.收盘价金叉30周期均线,且在其上延时几个周期后买入 2.收盘价死叉30周期均线,且在其下延时几个周期后卖出 3.外部参数切换多种类型均线 } input: 均线周期数(30,5,200,5), //缺省值,最小值,最大值,步长 延时周期数(0,0,6,1), 均线类型(1,1,5,1); switch 均线类型 begin case 1: MA1 := MA(C,均线周期数); case 2: MA1 := MA((H+L+C)/3,均线周期数); case 3: MA1 := EMA(C,均线周期数); case 4: MA1 := WMA(C,均线周期数); case 5: MA1 := SMA(C,均线周期数,1); end Plot(MA1,'均线'); //显示均线 bEnterLong := BarsLast(Cross(C, MA1))=延时周期数 And C>MA1; bExitLong := BarsLast(Cross(MA1,C))=延时周期数 And C<MA1; if bEnterLong then Buy; if bExitLong then Sell; { 注解: 1.用 input 语句声明公式参数,好处是便于修改、复制。 其中的最小值、最大值、步长用于今后的参数优化。 2.均线类型在外部参数设置,可用于参数优化 公式中用 switch case语句选用均线类型 3.Plot函数输出指标线到主图 4.交易条件先赋给 bEnterLong 等中间变量,便于今后修改、替换, 但语句多了影响运行效率,若执行速度很重要,就直接把条件表达式写在If后。 5.Buy类交易函数其实有很多参数,但从后到前可以取缺省值不用写出}
编写好公式后,点击工具栏第1个按钮进行编译,如果无误,编译信息窗会提示编译通过,这就可以应用公式了。
此时可以看到“攻略”文件夹下多了个“例1_1”公式,双击它或拖放到主图上,这时出现【策略设置】,
有【属性】【自动交易】【公式参数】三个页面,先初略看看,不管细节,点确定后:
可以看到,收盘价上穿均线后的次周期开盘价出现紫色的三角箭头指示买入价位,
收盘价下穿均线后的次周期开盘价出现反向的三角箭头指示卖出价位,这两个箭头间紫色连线表示这笔交易盈利,
蓝色则表示亏损。把鼠标移到三角箭头,出现浮动信息窗,可以看到交易详情,包括数量、价格、开平仓配对等信息。
在主图左上角公式名称处,右键菜单【查看测评报告】,选择【交易明细】页面,可以看到交易详情:
在主图左上角公式名称处,右键菜单【策略设置】,点选【公式参数】页面,修改这3个参数的值,
点确定后看看均线和交易信号发生了什么变化?
金魔方的智能交易公式可输出指标线以及画线、文字等对象,便于核对交易信号与指标线的关系、提示报警等,
甚至可直接代替技术指标等其它类型的公式。与飞狐公式逐行执行不同,它的运行模式是逐根计算的,才能实现复杂的仓位控制。
我们看到期指主连的K线图下边有复权标记,这是因为股指期货存在换月价差,为了走势的连续性和指标、测评的正确性,
需要做复权处理,把鼠标移到复权标记处可看到换月价差信息。
Buy、Sell表示操作股票时的买入、卖出,如果我要操作期货呢?既做多也做空,我们试试下面的公式:
//-------智能交易公式-------------- //例1_2 自适应均线转向多空策略 {策略: 1.自适应均线上拐一定幅度后,平空反手开多 2.自适应均线下拐一定幅度后,平多反手开空 } input: N(10), Pct(0.05); AMA1: AdaptiveMovAvg(C, N, 2, 30); bEnterLong := (AMA1[0]/AMA1[1])>(100+Pct)/100; bEnterShort := (AMA1[0]/AMA1[1])<(100-Pct)/100; if bEnterLong then Buy; if bEnterShort then SellShort; { 注解: 1.AdaptiveMovAvg为自适应移动平均线,其参数FL=2,SL=30为Kaufman在其《精明交易者》中所用的数值 2.序列下标表示K线位置,AMA1[0]表示取当前周期的值,AMA1[1]表示取前一个周期的值 3.当AMA1上升且大于前值百分之Pct时买多,反之卖空 }
有图有真相:
如图所示,多了蓝色箭头表示空头交易,我们发现,多头平仓交易与空头开仓交易同时执行,查看交易明细证实了这一点。
这是因为:
1、 单一策略只能持多仓、持空仓、无持仓三种状态,不允许多空双向同时持仓。
2、 某交易指令开仓时,如果已有反向持仓,先自动平掉旧仓再反手开新仓。
本例在市场中始终持仓,空头开仓时会自动先平掉原有的多头持仓,反之亦然。多空交易交错发生,不需要写平仓指令。
这种机制使得编写公式特别简洁,如果允许同时持有多头和空头仓,公式的逻辑和函数、语句将变得很复杂,难以掌握。
虽然单一策略不能同时有多头和空头的持仓,但不同策略可以持有不同方向的仓位,例如策略A持有多头,策略B持有空头,
它们互不干扰,而且,不同的策略可以编写在同一个公式文件中,如何实现?敬请持续关注本攻略!
以上例子属于趋势交易策略,我们再试试用布林通道实现振荡交易策略。
//-------智能交易公式-------------- //例1_3 布林通道振荡策略 {策略: 1.最低价低于下轨后开多,最高价高于中线后平多 2.最高价高于上轨后开空,最低价低于中线后平空 3.可连续同向开仓3次 } input: M(20,5,200,5), N(2), S(3); //计算布林通道 Mid : MA(C,M); Upper: Mid + N*STD(C,M); Lower: Mid - N*STD(C,M); AllowSameEntries(S); bEnterLong := L < Lower; //多头开仓条件 bExitLong := H > Mid; //多头平仓条件 bEnterShort := H > Upper; //空头开仓条件 bExitShort := L < Mid; //空头平仓条件 if bEnterLong then Buy; if bExitLong then Sell; if bEnterShort then SellShort; if bExitShort then BuyToCover; { 注解: 1.AllowSameEntries函数设置允许连续同向开仓最大次数 默认不能连续开同向仓}
有图有真相:
如图所示,可以用AllowSameEntries函数控制同方向连续开仓的最大次数,如果没有用到这个函数,
或者把S参数设置为1,则在已有持仓情况下,不再连续开同方向的仓,大家可以试试。默认不能连续开同向仓,
也是为了使大多数策略的公式编写简单,逻辑清晰。
从以上的例子,我们知道,不带任何参数的交易指令是在信号发生的下一周期开盘时进行交易的,
因为本周期收盘时才能确定信号最终不变的状态,但那一瞬间却是下不到单的。
在公式编辑器中把鼠标移到Buy函数名处,出现浮动信息窗,看到函数说明,我们发现其实它有很多参数,
如何应用这些参数?如何使用其它的下单方式、控制下单时机、价位和数量吗?如果想在收盘时下单怎么办呢?
另外,默认的交易数量是如何定的呢?回想起【策略设置】中有“委托数量”的设置,是在那里设置的吗?
且听下回分解!