期货日内程序化交易模型-西部汇市官方


程序化托管服务器    程序化软件下载    登陆会员中心    支付中心

股指期货 股票模型 期货模型 期货实战 量化投资 期货分析
西部汇市 程序化交易 TB交易模型 文华模型 编程培训 理财产品 日内交易 现货交易 指标公式 程序化教学 关于我们
股指交易系统

TB公式基础之用户函数

栏目:开拓者TB教学 来源:TradeBlazer使用指南 最后更新时间:2018/12/11 8:33:42

开拓者TB编程培训视频教程

    用户函数是可以通过名称进行调用的一组语句的集合,用户函数返回一个值,这个值可以是Numeric,Bool,String三种类型中的任何一种。您可以在需要的任何地方调用用户函数来完成相应的功能。-西部汇市整理

    例如,在TradeBlazer公式中经常使用的一个用户函数Summation,Summation通过输入Price序列数据,以及Length统计周期数,计算Price最近Length周期的和,每次用户需要进行求和计算的时候,都可以调用Summation代替冗长的求和代码,输入参数并获取返回值。

    Summation是TradeBlazer公式中一个比较简单的用户函数,TradeBlazer公式提供了上百个内建用户函数,当然,您也可以编写您自己的用户函数。

用户函数通过参数传递输入数据,通过引用参数或返回值传递输出数据,以上例子中的Summation函数,在被调用的时候格式如下:

Value1 = Summation(Close,10);

在调用Summation的时候,需要根据定义时候的参数列表和顺序,输入相应的输入参数,有默认值的参数可以省略输入参数。

用户函数在交易开拓者中使用有如下规则:

支持九种类型的参数定义,支持指定参数默认值;

支持使用引用参数,可通过引用参数返回多个数据;

支持六种类型的变量定义,支持指定变量的默认值;

可以访问Data0-Data49个数据源的Bar数据;

可以访问行情数据、属性数据;

必须通过Return返回数据,返回数据类型为三种基本类型之一;

脚本中的返回数据类型必须和属性界面设置中一致;

用户函数之间可以相互调用,用户函数自身也可以递归调用;

用户函数可以调用所有的系统函数,包括交易动作和技术分析输出。

用户函数的类型
    用户函数按照返回值类型不同可以分为数值型(Numeric),布尔型(Bool),字符串(String)三种基本类型,三种类型用户函数在调用时需要将返回值赋予类型相同的变量。

    按照用户函数属性不同,用户函数可以分为内建用户函数和其他用户函数两种,内建用户函数是交易开拓者提供的,用于支持公式系统运行的预置公式,您可以查看和调用内建用户函数,但是不能删除和修改内建公式。

    按照用户函数的实现机制不同,用户函数可分为普通函数和序列函数。普通函数和其他语言的函数类似,输入参数,执行一段程序代码,返回需要的值。序列函数是输入参数或变量中有序列数据类型的用户函数。

序列函数
    序列函数是一种特殊的用户函数,当它的参数或变量中使用了序列数据,我们就称之为序列函数,序列数据作为普通计算机语言和TB语言的重要区别,是进行金融序列数据计算的核心。为了保证序列数据的正确计算,序列函数需要每个Bar都被调用,如果有些Bar没有调用序列函数,序列函数中的序列数据则是上一个Bar的值。除非是您的算法需要,否则建议不要在条件语句,条件语句的判断表达式,循环语句中使用序列函数。

使用内建用户函数
    TradeBlazer公式中提供上百个内建用户函数,一部分用户函数提供类似于求和,求平均,求线性回归等算法方面的功能,另外一些函数提供技术分析的一些算法,比如:AvgTrueRange,Momentum等,这些用户函数用户辅助完成技术分析。

    在创建自己的技术分析和交易系统时,如果需要自己写一些算法,您可以首先在用户函数中查找是否有相应的内建用户函数,尽可能的多使用内建用户函数,减少出错的可能。您也可以编写自己的算法,以供在技术分析和交易系统中使用。

用户函数的参数
   大部分用户函数都需要接受输入的信息进行计算,这些输入的信息,我们称之为参数。关于用户函数参数的使用详细说明参见参数。

如何编写用户函数
一个用户函数由三部分组成,参数定义,变量定义,脚本正文。

语法如下:

Params
参数定义语句;
Vars
变量定义语句;
Begin
脚本正文;
End

参数定义和变量定义部分在前面已经详细叙述过,脚本的正文部分将输入参数进行计算,得出函数的返回值,并通过Return返回。

例如,我们以Average为例,Average计算Price在Length周期内的平均值。Average调用Summation求和,并计算平均值,然后返回结果,脚本如下:

Params
NumericSeries Price(1);
Numeric Length(10);
Vars
Numeric AvgValue;
Begin
AvgValue = Summation(Price, Length) / Length;
Return AvgValue;
End

对于使用多个输出的情况,即使用引用参数的情况,我们以求N周期最大值为例进行描述,假定我们需要编写一个用户函数,该函数需要求出序列变量Price在最近Length周期内的最大值,并且要求出最大值出现的Bar和当前Bar的偏移值。脚本如下:

Params
NumericSeries Price(1);
Numeric Length(10);
NumericRef HighestBar;
Vars
Numeric MyVal;
Numeric MyBar;
Numeric i;
Begin
MyVal = Price;
MyBar = 0;
For i = 1 to Length - 1
{
If ( Price[i] > MyVal)
{
MyVal = Price[i];
MyBar = i;
}
}
HighestBar = MyBar;
Return MyVal;
End

用户函数的调用
用户函数成功创建之后(编译/保存成功),您可以在其他的用户函数、公式应用中调用用户函数,调用用户函数时需要注意保持参数类型的匹配,即用户函数参数的声明数据类型需和调用时传入参数的数据匹配,这是所指的匹配是指基本数据类型:数值型,布尔型,字符串三种类型匹配,并且保持序列参数和传入变量类型的对应。我们可以对用户函数定义为Numeric或者NumericRef的参数使用Numeric类型的变量作为传入参数;但不能将在定义为NumericRef类型的参数时传入NumericSeries。具体的对应关系如下表:


函数参数声明类型 可传入的变量类型
Numeric Numeric,NumericRef,NumericSeries
NumericRef Numeric,NumericRef
NumericSeries Numeric,NumericRef,NumericSeries
Bool Bool,BoolRef,BoolSeries
BoolRef Bool,BoolRef
BoolSeries Bool,BoolRef,BoolSeries
String String,StringRef,StringSeries
StringRef String,StringRef
StringSeries String,StringRef,StringSeries

对于函数的返回值,您也可以将用户函数的Numeric返回值赋值给NumericSeries或NumericRef变量。即在用户函数的返回值使用时,忽略其扩展数据类型。比如我们在调用Average求平均值时,可以这样调用:

Vars
Numeric Value1;
Begin
Value1 = Average(Close,10);
...
End

我们也可以按照以下方式进行调用:

Vars
NumericSeries Value1;
Begin
Value1 = Average(CloseTmp,10);
...
End

A用户函数调用自身,我们称之为直接递归;A用户函数可以调用B用户函数,同时B用户函数也可以调用A用户函数,对于这种的情况,我们称之为间接递归;

不管是直接递归还是间接递归,用户函数在执行的时候,都可能遇到递归调用没有出口,导致死循环的情况。因此,我们在编写公式的时候,要注意避免使用递归算法,如果一定需要使用递归算法,要注意保证递归算法都有出口。-西部汇市整理

用默认参数调用用户函数
用户函数在被调用的时候,如果传入的参数和参数的默认值一样,可以省略输出参数,使用默认值来调用用户参数。只能够对排列在后面的那些参数使用默认参数,默认参数的定义参见参数。

相关内容: 1、新建应用公式[视频教学]         TB公式报警功能                     TB公式中的保留字

           TB程序中的表达式                  TB公式及模型中参数的使用           TB交易策略参数优化的方法

量化交易系统,用户函数,自 西汇1号股指期货组合投资,已建立的函数分类,T 程序化托管服务,函数分类,TB用户
[最新教学内容]期货教学-用户函数  
股票市场中庄家出货的特征 白银期货投资需避免这四种错误 期货炒单日内交易技巧
什么是股指期权权利交易 券商高管出任证监会主席的重要性 教你六招投资理财的方式方法
把握期货机会别痴心妄想做全能交易者 炒期货不能逆势操作、更不能重仓扛单 富时中国A50指数大涨纳入宁德时代
[最新期货咨讯]期货行情-,自已建立的函数
沪铜价格反弹仍待宏观面的改善 人民币国际化进程正在加快推进 OPEC减产在即、原油暂停上涨势头
沪胶反弹提振天然橡胶现货报盘小涨 需求改善库存去化、甲醇期货迎来反弹 吉汇率走强对棕榈油价格构成压力

相关期市专题内容:

[最新实战结果]期货实战-立的函数分类,TB用户
炒期货如何才能让投资者更好的盈利 [IF]股指停止熔断后再次大获 [IF]11月股指波动加大变高收益
  期货量化投资教学

文华程序化编程培训教学推出(新)

开拓者TB编程培训教学(免费视频)

双均线交易系统公式源码

期货交易滑点的处理方法

期货稳定盈利模式的建立

期货震荡行情的应对策略

期货投资/投资分析与盈利方案

  最新期货程序化交易模型

股指期货交易系统[封神2号]

股指程序化交易模型[分析家]

商品期货趋势交易系统[领航者]

商品期货波段交易系统[波段王]

期货主力资金流向分析系统[新]
日内交易系统
文华财经指标公式下载[免费]

博易大师指标公式下载[免费]

  相关专题内容

豆粕厂库交割、转现制度

分时线图最佳卖点、收盘线阻挡

市场重心缓慢上移二季度投资机会

军民融合发展军工股不可忽视

虚拟现实抢尽风头A股市场VR概念投资机会

  期货交易技术分析

TB开拓者使用教程

影响期货价格波动的因素解析

期货投资交易基础知识

期权交易之期仅交易指令

关于期货合约的选择

胶合板  焦炭 豆油 沪铝 股指 动煤
期货理财管理

联系方式:

常务电话:029-86357984

咨询电话:13619150813

技术支持:18966736851

  46416815    1356107194

更多:期货技术分析 期货教学 期货理财 开拓者TB教学 期货学习 股票程序化 资产管理

版权所有@西部汇市 推荐:期货行情 程序化交易 免责:投资有风险,本站内容仅供参考!
通讯地址:西安市矿山路东方罗马花园12F2406# 邮编:710032 陕ICP备09010752号