开拓者程序化交易TB公式高级应用
交易开拓者代码学习各种买卖指令及实例
交易开拓者代码学习各种买卖指令及实例(TB)(转)2012年07月27日22:35原文地址:交易开拓者代码学习各种买卖指令及实例(TB)(转)作者:竹本无青各种买卖指令Buy说明产生一个多头建仓操作。
语法Buy(Numeric Share=0,Numeric Price=0,Bool Delay=False)参数Share 买入数量,为整型值,默认为使用系统设置参数;Price 买入价格,为浮点数,默认=0时为使用现价(非最后Bar为Close);Delay 买入动作是否延迟,默认为当前Bar发送委托,当Delay=True,在下一个Bar执行。
备注产生一个多头建仓操作,无返回值,该函数仅支持交易指令。
该函数仅用于多头建仓,其处理规则如下:如果当前持仓状态为持平,即MarketPosition = 0 时,该函数按照参数进行多头建仓。
如果当前持仓状态为空仓,即MarketPosition = -1 时,该函数首先平掉所有空仓,达到持平的状态,然后再按照参数进行多头建仓。
如果当前持仓状态为多仓,即MarketPosition = 1 时,该函数将继续建仓,但具体是否能够成功建仓要取决于系统中关于连续建仓的设置,以及资金,最大持仓量等限制。
示例在MarketPosition=0的情况下:Buy(50,10.2,1) 表示用10.2的价格买入50张合约,延迟到下一个Bar发送委托。
Buy(10,Close) 表示用当前Bar收盘价买入10张合约,马上发送委托。
Buy(5,0) 表示用现价买入5张合约,马上发送委托。
BuyToCover说明产生一个空头平仓操作。
语法BuyToCover(Numeric Share=0,Numeric Price=0,Bool Delay=False)参数Share 买入数量,为整型值,默认为平掉当前所有持仓;Price 买入价格,为浮点数,默认=0时为使用现价(非最后Bar为Close);Delay 买入动作是否延迟,默认为当前Bar发送委托,当Delay=True,在下一个Bar执行。
开拓者程序化交易TB公式高级应用
开拓者程序化交易TB公式高级应用
开拓者程序化交易TB公式高级应用是一种强大的利用高级公式进行
交易的程序化技术。
这项技术能够帮助投资者有效地实现高效投资,通过
利用量化技术实现自动交易,投资者可以根据自己的投资策略和分析,实
现有效的投资。
对于开拓者程序化交易TB公式高级应用,主要用于订单执行、市场
深度管理和风险控制。
首先,订单执行的公式能够帮助实现快速反应,快
速做单,实现整个交易的规范化及精细化控制,能够根据自身投资策略和
市场状况实施更加灵活的交易;其次,市场深度的公式可以模拟市场深度,从而实现有效的投资组合的风险控制。
市场深度的公式可以帮助投资者判
断市场的走势和能量,从而有效控制组合的风险。
最后,风控公式能够帮
助投资者模拟风险情况,实现风险管理的精细化和有效化。
风控公式可以
帮助投资者有效评估市场的风险,从而有效的控制风险,实现安全合规的
投资。
综上所述。
交易开拓者(TB)期货程序化交易编程
交易开拓者(TB)期货程序化交易编程本文仅是写给完全不懂编程的朋友的,仅是最基本的入门资料。
TB里面代码执行1,代码从第一根K线开始执行,一直到最后一根K线;2,在每一根K线上,代码都是从第一行开始执行,一直到最后一行;我们就写个输出每日的收盘价的例子;打开TB,在左边的TB公式里面,点击新建技术指标,然后在出来的公式编辑器里面输入BeginEnd注意,除了参数和变量定义外,所有的代码都必须包含在Begin和End之间我们再在Begin和End之间输入一些代码,完整的就是:Begin("c:\\a.log",Text(Year)+"年"+Text(Month)+"月"+Text(Day)+"日的收盘价等于");("C:\\a.log",Text(Close));End我们再说说这两行代码是什么意思File就是文件,Append就是添加,现在明白了吧就是添加一个文件,文件名是什么呢?就是你后面写的a.log,这个文件的路径在哪里呢?就是c:\\a.log里面的C盘,且在这个文件里面添加一行东西,这行东西的内容就是你后面所写的Text(Year)+"年"+Text(Month)+"月"+Text(Day)+"日的收盘价等于"当然,如果这个文件已经存在,他就不会添加文件了,仅仅在这个文件的后面添加一行上面你写的内容好了,再看看Text,Text的意思就是把那些不是字符串的东西如数字啊,等变成字符串.而Year,Month,Day就代表了正在执行你写的代码的那一根K线的年,月,日,年月日是数字,我们当然要用Text把它搞成字符串CloseK线的收盘价啊,如果代码执行到最后的那根K线我们点公式编辑器上面的工具栏的第五个按钮(打勾的那个东西),校验保存公式,稍微等一下,就OK了我们在回到K线图里面,TB把K线图叫做超级图表在K线图里面右键,选择商品设置,然后吧里面的样本数由默认的300改成5,意思是让在超级图表里面仅仅显示5条K线,点确定后,你就看到在K线图里面只显示了5跟K线,当然现在代码还不能被执行,因为我们现在还需要把我们刚刚所写的那个指标加到K线图上面才能被执行的我们上面说了,我们这个例子仅仅是把每日的收盘价写到文件里面去啊,那么我们找一找文件在什么地方咯? ("c:\\a.log",很明显,文件是在c盘的,文件的名字是a.log好了,我们到c盘找到a.log文件,双击打开,我们就会看到下面的内容:2007年9月24日的收盘价等于672802007年9月25日的收盘价等于678002007年9月26日的收盘价等于671602007年9月27日的收盘价等于673002007年9月28日的收盘价等于68020我们现在来分析下:首先你写的代码在第一根K线上执行,先执行第一行代码:("c:\\a.log",Text(Year)+"年"+Text(Month)+"月"+Text(Day)+"日的收盘价等于");这行代码就输出了第一根K线的年,月,日,就在a.log文件里输出成"2007年9月24日的收盘价等于"然后执行第二行代码:("C:\\a.log",Text(Close));折行代码把第一根K线的收盘价输出到a.log文件里面,于是就输出了"67280"好了,代码在第一根K线上执行完毕,于是再转到第二根K线,再执行第一行代码,再执行第二行代码.........我一直非常愿意帮助客户们解答在编程中的难点,但是却不大愿意帮助客户写完整的公式策略。
期货程序化交易——交易开拓者(TradeBlazer)公式详细介
交易开拓者(TradeBlazer)公式详细介绍概述本章节内容是TradeBlazer公式的全面参考手册,详细介绍了TradeBlazer公式的结构、语法、特点、使用方法及功能等。
通过阅读该参考手册,您能够了解TradeBlazer公式的基本语法、操作符、表达式及控制语句等,通过手册提供的各种示例程序,掌握各种TradeBlazer公式的编写要领,最终达到能够熟练将自己的思想转化为TradeBlazer公式,并在交易开拓者中应用。
什么是TradeBlazer公式?TradeBlazer公式是一种专为分析金融数据-时间序列而设计的高级语言,它提供直接、强大的框架将交易思想转化为用户函数、用户字段、技术分析,交易指令等计算机能够识别的代码。
TradeBlazer公式是一门语法简单但是功能强大的语言,它能帮助您创建自己的交易和技术分析工具。
通过组合普通的交易指令和简单的语句,TradeBlazer公式使您能够很容易并且直接的用简单语句表达自己的交易规则和行为。
交易开拓者能够读取您开发的TradeBlazer公式,在历史价格数据基础上进行评估,并能自动执行特定的交易动作,将您的交易思想转化为实际的交易操作。
TradeBlazer公式能做什么?通过TradeBlazer公式,您能够创建自己的交易指令、技术指标、K线型态、特征走势、用户函数以及用户字段。
您也可以拷贝,修改并使用系统内置几百个函数、字段、技术分析和交易指令。
TradeBlazer公式包含的公式类型如下:▪用户函数:用户函数是能够通过函数名称进行引用的指令集,它执行一系列操作并返回一个值。
您可以在其他任何公式中使用用户函数进行计算;▪用户字段:用户字段是TradeBlazer公式为交易开拓者报价类窗体提供的一项数据输出公式,通过用户字段执行一系列语言指令,给报价窗体返回一个特定的显示值;▪技术指标:技术指标是基于基础数据,通过一系列的数学运算,在每个Bar返回相应的结果值的一类公式,这些值在图表模块中输出为线条、柱状图、点等表现形式;▪K线型态:K线型态是类似于技术指标的一类公式,它主要着重于反映一段K线的特定型态,并通过不同的技术指标的方式输出到图表;▪特征走势:特征走势是类似于技术指标的一类公式,它主要着重于反映整个价格曲线的趋势、变化特征,并通过特定的表达方式输出到图表;▪交易指令:交易指令是包含买、卖、平仓,头寸,仓位控制的并执行交易指令的一类公式,它主要帮助您将您的交易思想转化为计算机的操作。
交易开拓者(TB)使用说明
欢迎使用交易开拓者欢迎使用交易开拓者交易开拓者(TradeBlazer)是一款为中国期货市场专业投资用户开发的金融投资软件,它集中了实时行情,技术分析,快捷交易及程式化交易的功能。
通过使用交易开拓者,用户可以简单,快速的将自己的交易思想转化为计算机代码,让计算机帮助用户实现价值。
我们致力于为期货行业的投资者提供一个实现盈利的工具,但并不保证该软件能为所有的使用者带来盈利,希望使用者能够通过使用系统,建立并优化自己的交易思想,形成自己的交易策略。
感谢您选择交易开拓者,希望您能够通过使用该系统找到乐趣,并能创造更多价值。
交易开拓者快速链接▪关于交易开拓者▪快速入门▪系统基础▪行情报价▪分时图▪超级图表▪交易系统▪公式系统关于交易开拓者- 系统简介系统简介交易开拓者是一款针对中国期货行业的专业金融投资软件,它借鉴了华尔街一些著名软件的优点,吸收了国际众多的网上交易系统的精华,并拥有简单和友好的用户界面,用户可以方便快捷的开发及优化自己的技术分析和交易策略。
功能特色▪强大的公式支持系统,方便用户实现交易思想▪领先的策略交易体系,实时数据驱动和自动交易功能▪面向用户的快速下单体系▪强大的多帐户管理功能,让您使用多帐户像单帐户一样轻松▪多种方式的套利功能,直观轻松的实现套利交易▪动态帐户和风险监控机制▪完善的图表体系设计、分析工具与交易功能的动态交互▪工作区管理机制和个性化模板应用关于交易开拓者- 系统配置系统配置最低系统配置▪CPU: PIII 800以上▪硬盘: 1G及以上可用空间▪内存: 256M及以上▪显示器: 15吋彩显,分辨率800*600▪操作系统: WindowsXP及以上系统▪互联网: 56K Modem推荐系统配置▪CPU: P4 1GHZ以上▪硬盘: 10G及以上可用空间▪内存: 512M及以上▪显示器: 17吋彩显,分辨率1024*768▪操作系统: WindowsXP及以上系统▪互联网: ADSL,CableModem及其他宽带接入方式▪其他:有声卡和音箱等多媒体设备关于交易开拓者- 寻求帮助寻求帮助交易开拓者是一个专业金融投资工具,需要您多些耐心,慢慢地去和它沟通。
交易开拓者代码学习各种买卖指令及实例
SetBreakEven(0,2000,True);当前所有持仓的盈利达到2000之后,启动所有持仓位置的保本平仓。(此时是计算所有持仓的盈利数)
触发价格:触发单设定的条件价格,通过比较现价和触发价格确定是否下单。下单之后,该触发单会从交易服务器中删除;
执行价格:条件满足之后,发送委托的价格,设定为0可自动获取当时的叫买/卖价;
过期时间:设定触发单的过期时间,到这个时间还没有触发的订单会被设为过期,不再进行监控。
吊买
吊买是指当现价向下跌破触:吊卖
备注产生一个空头建仓操作,无返回值,该函数仅支持交易指令。
该函数仅用于空头建仓,其处理规则如下:
如果当前持仓状态为持平,即MarketPosition = 0时,该函数按照参数进行空头建仓。
如果当前持仓状态为多仓,即MarketPosition = 1时,该函数首先平掉所有多仓,达到持平的状态,然后再按照参数进行空头建仓。
注意:触发单在发送之后将会生效,该委托单在服务器上运行,此时您关闭程序或电脑不会影响触发单的执行。
SetPercentTrailing(2000,0.2,True);又是一个宝
SetPercentTrailing(2000,0.2,True);当前所有持仓盈利在大于2000之后回落,当回落百分比达到20%之后,执行所有持仓位置的百分比回落平仓。(此时是计算所有持仓的盈利数)
参数Share买入数量,为整型值,默认为使用系统设置参数;
Price买入价格,为浮点数,默认=0时为使用现价(非最后Bar为Close);
TB公式程序化实例
八、技术指标编写8-1、技术指标与应用技术指标是最常用的一类公式,它通过计算一系列的数学公式,在每个Bar都返回值,这些值在图表模块中输出为线条、柱状图、点等表现形式,通过分析图形特点、走势和曲线帮助客户分析行情走势,得出合理的交易判断。
当技术指标应用在图表中时,您可以设置技术指标各输出值的表现形式,以及颜色、粗细等,如下图的点,线,柱状图所示:示例,技术指标RSI,脚本如下:ParamsNumeric Length(14);Numeric OverSold(20);Numeric OverBought (80); VarsNumeric RSIValue(0);Numeric RSIColor(-1); BeginRSIValue = RSI(Close,Length);If (RSIValue > OverBought){RSIColor = RED;}Else If (RSIValue < OverSold){RSIColor = CYAN;}PlotNumeric("RSI1", RSIValue, RSIColor);PlotNumeric("超卖", OverSold);PlotNumeric("超买", OverBought);If CrossOver(RSIValue,OverSold){Alert("Indicator exiting oversold zone");}If CrossUnder(RSIValue, OverBought){Alert("Indicator exiting overbought zone");}End公式应用RSI调用RSI内建用户函数计算出结果,然后判断其返回值和超买,超卖的关系,设置显示颜色,并产生报警信息。
公式应用在输出数据时,我们是通过输出值的名称来进行识别,名称相同则认为是一个数据,如下的代码,后面语句的输出数据将会覆盖前面语句的输出数据。
开拓者程序化交易TB公式高级应用
开拓者程序化交易TB公式高级应用在开拓者程序化交易中,TB公式(也称为波段公式)是一种常见且有效的交易策略,通过捕捉市场的波动性进行交易。
TB公式的基本原则是利用价格的波动性来进行买入和卖出,从而获取利润。
在进行TB公式的高级应用时,可以通过以下方式来进一步优化交易策略,提高交易效果。
一、优化响应速度在程序化交易中,响应速度是一个关键因素,尤其是在高频交易中。
要想优化响应速度,可以采取以下措施:1.使用更高效的编程语言和算法,减少代码执行时间。
2.使用更快速的数据传输通道,如使用高速网络连接或专用交易通道。
3.使用低延迟的交易服务器和硬件设备,减少交易指令的执行时间。
二、加入风险控制在进行高级应用时,风险控制是至关重要的。
以下是一些可以采取的风险控制措施:1.设置止损和止盈点位,以控制亏损和获利。
该策略可以通过根据历史数据和市场波动性来设定合适的止损和止盈点位。
2.引入动态调整交易仓位的机制,根据市场行情和仓位容量来调整买入和卖出的数量。
3.设定最大亏损限制,当亏损超过设定的限制时,及时止损退出。
三、结合其他技术指标为了提高交易策略的精度和准确性,可以将TB公式与其他技术指标相结合。
以下是一些常用的技术指标:1.移动平均线:可以使用长期移动平均线和短期移动平均线相结合,通过交叉验证来确认买入和卖出的时机。
2.相对强弱指标(RSI):RSI指标可以用来判断市场的超买和超卖情况,当RSI指标高于其中一阈值时,可以考虑卖出;当RSI指标低于其中一阈值时,可以考虑买入。
3.成交量指标:分析成交量变化可以判断市场的热度和趋势,结合TB公式可以更好地确定买入和卖出的时机。
四、实时数据分析在进行高级应用时,需要及时地获得和分析市场数据,以更好地决策。
1.实时行情监控:使用行情接口获取实时行情数据,通过程序化交易工具实时显示行情数据,进行实时监控和分析。
2.实时数据处理:通过实时数据处理技术,分析市场数据的变化趋势,以及实时计算各种技术指标的数值。
20140415关于使用TB做模型测试调整优化实盘评估方面的经验与技巧
我想大家根据程序化的定义,都编写过一些 策略,不管老手还是新手,你们手上都有一 些策略,这些策略基本都是编成一个大致向 上的资金曲线,之后我们应该做些什么?我 们应该怎么优化它,让它成为一个按照自己 的操作习惯的程序策略?
举例:这里我利用TB策略里面的MACD买入卖出平仓策略举例说明,加 载1个很简单的策略。
加上参数优化和策略优化 程序改成:
Params Numeric FastLength( 24 ); Numeric SlowLength( 34 ); Numeric MACDLength( 19 ); Numeric abc(10); Vars NumericSeries MACDValue; NumericSeries AvgMACD; NumericSeries op1; NumericSeries op2; Numeric MACDDiff; Bool Condition1; Bool Condition2; Bool Condition3; Bool Condition4; Begin MACDValue = XAverage( Close[1], FastLength ) - XAverage( Close[1], SlowLength ) ; AvgMACD = XAverage(MACDValue,MACDLength); MACDDiff = MACDValue - AvgMACD; Condition1 = CrossOver(MACDValue, AvgMACD) ; op1=o+abc; op2=o-abc;
一个策略从基础框架,经过了参数优化,通过了 策略优化之后,我们还应该做些什么?
第四步我们要进行逻辑判读
交易开拓者TB公式高级应用_2
Bollinger Bandit System
布林带算法:
定义上轨为UpBand,下轨为DnBand;
UpBand = AverageFC(Close, BBLength) + StandardDev(Close, BBLength,2)* NumsStdDev; DnBand = AverageFC(Close, BBLength) StandardDev(Close, BBLength,2)* NumsStdDev; 这里使用的样本标准差。
Bollinger Bandit System
1.
对于BBS系统的完善: 我们可以替换Close为其他算法,比如:
Typical Price = (high + low + close)/3 Weighted Price = (high + low + close + close)/4
2.
3.
本系统设置CMI<20时为波段模式。
Thermostat System
波段模式下,通过一个简单的条件来判别多空强 弱。 If(Close > (High+Low+Close)/3) { LongShortFlag = 1; }else { LongShortFlag = -1; }
Thermostat System
LongShortFlag==1的情况下,第二天做多
的突破范围我们会设置较小,做空的突破 范围设置较大。 LongShortFlag==-1的情况下,第二天做多 的突破范围我们会设置较大,做空的突破 范围设置较小。
Thermostat System
交易开拓者(TB)使用说明
欢迎使用交易开拓者欢迎使用交易开拓者交易开拓者(TradeBlazer)是一款为中国期货市场专业投资用户开发的金融投资软件,它集中了实时行情,技术分析,快捷交易及程式化交易的功能。
通过使用交易开拓者,用户可以简单,快速的将自己的交易思想转化为计算机代码,让计算机帮助用户实现价值。
我们致力于为期货行业的投资者提供一个实现盈利的工具,但并不保证该软件能为所有的使用者带来盈利,希望使用者能够通过使用系统,建立并优化自己的交易思想,形成自己的交易策略。
感谢您选择交易开拓者,希望您能够通过使用该系统找到乐趣,并能创造更多价值。
交易开拓者快速链接▪关于交易开拓者▪快速入门▪系统基础▪行情报价▪分时图▪超级图表▪交易系统▪公式系统关于交易开拓者- 系统简介系统简介交易开拓者是一款针对中国期货行业的专业金融投资软件,它借鉴了华尔街一些著名软件的优点,吸收了国际众多的网上交易系统的精华,并拥有简单和友好的用户界面,用户可以方便快捷的开发及优化自己的技术分析和交易策略。
功能特色▪强大的公式支持系统,方便用户实现交易思想▪领先的策略交易体系,实时数据驱动和自动交易功能▪面向用户的快速下单体系▪强大的多帐户管理功能,让您使用多帐户像单帐户一样轻松▪多种方式的套利功能,直观轻松的实现套利交易▪动态帐户和风险监控机制▪完善的图表体系设计、分析工具与交易功能的动态交互▪工作区管理机制和个性化模板应用关于交易开拓者- 系统配置系统配置最低系统配置▪CPU: PIII 800以上▪硬盘: 1G及以上可用空间▪内存: 256M及以上▪显示器: 15吋彩显,分辨率800*600▪操作系统: WindowsXP及以上系统▪互联网: 56K Modem推荐系统配置▪CPU: P4 1GHZ以上▪硬盘: 10G及以上可用空间▪内存: 512M及以上▪显示器: 17吋彩显,分辨率1024*768▪操作系统: WindowsXP及以上系统▪互联网: ADSL,CableModem及其他宽带接入方式▪其他:有声卡和音箱等多媒体设备关于交易开拓者- 寻求帮助寻求帮助交易开拓者是一个专业金融投资工具,需要您多些耐心,慢慢地去和它沟通。
交易开拓者代码学习各种买卖指令及实例
交易开拓者代码学习各种买卖指令及实例(TB)(转)2012年07月27日22:35原文地址:交易开拓者代码学习各种买卖指令及实例(TB)(转)作者:竹本无青各种买卖指令Buy说明产生一个多头建仓操作。
语法Buy(Numeric Share=0,Numeric Price=0,Bool Delay=False)参数Share 买入数量,为整型值,默认为使用系统设置参数;Price 买入价格,为浮点数,默认=0时为使用现价(非最后Bar为Close);Delay 买入动作是否延迟,默认为当前Bar发送委托,当Delay=True,在下一个Bar执行。
备注产生一个多头建仓操作,无返回值,该函数仅支持交易指令。
该函数仅用于多头建仓,其处理规则如下:如果当前持仓状态为持平,即MarketPosition = 0 时,该函数按照参数进行多头建仓。
如果当前持仓状态为空仓,即MarketPosition = -1 时,该函数首先平掉所有空仓,达到持平的状态,然后再按照参数进行多头建仓。
如果当前持仓状态为多仓,即MarketPosition = 1 时,该函数将继续建仓,但具体是否能够成功建仓要取决于系统中关于连续建仓的设置,以及资金,最大持仓量等限制。
示例在MarketPosition=0的情况下:Buy(50,10.2,1) 表示用10.2的价格买入50张合约,延迟到下一个Bar发送委托。
Buy(10,Close) 表示用当前Bar收盘价买入10张合约,马上发送委托。
Buy(5,0) 表示用现价买入5张合约,马上发送委托。
BuyToCover说明产生一个空头平仓操作。
语法BuyToCover(Numeric Share=0,Numeric Price=0,Bool Delay=False)参数Share 买入数量,为整型值,默认为平掉当前所有持仓;Price 买入价格,为浮点数,默认=0时为使用现价(非最后Bar为Close);Delay 买入动作是否延迟,默认为当前Bar发送委托,当Delay=True,在下一个Bar执行。
开拓者TB的RangeBreak交易模型源码
开拓者TB的RangeBreak交易模型源码日内效果不如隔日来得好ParamsNumeric PercentOfRange(0.5); //突破系数Numeric ExitOnCloseMins(14.55); //最后交易时间Numeric MinRange(0.002); //开盘价的百分比Numeric Lots(1); //开仓量VarsNumeric MyExitPrice;Numeric DayOpen;Numeric preDayRange;Numeric UpperBand; //上轨Numeric LowerBand; //下轨Numeric MyPrice;BeginDayOpen = OpenD(0);preDayRange = HighD(1)-LowD(1); //昨日波幅 PreDayRange = Max(PreDayRange,DayOpen*MinRange);UpperBand = DayOpen+PreDayRange*PercentOfRange; //求出上轨LowerBand = DayOpen-PreDayRange*PercentOfRange; //求出下轨PlotNumeric("UpperBand",UpperBand);PlotNumeric("LowerBand",LowerBand);If(MarketPosition!=1 && High>=UpperBand && Time<ExitOnCloseMins/100) //开多条件价格高于上轨,时间小于0.145500{MyPrice = Max(UpperBand,Open);Buy(Lots,MyPrice);Return;}If(MarketPosition!=-1 && Low<=LowerBand &&Time<ExitOnCloseMins/100){MyPrice = Min(LowerBand,Open);SellShort(Lots,MyPrice);Return;}If( MarketPosition==1 && Low<LowerBand) //多头中如果下破下轨止损{MyExitPrice=Min(Open,LowerBand);Sell(Lots,MyExitPrice);Return;}If( MarketPosition==-1 && High>UpperBand) //空头中如果上穿上轨止损 {MyExitPrice=Max(Open,UpperBand);BuytoCover(Lots,MyExitPrice);Return;}EndTB技术人员:本帖最后由rookies 于2012-7-21 11:25 编辑隔日情况下,允许二次开仓,可以提高盈利率ParamsNumeric PercentOfRange(0.5);Numeric ExitOnCloseMins(14.50);Numeric MinRange(0.002);Numeric Lots(1);Numeric StopPointUpper(1);Numeric StopPointLower(1);Numeric Length(12);Numeric TakeStart(0.1);Numeric TakeStop(0.5);VarsNumeric LastTradeMins(14.00);NumericSeries Ma;Numeric MyExitPrice;Numeric DayOpen;Numeric preDayRange;Numeric UpperBand;Numeric LowerBand;Numeric MyPrice;Numeric StopLine;BoolSeries UpperStoped;BoolSeries LowerStoped;NumericSeries HigherAfterEntry;NumericSeries LowerAfterEntry;String BoolSet;BeginMa=Average(Close,Length);DayOpen = OpenD(0);preDayRange = HighD(1)-LowD(1);PreDayRange = Max(PreDayRange,DayOpen*MinRange);Commentary("DayOpen="+Text(DayOpen));Commentary("preDayRange="+Text(preDayRange));UpperBand = DayOpen+PreDayRange*PercentOfRange;LowerBand = DayOpen-PreDayRange*PercentOfRange;Commentary("UpperBand="+Text(DayOpen+PreDayRange*PercentOfRange));Commentary("UpperBand="+Text(DayOpen-PreDayRange*PercentOfRange));PlotNumeric("UpperBand",UpperBand);PlotNumeric("LowerBand",LowerBand);If(Date!=Date[1]){UpperStoped=True;LowerStoped=True;}If(UpperStoped && LowerStoped){If(MarketPosition!=1 && High>=UpperBand && Time<ExitOnCloseMins/100){MyPrice = Max(UpperBand,Open);Buy(Lots,MyPrice);UpperStoped=False;Return;}}If(!UpperStoped){If(MarketPosition!=1 && High>=UpperBand && High>=HigherAfterEntry && Time<ExitOnCloseMins/100){MyPrice = Max(UpperBand,Open);MyPrice = Max(HigherAfterEntry,MyPrice);Buy(Lots,MyPrice);PlotString("二次建仓","二次建仓");Return;}If(LowerStoped && MarketPosition==1 && Low<=LowerBand && Time<Exit OnCloseMins/100){MyPrice = Min(LowerBand,Open);Sell(Lots,MyPrice);LowerStoped=False;PlotString("反向建仓","反向建仓");Return;}}If(UpperStoped && LowerStoped){If(MarketPosition!=-1 && Low<=LowerBand &&Time<ExitOnCloseMins/100)/ / && Time<=ExitOnCloseMins/100){MyPrice = Min(LowerBand,Open);SellShort(Lots,MyPrice);LowerStoped=False;Return;}}If(!LowerStoped){If(MarketPosition!=-1 && Low<=LowerBand && Low<=LowerAfterEntry &&T ime<ExitOnCloseMins/100){MyPrice = Min(LowerBand,Open);MyPrice = Min(LowerAfterEntry,MyPrice);SellShort(Lots,MyPrice);PlotString("二次建仓","二次建仓");Return;}If(UpperStoped && MarketPosition==-1 && High>=UpperBand && Time<E xitOnCloseMins/100){MyPrice = Max(UpperBand,Open);BuyToCover(Lots,MyPrice);UpperStoped=False;PlotString("反向建仓","反向建仓");Return;}}End∙TB客服:本帖最后由rookies 于2012-7-21 11:14 编辑应学友要求加入反向平仓和二次建仓 RU000 5分测试效果如图,如果做得更细一些的话会有更好的效果 15分上效果更好一些∙网友回复:本帖最后由rookies 于2012-7-21 11:25 编辑加入动态止盈和止损ParamsNumeric PercentOfRange(0.5);Numeric ExitOnCloseMins(14.50);Numeric MinRange(0.002);Numeric Lots(1);Numeric StopPointUpper(1);Numeric StopPointLower(1);Numeric Length(12);Numeric TakeStart(0.1);Numeric TakeStop(0.5);VarsNumeric LastTradeMins(14.00);NumericSeries Ma;Numeric MyExitPrice;Numeric DayOpen;Numeric preDayRange;Numeric UpperBand;Numeric LowerBand;Numeric MyPrice;Numeric StopLine;BoolSeries UpperStoped;BoolSeries LowerStoped;NumericSeries HigherAfterEntry;NumericSeries LowerAfterEntry;String BoolSet;BeginMa=Average(Close,Length);DayOpen = OpenD(0);preDayRange = HighD(1)-LowD(1);PreDayRange = Max(PreDayRange,DayOpen*MinRange);Commentary("DayOpen="+Text(DayOpen));Commentary("preDayRange="+Text(preDayRange));UpperBand = DayOpen+PreDayRange*PercentOfRange;LowerBand = DayOpen-PreDayRange*PercentOfRange;Commentary("UpperBand="+Text(DayOpen+PreDayRange*PercentOfRange));Commentary("UpperBand="+Text(DayOpen-PreDayRange*PercentOfRange));PlotNumeric("UpperBand",UpperBand);PlotNumeric("LowerBand",LowerBand);If(Date!=Date[1]){UpperStoped=True;LowerStoped=True;}If(UpperStoped && LowerStoped){If(MarketPosition!=1 && High>=UpperBand && Time<ExitOnCloseMins/100){MyPrice = Max(UpperBand,Open);Buy(Lots,MyPrice);UpperStoped=False;Return;}}If(!UpperStoped){If(MarketPosition!=1 && High>=UpperBand && High>=HigherAfterEntry && Time<ExitOnCloseMins/100){MyPrice = Max(UpperBand,Open);MyPrice = Max(HigherAfterEntry,MyPrice);Buy(Lots,MyPrice);PlotString("二次建仓","二次建仓");Return;}If(LowerStoped && MarketPosition==1 && Low<=LowerBand && Time<Exit OnCloseMins/100){MyPrice = Min(LowerBand,Open);Sell(Lots,MyPrice);LowerStoped=False;PlotString("反向建仓","反向建仓");Return;}}If(UpperStoped && LowerStoped){If(MarketPosition!=-1 && Low<=LowerBand &&Time<ExitOnCloseMins/100)/ / && Time<=ExitOnCloseMins/100){MyPrice = Min(LowerBand,Open);SellShort(Lots,MyPrice);LowerStoped=False;Return;}}If(!LowerStoped){If(MarketPosition!=-1 && Low<=LowerBand && Low<=LowerAfterEntry &&Time<ExitOnCloseMins/100){MyPrice = Min(LowerBand,Open);MyPrice = Min(LowerAfterEntry,MyPrice);SellShort(Lots,MyPrice);PlotString("二次建仓","二次建仓");Return;}If(UpperStoped && MarketPosition==-1 && High>=UpperBand && Time<Ex itOnCloseMins/100){MyPrice = Max(UpperBand,Open);BuyToCover(Lots,MyPrice);UpperStoped=False;PlotString("反向建仓","反向建仓");Return;}}If(MarketPosition<>0 && BarsSinceEntry==1){HigherAfterEntry=AvgEntryPrice;LowerAfterEntry=AvgEntryPrice;}Else If(BarsSinceEntry>1){HigherAfterEntry=Max(HigherAfterEntry,High[1]);LowerAfterEntry=Min(LowerAfterEntry,Low[1]);}Commentary("HigherAfterEntry"+Text(HigherAfterEntry));Commentary("LowerAfterEntry"+Text(LowerAfterEntry));If(MarketPosition==1){If(HigherAfterEntry>=AvgEntryPrice+DayOpen*TakeStart*0.01){StopLine=HigherAfterEntry-DayOpen*TakeStop*0.01;Commentary("StopLineHigherAftetEntry"+Text(StopLine));}Else{StopLine=UpperBand-DayOpen*StopPointUpper*0.01;Commentary("StopLine"+Text(StopLine));}If(Low<=StopLine){MyExitPrice=Min(StopLine,Open);Sell(Lots,MyExitPrice);}}If(MarketPosition==-1){If(LowerAfterEntry<=AvgEntryPrice-DayOpen*TakeStart*0.01){StopLine=LowerAfterEntry+DayOpen*TakeStop*0.01;Commentary("StopLineLowerAfterEntry"+Text(StopLine));}Else{StopLine=LowerBand+DayOpen*StopPointLower*0.01;Commentary("StopLine"+Text(StopLine));}If(High>=StopLine){MyExitPrice=Max(StopLine,Open);BuyToCover(Lots,MyExitPrice);}}End。
TB交易网校2011.12.29课程:交易开拓者公式编写基础(一)
Bar数据的使用
Bar数据是TB公式运行的基础。 Bar数据是序列数据,可以回溯读取(图示)。 举例: 比较今天的最高价是否突破了昨天的最高价 表达式为:High > High[1] 比较今天的最高价是否突破了前两天的最高价 表达式为:High > High[1] and High>High[2] 或者:High > High[1] && High>High[2]
参数:String Name String str Numeric Locator=0 Integer Color=-1 Integer BarsBack=0
----- 输出值的名称 ----- 输出的字符串; ----- 输出值的定位点; ----- 输出值的颜色; ----从当前BAR回溯的 BAR数
Params
公式参数段
Vars
NumericSeries MA; ……
公式变量段
Begin
MA = AverageFC(Close, Length); …… End
9
公式脚本段
例1:Hello World
Sample1:
Begin FileAppend("c:\\tb\\sample1.txt","Hello World!"); End
While循环
While语句在条件为真的时候重复执行某一项操作。即, 只要条件表达式的值为真(True)时,就重复执行某个动 作。直到行情信息改变以致条件为假 (False)时,循环 才结束。 语法如下: While (Condition) { TradeBlazer公式语句; } Continue 和 Break
期货程序化编程基础(交易开拓者)
运算符
类型
算术运算符
关系运算符
保留字
+ - * / % ^
> >= < <= == <>
逻辑运算符
括号
AND/&& OR/|| NOT/!
() {} []
其它
.,
算术运算符号
操作符 + * 加 减 乘 说明
关系运算符号 操作符 说明 < > 小于 大于
/
% ^ ()
除
求模 求幂 括号
<=
>= <> ==
标点符号
• 通常,在写语句的过程中,会用到很多的标点符号。可用来定义参数、定义变量、创 建规则的优先权。例如,TradeBlazer公式用";"来标注一个语句结束。标点符号也是 一个保留字,因为符号也是语言结构的一部分,在下表中列出了TradeBlazer公式中所 用到的标点符号,和该标点符号所表达的意思:
交易开拓者(TB)编程基础
----公式篇
华泰长城期货有限公司 Huatai Great Wall Futures Co., Ltd. QQ:909118951
基本框架
1
TB公式概述
2
3 4
数据 语句 参数
5
6 1
变量
数据回溯
公式
概述
什么是TradeBlazer公式
1、TradeBlazer公式是一种专为分析金融数据-时间序列而设计的高级语言 ,它提供直接、强大的框架将交易思想转化为用户函数、技术分析,交 易指令等计算机能够识别的代码。 2、TradeBlazer公式是一门语法简单但是功能强大的语言,利用它能创建 自己的交易和技术分析工具。通过组合普通的交易指令和简单的语句, TradeBlazer公式能够很容易并且直接的用简单语句表达自己的交易规则 和行为。 3、交易开拓者能够读取TradeBlazer公式,在历史价格数据基础上进行评 估,并能自动执行特定的交易动作,将交易思想转化为实际的交易操作 。
交易开拓者的策略性能测试及参数优化
交易开拓者的策略性能测试及参数优化交易开拓者的策略性能测试及参数优化有很多的测试项目与计算结果,并非每一个交易者都会用到其全部的数据,交易者只需选择自己所需的参考数据即可。
为方便交易者理解报告上各个数据的含义,现在将其计算公式整理如下:交易策略性能测试报告净利润:绝对值(总盈利金额 - 总亏损金额)(盈利为黑色数字,亏损为红色)总盈利:总交易盈利金额 - 手续费总亏损:绝对值(总交易亏损金额 - 手续费)显示为红色总盈利/总亏损:绝对值(总盈利 / 总亏损)交易手数:总的交易数量盈利比率:盈利手数 / 总交易手数盈利手数:盈利交易的总手数亏损手数:亏损交易的总手数持平手数:持平交易的总手数平均利润:净利润 / 交易手数平均盈利:总盈利金额 / 盈利交易手数平均亏损:总亏损金额 / 亏损交易手数(显示为红色)平均盈利/平均亏损:绝对值(平均盈利/平均亏损)最大盈利:盈利最大的单次交易的盈利金额最大亏损:绝对值(亏损最大的单次交易的亏损金额)最大盈利/总盈利:如字面所示最大亏损/总亏损:如字面所示净利润/最大亏损:如字面所示最大连续盈利手数:若将手数设为固定一手,则此手数也就是最大连续盈利次数大连续亏损手数:若将手数设为固定一手,则此手数也就是最大连续亏损次数平均持仓周期:总交易的bar的总数 / 交易次数平均盈利周期:总盈利交易的bar的总数 / 盈利交易次数平均亏损周期:总亏损交易的bar的总数 / 亏损交易次数平均持平周期:总持平交易的bar的总数 / 持平交易次数最大使用资金:以bar的收盘价来计算的最大持仓保证金(组合测试时为多个策略共同计算的最大使用资金量)佣金合计:总共的佣金金额收益率:净利润 / 初始资金年度收益率:有效收益率 / (总交易的天数 / 365)有效收益率:净利润 / 最大使用资金月度平均盈利:净利润 / 总交易的天数× 30.5收益曲线斜率:根据交易盈亏曲线拟合的趋势线的斜率收益曲线截距:根据交易盈亏曲线拟合的趋势线的截距收益曲线R平方值:根据交易盈亏曲线拟合的趋势线与收益曲线之间相关系数的平方(具体计算方式可查阅EXCLE表格中R平方值的算法)总交易时间:参与测试的全部bar数据的天数持仓时间比率:持仓BAR数量 / 总bar数量持仓时间:总交易时间 * 持仓时间比率最大空仓时间:没有持仓的天数持仓周期:持仓的BAR数量资产最大升水:最高点金额 - 前期低点的金额发生时间:高点发生的所在BAR的日期与时间最大升水/前期低点:如字面所示最大资产回撤值(按Bar收盘计算)回撤值:前期高点 - 低点发生时间:低点发生所在bar的日期与时间回撤值/前期高点:(前期高点 - 低点) / 前期高点净利润/回撤值:净利润 / 回撤值最大资产回撤值比例(按Bar收盘计算)回撤值:前期高点 - 低点发生时间:低点发生所在bar的日期与时间回撤值/前期高点:(前期高点 - 低点) / 前期高点净利润/回撤值:净利润 / 回撤值注意:上述两个回撤的区别在于,前者是按回撤金额的最大值来计算,而后者是按回撤比例的最大值来计算的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
KCS版本1(2)
If(MarketPosition!=1 && High >= UpperBand) { MyPrice = UpperBand; If(Open > MyPrice) MyPrice = Open; Buy(1,MyPrice); Return; } If(MarketPosition!=-1 && Low <= LowerBand) { MyPrice = LowerBand; If(Open < MyPrice) MyPrice = Open; SellShort(1,MyPrice); Return; } End
易系统。 由价格均线和ATR形成通道,当价格突破 通道产生入场讯号。
Keltner Channelቤተ መጻሕፍቲ ባይዱ理
肯特纳通道(KC)是一个移动平均通道,
由三条线组合而成(上轨、中线及下轨),若 价格突破边界,即表示出现开仓机会。 肯特纳通道是基于平均真实波幅原理而形 成的指标,对价格波动反应灵敏,基于KC 的系统可以实时开仓,不需要等待下一个 Bar。
以橡胶测试结果为例,从报表中我们看到,
最大回撤发生的日期是2006/7/18,我们仔 细查看交易记录和讯号,可以看到最大的 资金回撤是由于一次盈利平仓过慢,以及 两次假突破导致。 因此我们有必要增加一个跟踪止损的设置。 我们选择固定点数跟踪止损(吊灯止损)。
KCS_V3(2)
KCS_V3(3)
KCS_V3(4)
If(BarsSinceEntry == 1) { HigherAfterEntry = AvgEntryPrice; LowerAfterEntry = HigherAfterEntry; }Else If(BarsSinceEntry > 1) { HigherAfterEntry = Max(HigherAfterEntry[1],High[1]); LowerAfterEntry = Min(LowerAfterEntry[1],Low[1]); } Commentary("HigherAfterEntry="+Text(HigherAfterEntry)); Commentary("LowerAfterEntry="+Text(LowerAfterEntry));
KCS_V3(5)
If(MarketPosition==1) { If(Low <= HigherAfterEntry - TrailingStop*MinPoint) { MyPrice = HigherAfterEntry - TrailingStop*MinPoint; If(Open < MyPrice) MyPrice = Open; Sell(1,MyPrice); } }Else If(MarketPosition == -1) { If(High >= LowerAfterEntry + TrailingStop*MinPoint) { MyPrice = LowerAfterEntry + TrailingStop*MinPoint; If(Open > MyPrice) MyPrice = Open; BuyToCover(1,MyPrice); } }
KCS_V3(7)
KCS_V4(1)
重新入场规则:
做多时突破前期高点再次入场; 做空时突破前期低点再次入场。 为了实现重新入场,我们需要记录跟踪止 损的状态。 还需要记录最近的最高、最低点。
KCS_V4(2)
新增序列变量: BoolSeries bLongTrailingStoped; BoolSeries bShortTrailingStoped; 初始化: If(BarStatus > 0) { bLongTrailingStoped = bLongTrailingStoped[1]; bShortTrailingStoped = bShortTrailingStoped[1]; } Commentary("bLongTrailingStoped="+IIFString(bLongTrailingStope d,"True","False")); Commentary("bShortTrailingStoped="+IIFString(bShortTrailingStope d,"True","False"));
KCS_V3(6)
我们将编译后的系统重新运行,会看到净
利润上升了13295,最大资金回撤下降了 14575,改进的效果是非常明显的。 我们再回顾2006年7月的图表,KCSV3的 讯号如下图: 如图中红圈位置,在跟踪止损之后,价位 还在KC上轨之上,系统再次入场。 我们应该思考一种新的入场规则,在跟踪 止损或止损后再次入场。
常见的持仓交易系统
高低点突破系统(四周法则)
双均线系统(DualMA) 波动性突破系统(ATR) 布林通道突破系统(BOLL) 抛物线转向系统(SAR)
顾比倒数线系统(CBL)
Keltner Channel System
基于Keltner
Channel(肯特纳通道)的持仓交
KCS_V2(1)
KeltnerChannel的指标发明人是Chester
Keltner,最初的版本中线和ATR的参数都 是20,即我们现在看到的版本。 KC指标由琳达-拉什克(Linda Raschke)再 度优化改进,她采用10周期ATR值计算上 下轨. 因此我们将ATR的参数和MidLine的参数分 开;
Params Numeric Length(20); Numeric NumATRs(1); Vars NumericSeries TPrice; Numeric AvgValue; Numeric ShiftValue; Numeric UpperBand; Numeric LowerBand; Begin TPrice = (High+Low+Close)/3; AvgValue = AverageFC(TPrice,Length); ShiftValue = NumATRs*AvgTrueRange(Length); UpperBand = AvgValue + ShiftValue; LowerBand = AvgValue - ShiftValue; PlotNumeric("UpperBand",UpperBand); PlotNumeric("LowerBand",LowerBand); PlotNumeric("MidLine",AvgValue); End
止损幅度也超过5%,因此,程序中没有涨 跌停板的控制。如果出现不利的涨跌停, 可以考虑手工处理。 迁仓:对于现货升水的合约,做多的头寸 尽量晚一点,做空的头寸尽量早一点。现 货贴水的合约反之。
KCS 版本1(1)
Params Numeric Length(20); Numeric NumATRs(1); Vars NumericSeries TPrice; Numeric AvgValue; NumericSeries ShiftValue; Numeric UpperBand; Numeric LowerBand; Numeric MyPrice; Begin TPrice = (High[1]+Low[1]+Close[1])/3; AvgValue = AverageFC(TPrice,Length); ShiftValue = NumATRs*AvgTrueRange(Length); UpperBand = AvgValue + ShiftValue[1]; LowerBand = AvgValue - ShiftValue[1];
KCS_V4(4)
修改之后的系统测试结果没有明显的变化,
但是这次修改去掉了明显不合理的入场, 对于系统的连续性和稳健性有了一定的提 升。 前面我们使用了固定400点的跟踪止损,在 整个测试周期里面,橡胶价格最高接近3万, 最低6600。所以使用固定的点数明显不合 理,因此我们决定采取根据当前价格的某 个比值进行吊灯跟踪止损。
Keltner Channel算法
中线
= Typical Price 的 N 周期平均值; Typical Price =(High+Low+Close)/3; 上轨 = 中线 + 通道; 通道 = NumATRs * 平均真实波幅。
Keltner Channel指标
KCS_V1测试结果汇总
商品 a9000 m9000 al000 cu000 ru000 净利润 46750 45110 82630 520866 291770 最大回撤 -11180 -10070 -24700 -116903 -41755 交易次数 99 96 91 104 89 盈利比率 38.38% 39.80% 36.26% 37.50% 50.56% 连续亏损 7 8 11 6 4
KCS_V5
将原来的TrailingStop修改为百分比值。
取前一Bar的中线值的百分比值为跟踪止损
值。 我们也可以取当前Bar的Open,或者开仓 价,或者昨收等很多固定的价格作为参照。 代码修改很简单,只需要替换固定止损值 的算法即可。
实战要注意的问题