设为首页收藏本站

 找回密码
 注册
楼主: gwf_13380222
打印 上一主题 下一主题

策略单元中不同公式定义的全局变量是策略单元的全局变量 [复制链接]

Rank: 1

精华
0
UID
259001
积分
47
帖子
31
主题
10
阅读权限
10
注册时间
2017-11-11
最后登录
2022-9-15
11#
发表于 2019-9-26 11:49:43 |显示全部楼层
每个数据源局部变量在回测时都会存储显示相应的交易信号(局部序列变量各自独立存在),但如果交易信号涉及全局变量,则在回测时交易信号就乱了
估计这套TBQ这套机制时无法改变啦
只能在编写公式时小心处理,避免这样的情况出现!

关于全局和局部变量这个问题,大神估计也只能这样回答了

使用道具 举报

Rank: 1

精华
0
UID
259001
积分
47
帖子
31
主题
10
阅读权限
10
注册时间
2017-11-11
最后登录
2022-9-15
12#
发表于 2019-9-27 09:19:30 |显示全部楼层
(1)再请教一下:同一个公式,两个参数分别用在同一品种的分钟周期和日周期上,怎么个方式实现较好

(2)上面代码如下,代码中九点半更新的数据放在全局变量中供公式其他时刻使用,在策略单元内加载板块股票进行计算测试,首先交易次数异常,查看k线图上的交易信号和输出数值,是不对的
注:如果将全局变量改为序列变量(局部变量),结果就正常了

Params
        Numeric Length(1500);     
Vars
     Numeric NumPos(1);
     Series<Numeric> mprice;
     Numeric m;
     Numeric i;
     Numeric j;
     Numeric k;
     Numeric temp;
     Numeric mytime0;
     Numeric TT;
     Numeric mmax;
     Numeric mmin;       
     
           Global Numeric buynot;
           Global Numeric sellnot;
    Global Numeric downnot;
    Global Numeric upnot;   

        /*        
           Series<Numeric> buynot;
    Series<Numeric> sellnot;
    Series<Numeric> downnot;
    Series<Numeric> upnot;     
    */
    Bool Buycondition;//开多
    Bool Sellcondition;//平多
Events

    onBar(ArrayRef<Integer> indexs)
    {   
         
     Range[0:4]
        {
            k=CurrentBar;
            Commentary("k="+Text(CurrentBar));                       
            NumPos=1;                                                                               
        mytime0=0.0930;
            TT=Time();
            If(TT== mytime0)  //更新计算
            {               
                    mmax=High[1];        
                    mmin=Low[1];
                    If(mmax==mmin) Return;               
                    for i=1 To Length       
                    {  
                            mmax=Max(High[i+1],mmax);
                            mmin=Min(Low[i+1],mmin);
                    }         
                    buynot=mmax;        
                    sellnot=mmin;               
            downnot=buynot*0.97;
            upnot= sellnot*1.03;                          
            }
    /////////////////////////////////////////////////////////////////////////////////////
             If(k < Length) Return;                        
             Commentary("buynot="+Text(buynot));
            Commentary("sellnot="+Text(sellnot));                              
        Commentary("upnot="+Text(upnot));       
        Commentary("downnot="+Text(downnot));      
            PlotNumeric("1",buynot);
            PlotNumeric("2",sellnot);   
    //入场条件                                 
            //////////////////////////////////////////////////////////////
            BuyCondition= Close[1]>buynot ;//建多
            SellCondition = Close[1]<sellnot ;//建空
    // 系统进场
            If(MarketPosition == 0)// 当前无仓位
            {

                    If(Buycondition) // 开多仓   
                    {
                            Buy(NumPos,Open);
                           
                    }Else If(SellCondition) // 开空仓   
                    {
                            SellShort(NumPos,Open);                                                                                               
                    }                 
            }
         // 系统出场
         //处理多仓           
         If(MarketPosition == 1 )         // 已经开多仓,判断是否止损
         {               
                    If(downnot>1) PlotNumeric("L",downnot);                       
                    If(Close[1] <downnot  )  //止损
                    {
                            Sell(0,Open);               
                    }
                    Else If(Sellcondition)
                    {
                            Sell(0,Open);                                               
                    }
            }
            //处理空仓
            If(MarketPosition == -1)// 当前有空仓
            {
                    If(upnot<1000000) PlotNumeric("H",upnot);       
                    If(Close[1] >upnot  )  //止损
                    {
                            BuyToCover(0, Open);       
                    }
                    Else         If(Buycondition)
                    {
                            BuyToCover(0, Open);//平多开空
                    }
             }
    }
}

使用道具 举报

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

bottom

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

GMT+8, 2024-5-20 04:45

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部