设为首页收藏本站

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

请教管理员 [复制链接]

Rank: 3Rank: 3

精华
0
UID
62557
积分
124
帖子
27
主题
8
阅读权限
40
注册时间
2011-8-31
最后登录
2017-1-10
跳转到指定楼层
1#
发表于 2011-9-16 14:22:02 |只看该作者 |倒序浏览
同样一句语句,在不同的地方居然算出不同的值,这究竟是为什么?

Params
    Numeric                 Length1(10);        //短期均线的周期
    Numeric                 Length2(20);        //长期均线的周期
        Numeric                        ATRLength(100);        //ATR周期,用于计算开仓数量和止损位置。
Vars
        NumericSeries         MA1;                        //短期均线当前的值
        NumericSeries         MA2;                        //长期均线当前的值
        NumericSeries        PreEntryPrice(0);        //止损后,记录止损前的开仓价。
        NumericSeries        PreEntryPrice2(0);
        NumericSeries        DebugNumber;
        Numeric                        OpenShares(0);
Begin
        MA1 = AverageFC(Close,Length1);
        MA2 = AverageFC(Close,Length2);
        PlotNumeric("MA1",MA1);
        PlotNumeric("MA2",MA2);
        PlotNumeric("PreEntryPrice",PreEntryPrice);
        //PlotNumeric("currentbar",currentbar);
        Commentary("currentbar="+Text(currentbar));

        DebugNumber = 0;
        if(CurrentBar == (Max(Max(Length1,Length2),ATRLength))-2)
        //If(currentbar == 0)
        {
                PreEntryPrice = 0;
        }
        if((MA1!=InvalidNumeric) && (MA2!=InvalidNumeric))
        {
                if(MarketPosition == 0) // 目前还没有持仓,检查是否有交叉开仓,是否有之前止损的续开。
                {
                        DebugNumber = 6;
                        if(CrossOver(MA1,MA2))
                        {
                                DebugNumber = 1;
                                OpenShares = OpenShare(1,ATRLength,1);
                                Buy(OpenShares,Close);
                                PreEntryPrice = EntryPrice;
                        }
                        else if(CrossOver(MA2,MA1))
                        {
                                DebugNumber = 2;
                                OpenShares = OpenShare(1,ATRLength,1);
                                SellShort(OpenShares,Close);
                                PreEntryPrice = EntryPrice;
                        }
                        else if((MA1>MA2) && (Close>PreEntryPrice) && (PreEntryPrice!=0)) // 多头市场并收盘价大于止损前开仓的价格
                        {
                                DebugNumber = 3;
                                OpenShares = OpenShare(1,ATRLength,1);
                                Buy(OpenShares,Close);
                                PreEntryPrice = EntryPrice;
                        }
                        else If((MA1<MA2) && (Close<PreEntryPrice) && (PreEntryPrice!=0))        // 空头市场并收盘价小于止损前开仓的价格
                        {
                                DebugNumber = 4;
                                OpenShares = OpenShare(1,ATRLength,1);
                                SellShort(OpenShares,Close);
                                PreEntryPrice = EntryPrice;                                               
                        }
                }
                else if(MarketPosition == 1) // 目前持有多单,检查是否要止损,是否要反手
                {
                        DebugNumber = 7;
                        if(CrossOver(MA2,MA1))
                        {
                                OpenShares = OpenShare(1,ATRLength,1);
                                SellShort(OpenShares,Close);       
                                PreEntryPrice = EntryPrice;
                        }
                        else
                        {
                                Commentary("1ATRLength="+Text(ATRLength));
                                Commentary("1TrueRange="+Text(TrueRange));
                                Commentary("1ATR="+Text(Average(TrueRange,ATRLength)));
                                StopLoss(EntryPrice,Average(TrueRange,ATRLength));
                        }
                               
                }
                else if(MarketPosition == -1) // 目前持有空单,检查是否要止损,是否要反手
                {
                        DebugNumber = 8;
                        if(CrossOver(MA1,MA2))
                        {
                                OpenShares = OpenShare(1,ATRLength,1);
                                Buy(OpenShares,Close);       
                                PreEntryPrice = EntryPrice;
                        }
                        else
                        {
                                Commentary("1ATRLength="+Text(ATRLength));
                                Commentary("1TrueRange="+Text(TrueRange));
                                Commentary("1ATR="+Text(Average(TrueRange,ATRLength)));
                                StopLoss(EntryPrice,Average(TrueRange,ATRLength));                       
                        }
                }
                Commentary("PreEntryPrice="+Text(PreEntryPrice));
                Commentary("MarketPosition="+Text(MarketPosition));
                Commentary("DebugNumber="+Text(DebugNumber));
                //Commentary("OpenShares="+Text(OpenShares));
                Commentary("2ATRLength="+Text(ATRLength));
                Commentary("2TrueRange="+Text(TrueRange));
                Commentary("2ATR="+Text(Average(TrueRange,ATRLength)));
        }
End

附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20906
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
2#
发表于 2011-9-16 14:40:28 |只看该作者
回复 1# runcai


Average需要放在if-else外面计算的,最后2ATR的average计算出来才是正确的。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
62557
积分
124
帖子
27
主题
8
阅读权限
40
注册时间
2011-8-31
最后登录
2017-1-10
3#
发表于 2011-9-16 14:46:13 |只看该作者
是不是在if - else 里面计算average的时候有些值没算进去?

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
85182
积分
849
帖子
302
主题
11
阅读权限
60
注册时间
2011-12-8
最后登录
2013-10-28
4#
发表于 2011-12-10 10:38:32 |只看该作者
为什么还是这一个模型重复啊?
http://qpic.cn/NifLLplMk若能一切随它去,便世间自在人。
      ---Derivatives

使用道具 举报

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

bottom

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

GMT+8, 2024-5-19 08:16

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部