全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
entryprice取数问题
hborning 分享到
2022-08-22 16:46

我有个公式,data0是5分钟,data1是日线。

我发现开仓是显示正常显示在5分钟图了,平仓条件就是close-entryprice>100,发现总是立刻平仓。

打印出来发现是entryprice=0.这个问题是多数据源导致的吗?

但是我只是在代码开头取日线数据使用data1,后面都是使用默认不加前缀的data0

hborning

但也不是entryprice立刻就变成0,也有经过1~4根后再变成0 的,在1~4根内entryprice还是正常计算的。不知道这个是什么原因?

2022-08-22 17:11
qq3041585011
@hborning

没看到代码,盲猜你是不是把entryprice放在某个条件语句里了。

2022-08-23 10:54
kyover

第一 函数分图层

第二 变成0  一定是执行过平仓语句

建议你先把单图层情况下的entryprice搞清楚再研究多图层

2022-08-23 11:15
hborning

Params

    Numeric K1(0.1);
    Numeric May_D(2);
    Numeric lots(1);
    
Vars 

    Numeric BuysellRange(0);//声明数值变量BuyRange,初值为0,即上轨幅度。//

    Numeric BuyTrig(0);//声明数值变量BuyTrig,初值为0.//

    Numeric SellTrig(0);//声明数值变量SellTrig,初值为0.// 

    Numeric HH;//声明数值变量HH。//

    Numeric LL;//声明数值变量LL。//

    Numeric HC;//声明数值变量HC。//
 
    Numeric LC;//声明数值变量LC。//

    Numeric BuyPosition;//声明数值变量BuyPosition,即买入价格。//

    Numeric SellPosition;//声明数值变量SellPosition,即卖出价格。//

    series<Numeric> middle;
    Series<Numeric> HighAfterEntry;
    Series<Numeric> LowAfterEntry;
    Series<Numeric> Day_N;
Events
    onBar(ArrayRef<Integer> indexs)
    {
        range[0:0]
        {    
        if(TrueDate(0)<>TrueDate(1))
        {
            Day_N=Day_N[1]+1;
        }
        if(Day_N<May_D)Return;

        data1.HH=data1.highest(data1.high[1],May_D);
        data1.LL=data1.lowest(data1.low[1],May_D);
        data1.HC=data1.highest(data1.close[1],May_D);
        data1.LC=data1.lowest(data1.close[1],May_D);
        data0.HH= Data1.HH;
        data0.LL = data1.LL;
        data0.HC = data1.HC;
        data0.LC = data1.LC;
        /*PlotNumeric("HH",data0.HH);
        PlotNumeric("LL",data0.LL);
        PlotNumeric("HC",data0.HC);
        PlotNumeric("LC",data0.LC);*/
        Commentary("marketposition = "+text(MarketPosition));
        if (MarketPosition==0){
        
            If((HH - LC) >= (HC - LL)) 
            {
                BuysellRange = HH - LC;
            }
            Else
            {
                BuysellRange = HC - LL;
            }

            commentary("buysellrange="+text(BuysellRange));
            BuyTrig = K1*BuysellRange;//计算幅度
            Commentary("buytrig="+Text(BuyTrig));
            SellTrig = K1*BuysellRange;//计算幅度
            BuyPosition = data1.open+BuyTrig;//上轨,即开盘价 + BuyTrig。
            SellPosition = data1.open-SellTrig;//下轨,即开盘价 - SellTrig。
            PlotNumeric("BuyPosition",BuyPosition);//画线上轨。
            PlotNumeric("SellPosition",SellPosition);//画线下轨。
            middle = data1.open;
            
            If (close>=BuyPosition and close[1]<BuyPosition )//假如当前高价 >= 上轨。//
            {
                Buy(lots,close); //开仓买1手,价格为取开盘价与上轨对比的较大值,再加上设置的滑点数了。//
                LowAfterEntry = EntryPrice;//保存多头开仓价格;
                Return;//返回
            }
            If(close<=SellPosition and close[1]>SellPosition) //假如当前低价 <= 下轨。//
            {
                SellShort(lots,close);//开仓卖出1手,价格为取开盘价与下轨对比的较小值,再加上设置的滑点数了。//
                HighAfterEntry = EntryPrice;//保存空头开仓价格;
                Return;//返回
            }

        }else if(MarketPosition>0 and BarsSinceEntry>0){
            middle = middle[1];
            if (low<middle){
                Sell(0,low);
                Commentary("low<middle");
            }Else if ((close - EntryPrice)> BuysellRange)
            {
                Sell(0,Close);
                Commentary("close-entryprice,entryprice="+text(Entryprice));
            }
            
        }else if (MarketPosition<0 and BarsSinceEntry>0){
            middle = middle[1];
            if (high<middle){
                BuyToCover(0,High);
            }else if ((EntryPrice-close)>BuysellRange){
                BuyToCover(0,close);
            }
        
        }
        Commentary("middle="+text(middle));    
        Commentary("entryprice="+text(Entryprice));
        }
    }        
 

2022-08-23 12:25
hborning

我仅仅是想重现dual thrust的指标,由于需要取前N天的最高最低价格,所以data0设为5分钟,data1设为日线,就只有在代码最前面需要调用data1的前几个K线来取最高最低价格

其余代码都是按照只在data0上操作的。

看了老师提示,想会不会是data1上也会执行这个代码,导致平仓了。

然后我尝试把整个onbar里面的代码都加入了range[0:0],发现问题依旧,我也不知道是哪里把仓位平掉了

2022-08-23 12:33
kyover

查看了你的代码运行情况

第一 你说开仓以后马上就平仓,这个在图上反应出来了,基本上第二根bar就会马上平仓。如果这个情况不属于你的策略意图,诊断你的平仓条件为什么会在不该满足的地方满足了。

第二,entry price的值。代码中,你commentary enryprice的位置放在了平仓后,既然已经执行完了平仓命令,自然entryprice就为0了。你试试在平仓命令前放置commentary entryprice的命令,那肯定就不是0了。

其他并没有发生什么有问题的东西,比如下图信号

在开仓第三根bar上entryprice显示正常,后面一根因为平仓了所以就显示为0了

2022-08-23 13:26
您未登录,请先 登录注册 后发表评论
顶部