设为首页收藏本站

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

关于运行机制 [复制链接]

Rank: 3Rank: 3

精华
0
UID
62557
积分
124
帖子
27
主题
8
阅读权限
40
注册时间
2011-8-31
最后登录
2017-1-10
跳转到指定楼层
1#
发表于 2011-9-15 16:42:30 |只看该作者 |倒序浏览
请问是不是这样

如果公式中包含对历史BAR的计算时,需要调用多少个BAR的值,那么前面这些BAR公式不会计算。比如说,我要用到20日均线,那么前20个BAR是不会走公式。
因为在前20个BAR中,我用PlotNumeric语句打印的值全部显示N/A(如果是走公式的话,至少我打印的BARSTATUS会显示0或者1吧),用Commentary打印的值根本不显示。

Rank: 10Rank: 10Rank: 10

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


只有均线在这20个bar是无效值,其他正常显示。
例如你另外用commentary输出currentbar,在20个bar内会正常显示currentbar信息的。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
62557
积分
124
帖子
27
主题
8
阅读权限
40
注册时间
2011-8-31
最后登录
2017-1-10
3#
发表于 2011-9-15 20:20:33 |只看该作者
我输出currentbar也是N/A啊,下面是截图和程序,麻烦你看看错误在什么地方。


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);

        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("ATRATR="+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("ATRATR="+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("ATR="+Text(Average(TrueRange,ATRLength)));
        }
End
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
62557
积分
124
帖子
27
主题
8
阅读权限
40
注册时间
2011-8-31
最后登录
2017-1-10
4#
发表于 2011-9-16 12:51:02 |只看该作者
而且前20个BAR commentary输出的值一个都不显示

使用道具 举报

Rank: 10Rank: 10Rank: 10

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


plotNumeric是无效值的。
我2楼说的是commentary。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
62557
积分
124
帖子
27
主题
8
阅读权限
40
注册时间
2011-8-31
最后登录
2017-1-10
6#
发表于 2011-9-16 13:54:11 |只看该作者


改成Commentary也一样啊

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("ATRATR="+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("ATRATR="+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("ATR="+Text(Average(TrueRange,ATRLength)));
        }
End
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
62557
积分
124
帖子
27
主题
8
阅读权限
40
注册时间
2011-8-31
最后登录
2017-1-10
7#
发表于 2011-9-16 13:54:45 |只看该作者
Commentary函数该输出的一个都不输出,只有在20个BAR之后才输出。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
62557
积分
124
帖子
27
主题
8
阅读权限
40
注册时间
2011-8-31
最后登录
2017-1-10
8#
发表于 2011-9-16 14:56:21 |只看该作者
跪求管理员看一下,这个问题困扰了我很久了。。。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-16 03:27

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部