设为首页收藏本站

 找回密码
 注册
查看: 7323|回复: 16
打印 上一主题 下一主题

自编函数中遇到一个问题,请指教: [复制链接]

Rank: 5Rank: 5

精华
0
UID
314
积分
1160
帖子
247
主题
105
阅读权限
60
注册时间
2007-9-9
最后登录
2008-3-3
跳转到指定楼层
1#
发表于 2007-12-15 18:38:38 |只看该作者 |倒序浏览
我先编写了一个“用户函数”,然后编写一个“技术指标”,在“技术指标”中调用这个“用户函数”,可是编译的时候说:”最终目标文件编译错误!“,不知是何缘故,请指教,代码如下:

用户函数代码:
//------------------------------------------------------------------------
// 简称: MY_HS_EMA
// 名称: 自创EMA函数
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------

Params
    NumericSeries Price(1);
        Numeric Length(10);
Vars
        NumericSeries MyEma(1);
Begin
MyEma=(2*Price+(Length-1)*MyEma[Length-1])/(Length+1);
Return MyEma;
End


//------------------------------------------------------------------------
// 编译版本        GS2004.06.12
// 用户版本        2007/12/15 16:48
// 版权所有        wg3k99
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

技术指标代码:

//------------------------------------------------------------------------
// 简称: MY_ZB_MACD_2
// 名称: 自创MACD指标(2)
// 类别: 技术指标
// 类型: 移动平均类
// 输出:
//------------------------------------------------------------------------
Params
Numeric Long(1);
Numeric Short(1);
Numeric M(1);
Vars
NumericSeries Diff(1);
NumericSeries Dea(1);
NumericSeries MacdDiff(1);
Begin
Diff=MY_HS_EMA(Close,Short)-MY_HS_EMA(Close,Long);
Dea=MY_HS_EMA(Diff,M);
MacdDiff=2*(Diff-Dea);
PlotNumeric("DIFF",Diff,White);
PlotNumeric("Dea",Dea,Yellow);
If (MACDDiff >= 0)
  PlotNumeric("MACDDiff",MACDDiff,Red);
Else
  PlotNumeric("MACDDiff",MACDDiff,rgb(000,255,255));
PlotNumeric("零线",0,rgb(000,255,255));
End

//------------------------------------------------------------------------
// 编译版本 GS2004.06.12
// 用户版本 2007/12/15 18:08
// 版权所有 wg3k99
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
//   每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
欢迎加入交易开拓者QQ群:38529330,让我们一起交流,一起提高,一起赚钱吧。。。

Rank: 10Rank: 10Rank: 10

精华
11
UID
1
积分
25127
帖子
6291
主题
149
阅读权限
255
注册时间
2007-7-20
最后登录
2024-4-22
2#
发表于 2007-12-15 21:37:01 |只看该作者
My_EMA函数写法应该是有问题,你的算法需要在CurrentBar < Length时进行初始的处理
交易开拓者 - 期货程序化与量化系统自动交易领航者

网站已支持在线开通模拟账户功能

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
1
UID
387
积分
2724
帖子
167
主题
33
阅读权限
80
注册时间
2007-9-21
最后登录
2020-2-24
3#
发表于 2007-12-15 22:08:29 |只看该作者
原帖由 wg3k99 于 2007-12-15 18:38 发表
我先编写了一个“用户函数”,然后编写一个“技术指标”,在“技术指标”中调用这个“用户函数”,可是编译的时候说:”最终目标文件编译错误!“,不知是何缘故,请指教,代码如下:

用户函数代码:
//------------------------------- ...


给周期命名错误,修改如下:
Params
     Numeric Length(1);
     Numeric Length1(1);
     Numeric M(1);
Vars
     NumericSeries Diff(1);
     NumericSeries Dea(1);
     NumericSeries MacdDiff(1);
Begin
     Diff=MY_HS_EMA(Close,Length)-MY_HS_EMA(Close,Length1);
     Dea=MY_HS_EMA(Diff,M);
     MacdDiff=2*(Diff-Dea);
     PlotNumeric("DIFF",Diff,White);
     PlotNumeric("Dea",Dea,Yellow);
     If (MACDDiff >= 0)
     PlotNumeric("MACDDiff",MACDDiff,Red);
     Else
     PlotNumeric("MACDDiff",MACDDiff,rgb(000,255,255));
     PlotNumeric("零线",0,rgb(000,255,255));
End

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
314
积分
1160
帖子
247
主题
105
阅读权限
60
注册时间
2007-9-9
最后登录
2008-3-3
4#
发表于 2007-12-15 22:26:55 |只看该作者
原帖由 tradeblazer 于 2007-12-15 21:37 发表
My_EMA函数写法应该是有问题,你的算法需要在CurrentBar < Length时进行初始的处理



老大,帮忙调试一下啊,。。。。
欢迎加入交易开拓者QQ群:38529330,让我们一起交流,一起提高,一起赚钱吧。。。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
314
积分
1160
帖子
247
主题
105
阅读权限
60
注册时间
2007-9-9
最后登录
2008-3-3
5#
发表于 2007-12-15 22:57:17 |只看该作者
改了“用户函数”好“技术指标”中的参数和变量名称后,编译通过,可是无法在“超级图标”中调用,调用结果,一直显示不出来。。。
欢迎加入交易开拓者QQ群:38529330,让我们一起交流,一起提高,一起赚钱吧。。。

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
1
UID
727
积分
3770
帖子
537
主题
55
阅读权限
80
注册时间
2007-11-11
最后登录
2015-4-8
6#
发表于 2007-12-16 09:35:25 |只看该作者
  1. Params
  2.     NumericSeries Price(1);
  3.         Numeric Length(1);
  4. Vars
  5.         NumericSeries MyEma;
  6. Begin
  7. if(currentbar>=length-1)
  8. {
  9. MyEma=(2*Price+(Length-1)*MyEma[Length-1])/(Length+1);
  10. }else
  11. {
  12. MyEma=invalidnumeric;
  13. }
  14. End
复制代码
TradeBlazer交流群33647992。

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
1
UID
727
积分
3770
帖子
537
主题
55
阅读权限
80
注册时间
2007-11-11
最后登录
2015-4-8
7#
发表于 2007-12-16 09:37:00 |只看该作者
  1. Params
  2.     NumericSeries Price(1);
  3.         Numeric Length(1);
  4. Vars
  5.         NumericSeries MyEma;
  6. Begin
  7. if(currentbar>=length-1)
  8. {
  9. MyEma=(2*Price+(Length-1)*MyEma[Length-1])/(Length+1);
  10. }else
  11. {
  12. MyEma=invalidnumeric;
  13. }
  14. return MyEma;
  15. End
复制代码

忘了return.
TradeBlazer交流群33647992。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
11
UID
1
积分
25127
帖子
6291
主题
149
阅读权限
255
注册时间
2007-7-20
最后登录
2024-4-22
8#
发表于 2007-12-16 10:08:44 |只看该作者
楼上的写法应该还是有问题的。不能初始化为无效值,否则所有数据都无效。
第一个有效的位置需要自行按EMA算法计算,第二个才开始引用Ema[1]进行快速计算
交易开拓者 - 期货程序化与量化系统自动交易领航者

网站已支持在线开通模拟账户功能

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
1
UID
727
积分
3770
帖子
537
主题
55
阅读权限
80
注册时间
2007-11-11
最后登录
2015-4-8
9#
发表于 2007-12-16 11:20:51 |只看该作者
  1. Params
  2.     NumericSeries Price(1);
  3.         Numeric Length(1);
  4.   numeric iniEma(1);
  5. Vars
  6.         NumericSeries MyEma;
  7. Begin
  8. if(currentbar=length-1)
  9. {
  10. MyEma=iniEma;
  11. }
  12. else if(currentbar>length-1)
  13. {
  14. MyEma=(2*Price+(Length-1)*MyEma[Length-1])/(Length+1);
  15. }else
  16. {
  17. MyEma=invalidnumeric;
  18. }
  19. return MyEma;
  20. End
复制代码

iniEma用笔算或靠估计,大概是多少就填多少.
TradeBlazer交流群33647992。

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
1
UID
387
积分
2724
帖子
167
主题
33
阅读权限
80
注册时间
2007-9-21
最后登录
2020-2-24
10#
发表于 2007-12-16 11:23:44 |只看该作者
原帖由 wg3k99 于 2007-12-15 18:38 发表
我先编写了一个“用户函数”,然后编写一个“技术指标”,在“技术指标”中调用这个“用户函数”,可是编译的时候说:”最终目标文件编译错误!“,不知是何缘故,请指教,代码如下:

用户函数代码:
//------------------------------- ...


请提供编函数的想法,否则没法进一步修改

使用道具 举报

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

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-2 18:41

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部