欢迎您光临博庭社区!

 找回密码
 立即注册
楼主: hslixuexue

自制《金语言初级教程》--从0开始学习金语言   [复制链接]

Rank: 3Rank: 3

发表于 2013-8-14 14:09:14 |显示全部楼层
十、公式/程序的使用
公式,金语言的公式含义就是程序的意义,打开软件公式系统有7大类公式,每个类别都可以新建公式。
公式系统的作用是什么呢?公式系统其实就是读出一系列随时间变化的周期所包含得一个或一组原始数据序列,如开高低收量额等,按照使用者的定义对原始数据进行代数和逻辑计算处理,得到一个新的数据,并以曲线、图形、指示等形式显示出来的一个程序系统。
公式分为以下几种类型:A技术指标,B条件选股,C交易系统,D五彩K线,E智能交易,F公共函数,G优化评价,用户还可以创建或删除文件夹来归类和管理公式,公式和目录跟文件系统是一一对应的,位置在安装目录的 \FML\ 文件夹下面。
    设计好的公式/程序,涉及到以下各种用法:
1、添加公式:要添加用户公式,选择公式树上相关类型的目录上点击右键,选择“新建公式”。弹出公式编辑器。
公式编辑器四部分内容:A,填写表格空格项目,如公式名称、快捷码、说明等表格内容;B,勾选项目:主图(主图显示)、不显示坐标线、限制指标;功能键:插入函数(用于编代码中途插入函数)、参数精灵(参数描述)、用法描述(公式说明)、公式编译(公式梳理检查)、英文公式(保留字用英文如input)、中文公式(保留字用中文如“输入”)等;代码框,用于编程的程序代码区域。
例:公式名称处输入sl001,在公式说明中输入“示例公式001”,在代码框中输入“spj:”,点“插入函数”,在“行情函数”中找到CLOSE,点“插入函数”框的“确定”按钮,在代码框中就插入了一个函数CLOSE。最后在公式编辑器中点“确定”按钮,我们就建立了一个名为sl001的新公式,这个公式根据你的用途,可以说就是一个变量、函数、指标等。公式只有一行代码即:spj:close;。其中,spj(“收盘价”的拼音代码)称为公式变量,close是函数(行情函数的一种)。两者间以半角的冒号“:”相隔,表示spj定义为close。
主程序和公式编辑器都有公式树,都可以创建公式。要打开主程序的公式树,可以通过菜单:“查看”=>“公式管理” 。要打开公式编辑器上的公式树,可以通过菜单:“视图”=> “公式面板”。
2、公式描述,为了方便用户理解,公式可以附带一些说明性的文字。在编辑器的参数面板里面可以点击 用法注释 按钮来添加公式描述。
也可以通过代码#NOTE进行。语句换行,但是没有分号,放在需要说明的公式前。例如:
#NOTE '输出5日均价'
ma(c,5);
注释,公式描述和参数精灵,包括参数设置本身都内嵌到公式的文本里,完全无界面化,我们称该公式为全文本公式。
3、公式的保存:分为源代码的保存和编译两个阶段。
源代码保存:可以保存公式的编辑内容和设置等等,并不需要编译通过也可以保存。
编译:编译前源代码将会自动保存,只有编译通过后公式才可以运行。
4、公式的运行:公式系统处理的原始数据的分析周期(即相邻两组数据间的时间间隔)可以从多秒线到多年线之间的任意值,或者分笔成交数据,我们用鼠标把一个公式拖到某只证券的某个周期的图形分析窗口,则该公式处理这个周期的原始数据,如开高低收量额,改变分析窗口显示的分析周期,则公式自动处理新的分析周期的数据。
要运行公式,可以通过下面三个方法:
用鼠标从公式树上拖动相应公式到主图上或副图上;
在主图或副图上右键“选择公式”,然后选择相应的公式;
直接用键盘敲公式的名字,从键盘精灵处选择公式;
例:接上例,在键盘上敲“sl001”调用我们刚才设计的公式,结果在副图显示一条收盘价曲线,曲线的名称是“spj”。
5、修改公式:主程序运行时,若编辑正在运行的公式,编译通过后程序将自动重新加载新版本运行。
若编辑正在运行的自动交易脚本,该公式的交易将会自动停止,编译后需要点击“哭脸”图标才能再次开启。
若编辑公共函数,编辑器将搜索所有引用该函数的公式,并让用户挑选是否需要重新编译。
6、公式的移除。也是上面的三种方法,拖放相同的公式到图上时,等于是移除公式。您也可以在公式名称的地方右键,选择“删除指标线”|“移除策略”。

使用道具 举报

Rank: 3Rank: 3

发表于 2013-8-14 14:09:59 |显示全部楼层
本帖最后由 hslixuexue 于 2013-8-18 08:46 编辑

十一、公式执行模式:逐根和逐行

公式有两种执行模式,一种叫逐行模式,一种叫逐根模式。
逐行运行 就是说一段代码,从上到下每一行运行时都要从头到尾处理原始数据,第一行运行到最后一行。
逐根运行 就是说根据K线,从左边第一根K线,运行到右面最后一根K线。每一个K线都要运行每一段程序,也是把代码从第一行运行到最后一行的。逐根运行与逐行运行的区别是: 每行代码只运行当前的一个K线值,而逐行模式是整条序列。
例如如果代码是 Close+1,那么在逐行模式下,Close 代表图上所有的收盘价,加一后,得到所有K线收盘价+1的一条序列;
而在逐根运行时,Close 只代表当前一根k线的收盘价,加一后,得到当前收盘价+1的一个单值,从第一根运行到最后一根,每一根都得到1个单值,等所有K线运行完毕后,才得到完整的序列。
由此可见,逐根模式比逐行模式多运行了许多遍:如果图上有1000K线,公式代码将会被执行1000遍,只不过每次运算只算1个值,而不像逐行模式那样每次运算一整条序列。总的来说逐根运行要比逐行耗时,但是逐根运算能表达逐行运算所不能完成的条件分支逻辑,这是交易脚本所必须的逻辑。
另外,逐根模式在第一次运行完毕后,后续行情到来时,只需要运算最后一根的变化,这要比逐行的开销少多了。
逐根、逐行模式理解太重要了,如果仅此理解,根本无法看懂程序代码:
1、逐根模式比逐行模式多运行了许多遍,怎么理解:逐根模式,每根运行完整的公式,包括其他无关代码。逐行模式,虽然每行运用所有K线,但是实际上就是运行运算表达式。有些代码根本就不运行,比如,if 等。
2、无论逐根、逐行,运算表达式,运算次数是一样,得的值也是一样。所谓运算就是数学运算和逻辑运算。
3、每个表达式,每根K线都要运行一次,每次都会产生一个值,或者是代数值,或者是逻辑值,新建一个序列数据。否则运算表达式运行后记录在哪?计算机怎么证明自己运算过了。
4、用函数来理解运算,每个运算函数的,自变量都是K线自然序列,每个运算函数的因变量即函数值都是给K线增加一个属性,因此每个运算函数都是新建一个序列数据。一年365天,每天自然变化是自变量。12、、、365,是一个标号,是天的属性,是一个序列变量。生日那天,也是天的属性,也是一个序列变量,00000100…….,除了那天是1外,其余为0。周末,也是天的属性,也是一个序列变量,每50后加两个1:000001100000110000011……。
通过上述的理解进一步明白软件的运行模型:
K线都是一个数据库,程序开始时包含初始数据:开(开盘价)、高、低、收、量、额、时间数据。每一种数据可以看着该K线的一种属性。
K线自然序列就是所有程序运行前进的唯一轨道,是所有程序和函数唯一的自变量和因变量。自变量是K线变化,因变量还是对K线的增加新的属性数据。简单讲,随着K线一根一根变换,计算结果是依次对每根k线得一个新属性值。
所有的函数都是程序停在轨道上的某一K线时进行运算。就像人生旅途,你在时间长河中某一点干着不同事情,全都记录在该时间点。这是唯一的自变量!
函数运算的意义就是指针执着第一根K线,获取与第一根K线数据或与第一根K线有关的数据,对该数据进行计算,其结果作为新的属性数据添加给第一根K线,接下来是第二根K线。如此重复。如是否阳线、高开等。这就是因变量。我们找到相应获取新的属性,做出希望举动。
对于逐根运行程序来讲:当前K线是每一个函数的当前K线;当前K线是每一行代码的当前K线;当前K线是复合函数所嵌套的每一个内部函数的当前K线,无论向前、向后取值函数内外部的函数。
详细代码解释见绘图函数的代码逐行精确推算。
公式是怎样选择运行模式的呢?通过编译开关来控制:
#Run_By_Bar
#Run_By_Series
其中,#Run_By_Bar表示使用逐根模式,#Run_By_Series表示使用逐行模式。
这两个开关也可以不写,在不同的指标类型中,分别有不同的默认值。
在“技术指标”、“条件选股”、“交易系统”、“五彩K线”这四种指标中,默认是逐行模式。
在“智能策略”、“公共函数”、“优化评价”这三种指标中,默认是逐根模式(而且只能是逐根,指定逐行开关无效)。
计算频率开关
对于逐根模式,我们知道,每次都是只计算一根。 现在问题来了,K线的最后一根,并非是一次成型的,是在一段时间内不断变化的。那么,是在每次变化时,都计算,还是最后成型时才计算呢?为此,准备了开关来控制这个行为。
#Run_Every_Tick 最后一根K线每次变化的时都重新计算
#Run_Every_Bar  K线产生的一瞬间才计算前一K线
Buy Next Bar Open 这种类型的公式里,为了避免信号抖动,需要在K线完全走完时才发出信号,在下根K线中成交。对于这种类型的公式,可以使用#Run_Every_Bar模式,减少不必要的运算。
Buy This Bar Market 这种类型的公式里,需要根据最新行情来计算是否交易。此时公式运行需要 #Run_Every_Tick模式。
对于SetStopLoss(止损)、SetProfitTarget(止盈)、SetDollarTrailing/SetPercentTrailing(跟踪止损)、SetBreakeven(保本平仓)等等Set给后台去做的工作,不受run_every_bar指令的影响,是永远每tick计算的。

使用道具 举报

Rank: 3Rank: 3

发表于 2013-8-14 14:10:26 |显示全部楼层
十二、公式类型/量化交易策略
金语言,是用于量化投资的程式化交易语言,目的是表达投资者的交易思想、实现投资者的各种交易策略意图,即用户策略。
用户策略,包括多种不同程度的工作,如指标选择、入场选择、交易计划、系统评价等不同阶段的工作,代表的是不同阶段的策略与计划。这些工作并不是每次都要全部进行完毕。只有最后的交易实施才完全进行各种工作。与之相应,金语言公式系统将公式按功能划分为七种类型的程序,以适应不同阶段、不同功能的工作需要。
公式按功能划分为七种类型的程序,分别是技术指标、条件选股、五彩K线、交易系统、智能交易、优化评价、公共函数公式。各种类型的公式可以自由叠加在同一个图形上。金语言公式系统对七种类型自带常用的公式。金语言的概念是告诉大家一个量化交易策略的形成,要通过上述几大阶段或者功能,不是每一次都进行到自动交易阶段。
技术指标、交易系统、条件选股、五彩K线可以运行在主图或副图。技术指标可以有逐行和逐根两种运行模式。
智能交易、公共函数、优化评价是特殊的公式,只能在逐根模式下运行。智能交易公式在一个图上只能运行一个,而且只能运行在主图。
一、技术指标:最基本的程序,揭示原始数据各种特性,它用于绘制技术特征的指标图形。 技术指标可以通过指标输出来绘制图形。指标输出可以使用下面两种形式:
// 经典格式,语法:指标名 冒号 表达式 [逗号 线形描述]
指标名:close; (省略其它参数)
类似于变量的声明语句,变量声明必须保留字开头。
//Plot函数, 输出。根据设置参数输出、绘制指标值。Plot(close, '指标名');(省略其它参数)。
要叠加指标公式,可以按着Ctrl键拖放公式到图上。
需要注意的是,利用公式系统,建立技术指标,指标名与公式名,不一定相同。指标名由代码声明,公式名在公式编辑器填写空格。汗!看后面代码案例3个小时才似乎想明白。"公式名.指标名"指标数据会被另外程序引用。
二、条件选股:以获利为目标,对各种技术属性特征进行组合选择,以符合、不符合这种挑选的技术特征对每根K线作出的标记。条件选股完成即标记完毕产生一个新的指标线。
技术指标公式结合选股条件逻辑判断表达式,即得到条件选股程序,用于选出符合条件的股票。显然选股公式,由若干中间语句组成,并且其中不含绘图函数。只有一行输出语句,位于最后一条语句,且必须是条件表达式。
条件选股逻辑判断就是:每根K线符合、不符合,即1、0。它的公式只需要输出一条0和1的序列数据指标线,指标线也不只限于0和1的序列,大于0的都视为真。条件选股公式成立时,将在K线下方标注箭头。例:BOLL布林带买入。
CROSS(CLOSE, "BOLL.LOWER"(P, T));       
例:设计公式,选出N周期内涨幅大于或等于5%的股票。
求解:公式代码如下,其中N为参数:
收盘价:=close;//中间变量
N日前收盘:=ref(close,N); //中间变量
选股条件:收盘价/N日前收盘>=1.05;
代码解释:公式由我们所熟悉的代码组成,共3行,前2行是中间语句,最后一行是选股的条件,其中最后一行“选股条件:”,也可以不写。
在选股的操作过程中,大家可以发现,利用技术指标也可以进行选股。
三、交易系统:利用技术指标公式结合买卖策略逻辑判断表达式组成交易系统,进行多头开仓、多头平仓、空头开仓、空头平仓四种交易指示,以供进一步操作。
交易系统是条件选股的升级,条件选股只有1个信号输出,而交易系统可以有4种交易决策信号,记住不是买卖指令。
原理是:以条件选股选出的指标线,改用4种交易信号指标对每根K线进行重新判断标记,组成一条新的序列指标。新的序列指标实际上应该有5种数值,4种交易信号加一种非交易信号。
ENTERLONG: cond,tFilter;多头开仓
EXITLONG: cond,tFilter;多头平仓
ENTERSHORT: cond,tFilter;空头开仓
EXITSHORT: cond,tFilter;空头平仓
这4种指标必须带有上述的指标名,可以使用 tFilter线形描述来过滤重复的信号,例如下面布林线的例子:
MID := MA(CLOSE,m);//中线中间变量,MA简单移动平均
UPPER:= MID + k*STD(CLOSE,m); // 上边线中间变量,STD X的N日估算标准差
LOWER:= MID - k*STD(CLOSE,m); //下边线中间变量
ENTERSHORT:CROSS(CLOSE,LOWER),TFilter;
EXITSHORT:CROSS(CLOSE,UPPER),TFilter;
运行时,满足条件时,在K线的上下方标注信号,在K线中间标注信号价位,价位计算方式目前是 (High+Low+Close)/3;
tFilter,过滤交易信号。用于交易系统公式ENTERLONG, EXITLONG, ENTERSHORT, EXITSHORT后, 以ENTER和EXIT为间隔,过滤连续的同种信号。例如:
ENTERLONG:CROSS(LL,BIAS),TFILTER;
EXITLONG:CROSS(BIAS,LH),TFILTER;
例2:我们来看看 “RSI 相对强弱指标交易系统”公式,其中LL、LH是超卖超买参数:
LC:=REF(CLOSE,1);{LC为变量,昨日收盘价}
RSI:=SMA(MAX(CLOSE-LC,0),N,1)/SMA(ABS(CLOSE-LC),N,1)*100;{RSI为中间变量}
ENTERLONG:CROSS(RSI,LL);{多头买入条件表达式,RSI上穿LL时发出买入信号}
EXITLONG:CROSS(LH,RSI);{多头卖出条件表达,RSI下穿LH时发出卖出信号}
四、智能交易公式:是交易系统公式的扩展后续,可以直接操控买卖行为:开平仓的时机和价格,设置止盈止损,查询账户信息,查询交易绩效等,还可以直接操作真实交易帐号,可以进行交易测评和参数优化。
智能交易公式的由若干中间语句,加上指定的最后4行条件表达式代码组成,最后4行分别由四种信号“ENTERLONG: ”“EXITLONG: ”、“ENTERSHORT:”、“EXITSHORT:”开始,表示多头买入、多头卖出及空头买入、空头卖出的交易条件,执行Buy、Sell、BuyToCover、SellShort虚盘交易。这4行也可以删去若干行,但至少保留其中的一行,表示只指示其中一种信号。
智能交易公式只能运行在主图上,只能以逐根的模式运行,分为每个Bar执行一遍和每个Tick执行一遍两种类型,详见执行模式。智能交易公式可以像一般技术指标公式那样输出技术指标,以便核对信号。
原理:以交易系统生成的序列数据指标为基础,核对每根K线,针对四种交易系统信号,从4种虚盘交易信号至少选择一种进行标注,产生新的序列指标。
以下是一个简单的智能交易公式:
Input: A(5,1,30,1), B(15,5,100,4);//公式参数
ma1:MA(CLOSE,A);
ma2:MA(CLOSE,B);
bEnterLong :=CROSS(MA(CLOSE,A),MA(CLOSE,B));
bExitLong :=CROSS(MA(CLOSE,B),MA(CLOSE,A));
If bEnterLong Then Buy;
If bExitLong Then Sell;
// Buy Sell 虚盘交易执行命令。
公式输出了两条均线,在金叉和死叉信号发出后进出场:
进出场已虚心三角型表示,并用虚线连接,鼠标移动到连线处可以查看开平仓的详细信息。
交易公式的使用:①在K线图中,按Ctrl+F6,可以选择交易公式指示买卖信号。②在选股操作时,也可以选择交易公式进行选股。③在菜单“工具”中,还可以对交易进行“交易系统评价”、“探索最佳参数”操作。在菜单“查看”中,可以“优选交易系统”。
此外,按Shift+W,调出公式树,可以通过鼠标把交易公式拖到K线窗口的方法,使用交易公式。试试把选股公式也拖到K线窗口,看看有何变化?说明了什么?
当想删除在K线图上显示的各种买卖信号时,可以按Ctrl+Del或工具栏上的相应按钮实现。
五、五彩K线:技术指标公式结合色彩逻辑判断表达式,即得到五彩K线模式公式代码,用于选定描述的特定K线。系统自带如早晨之星、黄昏之星等。
五彩K线类别建立的公式内,阳线用实心表示,阴线用空心表示。默认的五彩K线均为绿色。当出现选定的K线模式时,默认用红色表示,除非使用了颜色描述符。
表达五彩K线由若干中间语句和最多六条独立的条件语句,跟选股公式不同的是,选股公式只能有一个条件表达式语句。与条件选股公式的输出是一样的,都是0和1的一条指标,不同之处是绘制时,选中的K线变成红色,非选中的变成蓝色。
原理:给每K线一个颜色属性。
例1、用五彩K线描述涨幅超过9%的K线,代码如下:
c/ref(c,1)>1.09;
例2、如下面十字星的例子:
// 收盘价等于开盘价且最高价不等于最低价
p1:CLOSE=OPEN AND HIGH<>LOW
六、公共函数:把常用的逻辑封装成公共函数后,编写公式时就可以直接引用,这可以加速开发的效率,实现公式(程序)的模块化,方便了公式的管理和共享。
Sum,求和,SUM(X,N),统计N周期中X的总和,N=0则从第一个有效值开始。例如: SUM(VOL,0);表示统计从第一根K线以来的成交量总和。
在公共函数被改变后,不但公共函数需要编译,使用了它的公式也需要重新编译。
系统会分析使用这个函数的公式的整个依赖链条。
有依赖关系的公式会自动列出,供您重新编译。
七、优化评价:在测评智能交易公式时,可以自行定义评价的目标,使用内置的评价函数来计算出用户关心的公式绩效。
评价公式需要在公式头部标明#OPT, 编译指令开关都是以#号开头的。 # OPT关键字, 出现时公式是参数优化的自定义评价函数。用法:
#OPT //必须前缀,没有标点符号
OPT_PAYOFFRATE;
评价公式使用第一个指标(表达式)作为公式的输出。例如下面的评价公式使用净利润与总盈利的比率作为衡量交易脚本的指标:
#OPT    //必须前缀,没有标点符号
OPT_NetProfit/OPT_GrossProfit; //第一个指标作为评价输出。
评价公式只能用于智能交易测评,只能使用专门的评价函数,数学函数和四则运算。
#OPT专用评价函数:
OPT_NetProfit,净利润;OPT_Balance,资金余额;OPT_ProfitRiskRatio,收益风险比;OPT_ProfitFactor,盈利因子;OPT_AnnualReturnRate,年华收益率;OPT_MaxDrawDownPct, 最大回撤幅度;OPT_MaxDrawDown,最大回撤;OPT_WinRate, 胜率;OPT_LossRate,败率;OPT_PayoffRate,盈亏比;OPT_AvgPayoff,平均盈亏;OPT_TotalTrades,交易次数;OPT_SharpIndex,夏普指数;OPT_GrossProfit,总盈利;OPT_GrossLoss,总亏损;OPT_WinTrades,盈利次数;OPT_LossTrades        ,亏损次数;OPT_MaxConsecWin, 最大连续盈利次数;OPT_MaxConsecLoss,最大连续亏损次数;OPT_MaxWin,最大单次盈利;OPT_MaxLoss,最大单次亏损;OPT_AvgWin,平均盈利;OPT_AvgLoss,平均亏损;OPT_AvgWinPeriod        ,平均盈利周期;OPT_AvgLossPeriod        平均亏损周期。

使用道具 举报

Rank: 3Rank: 3

发表于 2013-8-14 14:11:25 |显示全部楼层
十三、自动交易系统模型
量化交易除了建立交易策略外,另外一个目的就是实现自动化交易。根据金语言的功能特点,建立一个实现自动化交易途径系统模型。
自动化交易系统包括自动选股、自动入场、自动止损、自动止赢、资金管理等功能。如何实现这些功能?先建立一个自动化交易系统模型。因为计算机执行的是编好了的代码,他执行编码的与我们工作不同步。自动化交易系统模型应该根据人工、计算机运行不同环节设计这个模型。建立这样一个模型,这样才能够在不同层面理解同一个公式运行,加深印象。
人工部分:条件选股、交易系统、智能交易公式编制。
计算机部分:虚盘交易、实盘交易。
在交易策略里,一般的交易函数并不直接操作真实帐号。每个策略都虚拟出一个帐号,这个虚拟账号称之为虚盘。在这个帐号上开平仓都是瞬间完成的,没有网络延时,并且保证成功。这样做可以确保策略自身逻辑的完整性,就是说每当策略产生信号时,虚盘总是能根据信号发生交易, 并不会像真实交易那样产生滑价,延时,部分成交,甚至不成交。
实盘是指真实的交易帐号(也可以是模拟帐号)。实盘是通过与虚盘的同步跟随去完成实际交易的。
因此,自动化交易系统模型:条件选股、交易系统、智能交易、虚盘交易、实盘交易。
一、条件选股、交易系统、智能交易三个环节公式的比较。
条件选股、交易系统、智能交易三个阶段工作内容不同。这三个阶段的工作就是编制增加不同的代码。不断在增加新的指标,最终形成结果包含在智能交易公式中。
1、布林带买入条件选股公式
CROSS(CLOSE, "BOLL.LOWER"(P, T));
2、布林带交易系统
MID :=  MA(CLOSE,m);
UPPER:= MID + k*STD(CLOSE,m);
LOWER:= MID - k*STD(CLOSE,m);
ENTERLONG:CROSS(CLOSE,LOWER);
EXITLONG:CROSS(CLOSE,UPPER);
3、布林带智能交易系统
#note
"主图指标
收盘价向上突破布林下限,为多头买入信号
收盘价向上突破布林上限,为多头卖出信号
参数: m  天数,在计算布林带时用,一般取26"

#template
"收盘价上穿Param#1日布林带(宽度参数为Param#2)下轨买入,上穿上轨卖出."
//-----参数设置----------------------
Input:                                        //公式参数
        M(26,5,100,5),
        K(2,0.4,10,0.2);
                 MID :=  MA(CLOSE,m);
UPPER:= MID + k*STD(CLOSE,m);
LOWER:= MID - k*STD(CLOSE,m);

bEnterLong :=CROSS(CLOSE,LOWER);//多头开仓条件
bExitLong :=CROSS(CLOSE,UPPER);//多头平仓条件
bEnterShort :=CROSS(CLOSE,UPPER);//空头开仓条件
bExitShort :=CROSS(CLOSE,LOWER);//空头平仓条件
       
If bEnterLong Then Buy;
If bExitLong Then Sell;
If bEnterShort Then SellShort;
If bExitShort Then BuyToCover;
二、虚盘
计算机执行条件选股、交易系统、智能交易代码等工作,不需要实盘,自动虚拟账号完成所有这些工作,因此整个过程叫虚盘交易。
请看下面的例子:
ma1:ma(close, 5);
ma2:ma(close, 10);
if cross(ma2, ma1) then sellshort;
该策略以5日均线和10日均线交叉作为开仓条件,两条均线发生了交叉,则虚盘在交叉所在K线的下一根K线的开盘价卖空1手。
这个操作是不需要真实交易帐号的。虚盘的交易信号使用虚心三角形表示,鼠标在上方时飘浮详细交易信息。如:交易策略的名字、单号、量、价、平仓信息。
虚盘的仓位会同时标注在策略名的右方,主图的左上角。蓝色的[-1]表示虚盘持有1手空仓,多仓以红色正数表示。
虚盘不允许双向持仓,开反向仓时自动平掉原方向的仓位。
三、实盘交易
虚盘交易成功以后,虚盘的信号通过仓位同步反应在真实交易中,这个过程叫实盘交易。
接着上面的例子,如果此时登陆了交易帐号,并点击小脸打开交易(笑脸为交易开启,哭脸为交易关闭),并且把同步设置成“总是同步”,实盘将会在最新价处跟随虚盘开仓,使得实盘与虚盘的仓位一致。
实盘的信号使用实心三角表示,红色多仓,蓝色空仓。鼠标在上方时同样漂浮详细交易信息。
同步的选项有以下几种:
(1)总是同步:任何时候都保证实盘与虚盘的持仓数量和方向一致;
(2)下次持仓方向改变时同步:持仓方向有持多仓,持空仓和无持仓三种,当下次持仓方向改变时才进行同步;
(3)下次持仓数量改变时同步:当虚盘持仓在数量上改变时同步。方向改变时持仓数量一定改变,但持仓数量改变时不一定持仓方向也改变
(4)市场价优于虚盘开仓均价时同步:当虚盘有持仓,实盘等待最新价低于多头虚盘开仓价(或者高于空头开仓价时),进行同步。

使用道具 举报

Rank: 3Rank: 3

发表于 2013-8-14 14:12:12 |显示全部楼层
十四、自动交易指令详解
上面已经建立了自动化交易的模型,但是交易的细节任然不知。必须搞清楚交易指令。
基本的交易可以通过 Buy/Sell/SellShort/BuyToCover 函数或语句完成。
指令        中文        含义
Buy        买入        多头开仓
Sell        卖出        多头平仓
SellShort        卖开        空头开仓
BuyToCove        买平        空头平仓
一、交易函数:以简洁的函数语言表示Buy /Sell /SellShort /BuyToCover交易指令。作为函数时,与一般的函数调用一样,目前只支持逐根运行的模式。用法如下:
Buy('symbol', Lots, Price=0, Slippage=0, OT=OT_Market, KT=KT_NextBar, Comment=)
SellShort('symbol', Lots, Price=0, Slippage=0, OT=OT_Market, KT=KT_NextBar, Comment=)
Sell('Symbol', lots, price, slippage, OT, KT, 'Comment') [From 'EntryName']
BuyToCover('Symbol', lots, price, slippage, OT, KT, 'Comment') [From 'EntryName']
Symbol: 下单品种。
Lots: 下单数量,填Default时下单数量由界面控制。
Price: 下单价格,市价单 OT_Market 时价格可以填 0。
Slippage: 下单滑价,滑价是在实盘成交时起作用的,不影响虚盘的成交价格,但会影响测评报告的绩效计算。滑价填0时由界面控制滑价。
OT: Order Type 订单类型,有以下的类型:
OT_OPEN 开盘竞价,暂不支持。
OT_CLOSE 收盘竞价,暂不支持。
OT_MARKET 市价单,以当前价格成交。
OT_LIMIT 限价单,当买方向价格低于下单价格时成交(或卖方向高于此价格)。
OT_STOP 追价单,当买方向价格高于下单价格时成交(或卖方向低于此价格)。
KT: K线类型有以下几种:
KT_ThisBar, 当前一根K线,只能配合 OT_Market。
KT_NextBar, 下一根K线,可以配合 OT_Market/OT_Stop/OT_Limit。
Comment: 下单注释,开仓时作为仓位标记。
EntryName: 平仓时可以指定只操作某个标记的仓位。
返回值:这4个交易函数都是操作虚盘的,操作能保证成功,所以函数没有返回值。
二、交易语句:以通俗的语言表述交易指令。作为交易语句时,功能与交易函数一样,但写法更易于理解。这主要是借鉴了注明的易语言吧!
('SellShort' | 'Sell' 'Short') ['(' "EntryLabel" ')'] [TradeSize] EntryType
'Buy' ['(' "EntryLabel" ')'] [TradeSize] EntryType
'Sell'['(' "ExitLabel" ')'] [From Entry("EntryLabel")] [TradeSize[Total]] ExitType
('BuyToCover' | 'Buy' 'To' 'Cover' ) [("ExitLabel")][From Entry("EntryLabel")] [TradeSize[Total]] ExitType

EntryType: ( This Bar[On]Close | Next Bar[At]Open or Next Bar[At]Market | Next Bar[At]Price Limit | Next Bar[At]Price  Stop )
ExitType: ( This Bar[On]Close | Next Bar[At]Open  or Next Bar[At]Market | Next Bar[At]Price  Limit | Next Bar[At]Price  Stop )
省略字, 交易语句中可以插入一些定词,冠词,方便理解。这些单词在编译时会被忽略。如:A An Is Than Was On Does At The Based By Place Share Shares
交易语句例子
buy this bar Market; // 在当前K线市价买入
sell next bar open;  // 在下一根K线的开盘价卖出
buy ('myPos') 2 shares next bar  at 2398.2 limit; // 在下一根的 2398.2 价格处限价买入2口, 把仓位标记为 myPos。
sell ('comment') from entry('myPos') 2 shares next bar at 2399.8 stop;// 在下一根的 2399.8 价格处追价卖出标记为'myPos'里面的2口。
中文版本的交易语句
('次周期'|'本周期') [价格] [类型] ('买入'|'卖开') [数量] ['标记为' '开仓标记'];
('次周期'|'本周期') [价格] [类型] ['从标记' '开仓标记'] ('卖出'|'买平') [数量] ['标记为' '平仓标记'];
类型: ('追价'|'限价'|'市价')
中文版本的省略字:在 的 股 口
中文交易语句例子:
本周期 市价 买入;
次周期 开盘价 卖出;
在 次周期 2398.2 限价 买入 1 口 标记为 'MyPos';
在 次周期 2399.8 追价 从标记 'MyPos' 卖出 1 口 标记为 'comment';
三、限价OT_LIMIT,追价OT_STOP,市价单OT_MARKET
市价单:在当前价格处交易。
限价单:买入时不高于指定价格,卖出时不低于指定价格。
追价单:买入时不低于(超过或相等)指定价格,卖出时不高于(低于或相等)指定价格,一般用于止损。
Buy(买入) 和 BuyToCover(买平) 都属于买入方向。
Sell(卖出) 和 SellShort(卖开) 都属于卖出方向。
多头止损属于 Sell Stop 类型,空头止损属于 BuyToCover Stop 类型
buy limit是指买入限价,在当前价格下方挂买单。
sell limit是指卖出限价,在当前价格上方挂卖单。
buy stop是指买入止损,在当前价格上方挂买单 (看空失败)
sell stop是指卖出止损,在当前价格下方挂卖单(看多失败)
四、当根开仓,下一根开仓
ThisBar 当根开仓是指当前产生信号时后立刻交易,不考虑信号闪烁问题。当根开仓只能用 OT_Market 市价单,最好使用 #Run_Every_Tick模式。ThisBar 不需要接受 OT_Limit/OT_Stop单,原因是当前价格已知: Limit 单可以写成 if close < price then buy; (多头) Stop 单可以写成 if close > price then buy; (多头) (还是不懂解释的是什么)。
如果以easylanguage来解释,可以理解。自动交易信号发生时,产生一个价格,比如金叉,计算机到底怎样选择价格?有人说是交点的价格。非也!两条曲线都是点线,点组成的线,没有严格的数学公式控制的曲线,根本不可能存在准确的交点。前一个点在水平线下面,后一个点在水平线上面,整条曲线都是类似的散装点组成的,你说严格交点在哪里?因此easylanguage确认交点价格为当前Bar的收盘价。ThisBar收盘价未产生,当然不能限价或追价,只能市价。
NextBar 下根开仓是指当K线走完了,确认信号,在下一根交易。或者计算买入卖出的通道,在下一根K线应用追价或限价单。下根交易可以使用 #Run_Every_Bar 模式,每根K线运行一次即可。Run_Every_Bar指定公式每根K线只运行一次,然而对于追价限价,止盈止损的判断,仍然是每个tick进行的。
五、止盈,止损,跟踪止损,震荡止损,保本止损
出场的指令,除了Sell(卖出)和BuyToCover(买平),还可以有以下:
SetStopLoss 止损
SetProfitTarget 止盈
SetDollarTrailing 跟踪止盈(按金额计算)
SetPercentTrailing 跟踪止盈(按百分比计算)
SetBreakEven 保本止损
SetInactive震荡止损 (多少个周期内没有达到一定幅度的盈利和亏损)
止盈止损的计算都分为按总盈利计算和按平均每口盈利计算,默认按整个仓位的总盈利计算。
计算方式使用以下函数指定:
SetStopContract 按平均没口赢利计算
SetStopPosition 按整个仓位计算
注意盈利的计算是考虑了单边手续费的,而止盈止损则考虑双边的手续费。
(1)SetStopLoss,设置止损平仓。SetStopLoss(Amount) 。单口或整个持仓的亏损金额达到Amount时全部止损平仓。若公式中没有SetStopPosition或SetStopContract,默认是以整个持仓计该函数作用于周期内,有可能与对应的开仓位于同一周期。
例如:
SetStopContract
SetStopLoss(20*BigPointValue);
单口持仓亏损金额达到20*BigPointValue元(与开仓价差20个点)时平仓出场。
SetStopContract,使内建平仓出场函数的参数基于单口持仓。内建出场函数包括:SetStopLoss,SetProfitTarget,SetBreakEven,SetDollarTrailing,SetPercentTrailing。例如:
SetStopContract;
SetStopLoss(100);
单口持仓亏损金额达到100元时平仓出场。
BigPointValue,当前商品报价的一个整数点对应一个合约的价值。例如:A股一个整数点的价值为1元,BigPointValue返回1;沪深300指数期货一个整数点对应一个合约的价值为300元,BigPointValue返回300;大恒指BigPointValue返回50;小恒指BigPointValue返回10。
PointValue,返回当前品种单点对应的价值。PointValue = BigPointValue/PriceScale 。例如:IF股指期货返回30。
PriceScale,价格标度。PriceScale = BigPointValue/PointValue。例如: A股返回100;橡胶期货返回1;IF股指期货返回10。
口、PriceScale、PointValue、BigPointValue,看了半天没懂,太初级了!官方表述太不通俗了。A股,BigPointValue=1,PriceScale=100,那么PointValue=1/100。IF股指期货:BigPointValue=300,PriceScale=10,PointValue=30。究竟是什么含义。
个人相关理解如下:
BigPointValue ,实时行情报价的价格单位的价值。盘面行情报价1个报价单位的以元计算的价值:股票“X元”,1个报价单位价值1元;期货报价“X元”,1个报价单位价值1元;股指期货报价“2335点”,1个报价单位价值300元。
PriceScale,报价单位的细分刻度的容量。并非最小变动单位。盘面行情报价显示的比报价单位更小一级别的报价价刻度的变动范围,简单理解就是小数变动范围。如股票报价9.35元,更小以及的价格刻度“0.01元”。因此股票PriceScale=100;期货报价单位是“X元/吨” “X元/克”,没有更小的计价单位,即没得小数。因此期货PriceScale=1。股指期货报价单位“1点”,行情显示“2235.2”,更小以及的价格刻度“0.1点”。因此股指期货PriceScale=10。
PointValue,报价单位的细分刻度单位价值。PointValue = BigPointValue/PriceScale。股票PriceScale=100,BigPointValue =1,PointValue=0.01。股指期货PriceScale=10,BigPointValue =300,PointValue=30。
口,报价对应的该品种数量单位。股票,(9.35元)股。期货,(2350)吨。黄金(264.35)克等。股指期货,(1980.2)份。
最小价格变动,MinDiff,对于深沪股票为0.01,深沪基金为0.001,股指期货为0.2。注意:该函数返回常数。
手,最小标准交易单位。外汇交易中,买卖1手表示买卖10万的基础货币。股票100股。期货1手,黄金1手是1000克,铜、铝、锌、橡胶、聚乙烯、棉花、PTA、菜子油等1手5吨,燃料油、大豆一二号、豆粕、豆油、玉米、棕榈油、小麦、白糖等都是1手10吨。股指期货1手就是一份合约。

使用道具 举报

Rank: 3Rank: 3

发表于 2013-8-14 14:12:32 |显示全部楼层
十五、实盘函数
自动交易的订单价格产生是由计算机产生的,使用实盘虚盘同步的交易模式。如不全自动交易,直接操作实盘进行进行开平仓,撤单等,任然采用公式控制,我称之为半自动交易。我们可以采用实盘函数。普通软件下单,就算是手动操作了。
A_SendOrder 以限价单的形式直接发送到交易通道
A_CancelOrder 撤销委托单
A_CancelAllOrders 撤销所有委托单
A_GetOrderCount 返回当日共有多少张委托单
A_GetOpenOrderCount 返回当日为成交(或部分成交)的委托单数量
A_GetLastOrderIndex 返回最近一次委托单的序号
A_GetLastOpenOrderIndex 返回最近一次为成交(或部分成交)的委托单数量
A_OrderStatus 委托单的状态
A_OpenOrderStatus 未成交(或部分成交)的委托单的状态
A_OrderLot 委托单的委托开仓量
A_OpenOrderLot 未成交(或部分成交)委托的未成交的口数
A_OrderPrice 委托单的委托价格
A_OpenOrderPrice 未成交(或部分成交)的委托价格
A_OrderTime 委托单的委托时间
A_OpenOrderTime 未成交(或部分成交)的委托单的委托时间
A_OrderDate 委托单的委托日期
A_OpenOrderDate 未成交(或部分成交)的委托单的委托日期
A_OrderType 委托单的类型
A_OpenOrderType 未成交(或部分成交)的委托单的类型
A_OrderContractNo 委托单的合同编号
A_OpenOrderContractNo 未成交(或部分成交)的委托单的合同编号
A_OrderFilledLot 委托单的已成交口数
A_OpenOrderFilledLot 未成交(或部分成交)的委托单的已成交口数
A_OrderFilledPrice 委托单的成交价格
A_OpenOrderFilledPrice 未成交(或部分成交)的委托单的已成交部分的成交价格
A_OrderCancelledLot 委托单撤单已撤口数
A_OpenOrderCancelledLot 未成交(或部分成交)的委托单的已撤口数
A_OrderSymbol 委托单的委托品种
A_OpenOrderSymbol 未成交(或部分成交)的委托单的委托品种

使用道具 举报

Rank: 8Rank: 8

发表于 2013-8-14 22:17:18 |显示全部楼层
楼主精神可嘉。不过这个版贴子多,沉的快。建议不如移到“软件使用学习”版

使用道具 举报

Rank: 6Rank: 6

激情奖

发表于 2013-8-14 22:33:20 |显示全部楼层
这个帖子要顶

使用道具 举报

Rank: 6Rank: 6

发表于 2013-8-14 22:57:32 |显示全部楼层
这个可是造福大众的啊,必须支持

使用道具 举报

Rank: 6Rank: 6

发表于 2013-8-14 23:00:16 |显示全部楼层
有心人啊
福康安--快乐健康平安……不恨年华去也,只恐少年心事,强半为消磨……青春都一晌,忍把浮名,换了浅斟低唱……十有九人堪白眼,百无一用是书生……与有肝胆人共事,从无字句处读书

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

bottom

Archiver|http://www.patiosoft.com

GMT+8, 2017-12-17 08:58 , Processed in 0.042956 second(s), 9 queries .

花生网 Copyrigh©2012

和讯信息科技有限公司 ALL Rights Reserved 版权所有 复制必究

回顶部