设为首页收藏本站

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

请教老师,关于交易开拓者书上公式的问题 [复制链接]

Rank: 1

精华
0
UID
242082
积分
2
帖子
1
主题
1
阅读权限
10
注册时间
2016-10-23
最后登录
2016-11-10
跳转到指定楼层
1#
发表于 2016-10-30 21:22:26 |只看该作者 |倒序浏览
我是在看交易开拓者的程序化交易这本书,在学习基于均线交叉与通道突破相结合的交易系统这个公式时,有些点不明白想请教老师,我是新手,不好意思
// 简称: CL_MovingAverageCrossOver_L
// 名称: 基于均线交叉的通道突破系统多
// 类别: 公式应用
// 类型: 内建应用
// 输出:
//------------------------------------------------------------------------

//----------------------------------------------------------------------//
// 策略说明:
//                         本策略是基于均线交叉与通道突破相结合的交易系统
//                         
// 系统要素:
//                         1. 以快速均线与慢速均线的交叉初步判断趋势
//                         2. 均线交叉后以最近几根K线的高低点加上一定幅度设定为突破通道
//                         3. 均线交叉后一定K线根数内突破通道则趋势有效,否则等待下次趋势
// 入场条件:
//                         1. 当价格向上突破通道时做多
//                         2. 当价格向下突破通道时做空
// 出场条件:
//                         1. 趋势反转突破时平仓
//                         2. 基于周期高低点的跟踪止损
// 再入场条件:
//                         1. 未发生趋势反转
//                         2. 跟踪止损后一定K线根数内突破止损时N根K线的高低点时再进场
//
//                 注: 当前策略仅为做多系统, 如需做空, 请参见CL_MovingAverageCrossOver_S
//----------------------------------------------------------------------//

Params
        Numeric FastLen(9);                                // 快速均线周期数
        Numeric SlowLen(18);                        // 慢速均线周期数
        Numeric ChLen(12);                                // 通道突破的周期数
        Numeric ExtraPercentage(300);        // 通道突破的幅度(万分比),如:300 = 3%
        Numeric TrailBar(8);                        // 多少根BAR的最低价作为跟踪止损价
        Numeric InitialLots(0);                        // 初始进场头寸
        Numeric ReBars(15);                                // 再进场必须在出场后多少根BAR内
        Numeric ReEntryChLen(10);                // 再进场通道突破的周期数
        Numeric ReEntryLots(0);                        // 再进场头寸
       
Vars
        NumericSeries FastMA;                        // 快速均线
        NumericSeries SlowMA;                        // 慢速均线
        Bool ConCrossOver;                                // 是否金叉(快速均线上穿慢速均线)
        Bool ConCrossUnder;                                // 是否死叉(快速均线下穿慢速均线)
        Numeric HH;                                                // 最近N根BAR的高点
        Numeric LL;                                                // 最近N根BAR的低点
        NumericSeries LEntryPrice;                // 开多的突破价
        NumericSeries SEntryPrice;                // 开空的突破价
        NumericSeries LCount;                        // 均线金叉后记录BAR序号
        NumericSeries SCount;                        // 均线死叉后记录BAR序号
        NumericSeries TrailStopPrice;        // 跟踪止损的止损价
        NumericSeries ReEntryPrice;                // 再进场突破开仓的价格
        NumericSeries ReEntryCount;                // 跟踪止损后记录BAR序号

Begin

        // 集合竞价和小节休息过滤
        If(!CallAuctionFilter()) Return;
       
        // 计算均线
        FastMA = Average(Close, FastLen);
        SlowMA = Average(Close, SlowLen);
        PlotNumeric("FastMA",FastMA);
        PlotNumeric("SlowMA",SlowMA);

        // 判断均线是否金叉
        ConCrossOver = CrossOver(FastMA,SlowMA);
       
        // 金叉发生时记录最近Chlen根Bar的高点加上ExtraPercentage%作为开多突破价
        HH = Highest(High,ChLen);
        If(ConCrossOver And CurrentBar >= ChLen-1)
        {
                LEntryPrice = HH * (1 + ExtraPercentage * 0.0001);

                // 记录BAR序号以控制只在金叉后Chlen根BAR内进场否则放弃本次交易
                LCount = CurrentBar;
        }
       
        // 开仓
        If(MarketPosition == 0 And CurrentBar > LCount And CurrentBar <= LCount + Chlen And High >= LEntryPrice And Vol > 0)
        {
                Buy(InitialLots, Max(Open,LEntryPrice));
                Commentary("初次多");
               
                // 修改LCount值以保证每次金叉后只初始进场一次
                LCount = -999;

以下是问题:

        If(ConCrossOver And CurrentBar >= ChLen-1)看到这我的理解是如果满足条件:
金叉并且金叉据当前BAR的时间为11天?是这个意思吗?
        {
                LEntryPrice = HH * (1 + ExtraPercentage * 0.0001); 这里的ExtraPercentage * 0.0001是想表达3%的意思。那为什么要用ExtraPercentage (300)* 0.0001来表达3%呢?没明白,直接写LEntryPrice = HH * (1 +3%);不可以吗?

// 开仓
        If(MarketPosition == 0 And CurrentBar > LCount And CurrentBar <= LCount + Chlen And High >= LEntryPrice And Vol > 0)这里开仓条件,我也看晕了,,,,能不能劳烦老师帮我解答一下这句条件的意思,谢谢了

Rank: 1

精华
0
UID
235493
积分
2
帖子
2
主题
0
阅读权限
10
注册时间
2016-5-29
最后登录
2020-1-29
2#
发表于 2017-3-27 10:06:05 |只看该作者
本帖最后由 gaoxuetai 于 2017-3-27 10:13 编辑

同问,我也是在这个地方看晕
我觉得 currentbar<=chlen-1 比较合适
话说书中错的地方很多

使用道具 举报

Rank: 1

精华
0
UID
276454
积分
17
帖子
12
主题
5
阅读权限
10
注册时间
2019-3-6
最后登录
2019-10-10
3#
发表于 2019-3-12 17:15:59 |只看该作者
CurrentBar >= ChLen-1  这个判断语句无法理解

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
4#
发表于 2019-3-12 17:31:35 |只看该作者
本帖最后由 小米 于 2019-3-13 09:01 编辑
chinawnv9 发表于 2019-3-12 17:15

这里想要表达的是,当处于图表最起始的那11根K线时,这部分K线样本不足以计算我的12周期的通道。所以在此之前的K线,我不做判断。。
只有K线数大于等于12后,满足我计算通道的的样本数之后,才能确保其计算结果的准确性。这之后才开始判断。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-3 03:44

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部