设为首页收藏本站

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

根据卡夫曼自适应移动平均写的交易系统 [复制链接]

Rank: 8Rank: 8

精华
0
UID
2037
积分
5849
帖子
91
主题
28
阅读权限
100
注册时间
2008-7-31
最后登录
2019-4-1
跳转到指定楼层
1#
发表于 2008-12-15 16:37:40 |只看该作者 |倒序浏览
根据卡夫曼自适应移动平均思想写的简单的交易系统,但是测试下来,比普通两根均线交叉的交易系统的效果还差了一点。
请TB老师帮忙看看,非常感谢!
//------------------------------------------------------------------------
// 简称: AdaptiveMovAvg
// 名称: 自适应移动平均
// 类别: 交易指令
// 类型: 其他
// 输出:
//------------------------------------------------------------------------
Params
        Numeric        FilterSet(0.1);//过滤器偏移量
        Numeric        lots(1);
        Numeric        terms(10);//自适应计算周期
        Numeric        AMAOffSetPercent(0.55);//前后两日均线差值触发值百分比
Vars
        NumericSeries        AMAValue;
        Numeric        ExtHigh;//前高
        Numeric        ExtLow;//前低
        Numeric        filter;
        Numeric        AMAOffSet;
        Bool        LongEntryCon(false);
        Bool        ShortEntryCon(false);
Begin
        AMAValue = AdaptiveMovAvg(close,terms,2,30);
        if(close == AMAValue)
                return;       //如果bar个数小于计算周期,直接返回
        AMAOffSet=AvgPrice()*AMAOffSetPercent/100;       //取当前均价的0.0055作为均线触发值
        filter = StandardDev(AMAValue,20,2)*FilterSet;        //计算过滤器的值
        if(AMAValue>AMAValue[1]and AMAValue[1]<AMAValue[2])
                ExtLow = AMAValue[1];        //计算前低
        if(AMAValue<AMAValue[1]and AMAValue[1]>AMAValue[2])
                ExtHigh = AMAValue[1];       //计算前高
       

        if(AMAValue>AMAValue[1])   //如果今天的均线值大于昨天
        {
                if(ExtLow!=0)    //如果前低不为零
                {
                               if((AMAValue - ExtLow)>filter)     //将均线值减去最低值,看是否大于过滤器
                                LongEntryCon = true;
                }Else
                {
                        if((AMAValue-AMAValue[1])>AMAOffSet )   //如果前低为零,即没有产生前低,则直接比较两日的均线值是否大于触发值
                                        LongEntryCon = true;
                }
        }
               
        if(AMAValue<AMAValue[1])
        {
                if(ExtHigh!=0)
                {
                        if((AMAValue - ExtHigh)>filter)
                                ShortEntryCon = true;
                }Else
                {
                        f((AMAValue[1]-AMAValue)>AMAOffSet )
                                ShortEntryCon = true;
                }
        }
        Commentary("AMA:"+TEXT(AMAValue));
        Commentary("filter:"+TEXT(filter));
        Commentary("ExtLow:"+TEXT(ExtLow));
        Commentary("ExtHigh:"+TEXT(ExtHigh));
        Commentary("LongCon:"+IIFString(LongEntryCon,"true","false"));
        Commentary("ShortCon:"+IIFString(ShortEntryCon,"true","false"));
        Commentary("AMAOffSet:"+text(AMAOffSet));

        if(MarketPosition !=1 and LongEntryCon)
                buy(lots,NextOpen);
        if(MarketPosition !=-1 and ShortEntryCon)
                SellShort(lots,NextOpen);
end

//------------------------------------------------------------------------
// 编译版本        GS2004.06.12
// 用户版本        2008/12/06 15:39
// 版权所有        cf_38607
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
已有 1 人评分威望 收起 理由
一个人行走 + 1 赞一个!

总评分: 威望 + 1   查看全部评分

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
2#
发表于 2008-12-15 17:14:30 |只看该作者
公式没啥大问题,除了最后交易的函数,应该Delay。

至于效果方面,卡夫曼自适应移动平均也有一定的适应性。可能对某些品种就是不行。

使用道具 举报

Rank: 8Rank: 8

精华
0
UID
2037
积分
5849
帖子
91
主题
28
阅读权限
100
注册时间
2008-7-31
最后登录
2019-4-1
3#
发表于 2008-12-19 17:35:55 |只看该作者

回复 #2 nopain 的帖子

请教老大:
为什么delay?
怎么delay?
谢谢!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
4#
发表于 2008-12-19 20:35:31 |只看该作者
buy(lots,NextOpen,True); 替换 buy(lots,NextOpen);

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
427
积分
1600
帖子
175
主题
20
阅读权限
70
注册时间
2007-9-26
最后登录
2021-11-6
5#
发表于 2008-12-20 10:17:45 |只看该作者
校验编译时 怎么会提示此行缺少分号呢                                  ShortEntryCon = true;   ??

使用道具 举报

Rank: 4

精华
0
UID
2808
积分
458
帖子
39
主题
6
阅读权限
50
注册时间
2008-11-19
最后登录
2021-4-1
6#
发表于 2008-12-22 16:55:58 |只看该作者
是的,奇怪!怎么校验编译时55行会提示此行缺少分号呢?

使用道具 举报

Rank: 4

精华
0
UID
2808
积分
458
帖子
39
主题
6
阅读权限
50
注册时间
2008-11-19
最后登录
2021-4-1
7#
发表于 2008-12-22 17:49:35 |只看该作者
您好!
      我是一名新手,非常感谢你写出了“卡夫曼自适应移动平均写的交易系统”,你能再帮忙写出这个“自移动平均”的指标吗?谢谢!
      我的联系QQ是:1432200,希望你能帮帮我。谢谢!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
8#
发表于 2008-12-22 20:31:57 |只看该作者
系统里面有现成的。
AMA

使用道具 举报

Rank: 8Rank: 8

精华
0
UID
2037
积分
5849
帖子
91
主题
28
阅读权限
100
注册时间
2008-7-31
最后登录
2019-4-1
9#
发表于 2008-12-22 20:45:31 |只看该作者

回复 #5 nickchen 的帖子

可能是黏贴的时候出问题了。

使用道具 举报

Rank: 8Rank: 8

精华
0
UID
2037
积分
5849
帖子
91
主题
28
阅读权限
100
注册时间
2008-7-31
最后登录
2019-4-1
10#
发表于 2008-12-22 20:56:16 |只看该作者

回复 #7 wzmxw 的帖子

下面这段我是直接从系统里导出来的,应该能编译通过。这个系统很不完善的,仅仅做为对指标的测试而用的。
//------------------------------------------------------------------------
// 简称: adaptiveTest
// 名称: 自适应移动平均测试
// 类别: 交易指令
// 类型: 其他
// 输出:
//------------------------------------------------------------------------
Params
        Numeric        FilterSet(0.1);
        Numeric        lots(1);
        Numeric        terms(10);
        Numeric        AMAOffSetPercent(0.55);
Vars
        NumericSeries        AMAValue;
        Numeric        ExtHigh;
        Numeric        ExtLow;
        Numeric        filter;
        Numeric        AMAOffSet;
        Bool        LongEntryCon(false);
        Bool        ShortEntryCon(false);
Begin
        AMAValue = AdaptiveMovAvg(close,terms,2,30);
        if(close == AMAValue)
                return;
        AMAOffSet=AvgPrice()*AMAOffSetPercent/100;
        filter = StandardDev(AMAValue,20,2)*FilterSet;
        if(AMAValue>AMAValue[1]and AMAValue[1]<AMAValue[2])
                ExtLow = AMAValue[1];
        if(AMAValue<AMAValue[1]and AMAValue[1]>AMAValue[2])
                ExtHigh = AMAValue[1];
       
                if(AMAValue>AMAValue[1])
                {
                        if(ExtLow!=0)
                        {
                                if((AMAValue - ExtLow)>filter)
                                        LongEntryCon = true;
                        }Else
                        {
                                if((AMAValue-AMAValue[1])>AMAOffSet )
                                        LongEntryCon = true;
                        }
                }
               
                if(AMAValue<AMAValue[1])
                {
                        if(ExtHigh!=0)
                        {
                                if((AMAValue - ExtHigh)>filter)
                                        ShortEntryCon = true;
                        }Else
                        {
                                if((AMAValue[1]-AMAValue)>AMAOffSet )
                                        ShortEntryCon = true;
                        }
                }

        Commentary("AMA:"+TEXT(AMAValue));
        Commentary("filter:"+TEXT(filter));
        Commentary("ExtLow:"+TEXT(ExtLow));
        Commentary("ExtHigh:"+TEXT(ExtHigh));
        Commentary("LongCon:"+IIFString(LongEntryCon,"true","false"));
        Commentary("ShortCon:"+IIFString(ShortEntryCon,"true","false"));
        Commentary("AMAOffSet:"+text(AMAOffSet));

        if(MarketPosition !=1 and LongEntryCon)
                buy(lots,NextOpen,true);
        if(MarketPosition !=-1 and ShortEntryCon)
                SellShort(lots,NextOpen,true);
end

//------------------------------------------------------------------------
// 编译版本        GS2004.06.12
// 用户版本        2008/12/22 20:49
// 版权所有        cf_38607
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

使用道具 举报

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

bottom

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

GMT+8, 2024-5-12 14:03

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部