求助帖

固定止盈点数=止损价格-开仓价格

这个公式怎么写

我自己写的

ZYDS=mylossprice-myentryprice;(做空为例)

if(low<=myentryprice-zyds*minpoint)

{

buytocover(ss,open);

}

按照这个写,在图表上计算出来的止盈点数不等于止损价格和开仓价格的差值

求助帖!!如何取当日最高点时的持仓量
基础指标对不上,麻烦老师给个解决办法
编程求助
求助gettbprofilestring报错
第二帖,关于SetBasePeriod(\\\\\\\"5m\\\\\\\")
第三帖,关于SetBasePeriod(\\\\\\\\\\\\\\\"5m\\\\\\\\\\\\\\\")
求助程序编写
求助老师写个公式
信号闪烁求助
信号闪烁求助

感觉时间都用在编辑策略上了,比手动盯盘做单都要少了,建议TB编辑策略还要优化一下,最好是各种功能组装就能直接用,复杂的做不到,简单的止盈和止损可以做到吧

老兄,你这问题描述得也太不知所云了吧!if里面都是省略号,这也叫公式可以运行?我都看不懂你在说什么,也难怪tb工作人员答非所问了吧

你用最低价来判断 但是却用开盘价来作为信号价格?难道不是应该用止盈价格吗

我现在求助的是如何计算建仓价格和止损价格相差多少个点的问题

你问的难道不是这个么?你平仓价格用open,open是你的止盈价格么?你等价格跌到空止盈价格,却用当前bar的开盘价去平空?这是什么逻辑?这怎么可能和你算的差值相等?

你的提问和我的问答完全不在同一条线上,而且我写的只是策略的一部分。

If(MarketPosition==0)//当前空仓
        {
            If( ……)
            {
                If(……)
                {
                    myEntryPrice=……;
                    Mylossprice=……;
                    Buy(SS,myEntryPrice);
                    Commentary("mylossprice;"+Text(mylossprice));
                    TrailingStart1=MyEntryPrice - mylossprice;
                    TrailingStart2=2*(MyEntryPrice - mylossprice);
                    Commentary("TrailingStart1;"+Text(TrailingStart1));
                    Commentary("TrailingStart2;"+Text(TrailingStart2));
                }
            }
            Else If(……)
            {
                If(……)
                {
                    myEntryPrice=……;
                    SellShort(SS,myEntryPrice);
                    mylossprice=……;
                    Commentary("mylossprice;"+Text(mylossprice));
                    TrailingStart1=mylossprice-myentryprice;
                    TrailingStart2=2*(mylossprice - myentryprice);
                    Commentary("TrailingStart1;"+Text(TrailingStart1));
                    Commentary("TrailingStart2;"+Text(TrailingStart2));
                }
            }
        }
         If(BarsSinceEntry == 0)                // 条件满足:开仓Bar 
    {
        HighestAfterEntry = Close;
        LowestAfterEntry = Close;        // 赋初值为当前最新价格
        If(MarketPosition <> 0)            // 有持仓时执行以下代码
        {            
            // 开仓Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntry 
            HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice); 
            // 开仓Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry 
            LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice);  
        } 
    }Else      // 非开仓Bar时进行以下运算 
    {        
        // 记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断
        HighestAfterEntry = Max(HighestAfterEntry,High); 
        // 记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断   
        LowestAfterEntry = Min(LowestAfterEntry,Low); 
    }
    
    Commentary("HighestAfterEntry = "+Text(HighestAfterEntry));
    Commentary("LowestAfterEntry = "+Text(LowestAfterEntry));
    
    MinPoint = MinMove*PriceScale;
    MyEntryPrice = EntryPrice;
    Commentary("myEntryPrice;"+Text(myEntryPrice));
    If(MarketPosition == 1 And BarsSinceEntry >= 1)  // 有多仓的情况
    {
        // 第二级跟踪止损的条件表达式
         If(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart2*MinPoint) 
        {
            If(Low <= HighestAfterEntry[1] - TrailingStop2*MinPoint)
            {
                MyExitPrice = HighestAfterEntry[1] - TrailingStop2*MinPoint;// 如果该Bar开盘价即跳空触发,则用开盘价代替      
                If(Open < MyExitPrice) MyExitPrice = Open; 
                Sell(SS,MyExitPrice);
            }
             Else If……)
            {
                MyExitPrice=Open;
                Sell(SS,MyExitPrice);
            }    
        }
        Else If(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart1*MinPoint) // 第一级跟踪止损的条件表达式
        {
            If(Low <= HighestAfterEntry[1] - TrailingStop1*MinPoint)
            {
                MyExitPrice =  HighestAfterEntry[1] - TrailingStop1*MinPoint;
                // 如果该Bar开盘价即跳空触发,则用开盘价代替
                If(Open < MyExitPrice) MyExitPrice = Open; 
                Sell(0,MyExitPrice); 
            }
            Else If(……)
            {
                MyExitPrice=Open;
                Sell(SS,MyExitPrice);
            }    
        }
        Else If……) //可在此写初始止损处理
        {
            MyExitPrice = Open;  
            Sell(SS,MyExitPrice);
        }
        
    }
    Else If(MarketPosition == -1 And BarsSinceEntry >= 1)   // 有空仓的情况
    {
        // 第二级跟踪止损的条件表达式
        If(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart2*MinPoint) 
        {
            If(High >= LowestAfterEntry[1] + TrailingStop2*MinPoint)
            {
                MyExitPrice = LowestAfterEntry[1] + TrailingStop2*MinPoint;
                If(Open > MyExitPrice) MyExitPrice = Open;      
                BuyToCover(SS,MyExitPrice);
            }
        }
        Else If(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
        {
            If(High >= LowestAfterEntry[1] + TrailingStop1*MinPoint)
            {
                MyExitPrice = LowestAfterEntry[1] + TrailingStop1*MinPoint;
                If(Open > MyExitPrice) MyExitPrice = Open;      
                BuyToCover(0,MyExitPrice);
            }
        }
        Else If(……) //可在此写初始止损处理
        {    
            MyExitPrice=Open;
            BuyToCover(SS,MyExitPrice);
        }
        
    }

 

 

完整代码如上,图表上显示出来的点数并不等于止损价格和开仓价格的差值

第一 这种不能编译成功的代码算不上完整代码,不能加载到图表上复现问题,就解决不了问题。

第二 计算机是死的,1+1不会算成3,这种简单的止盈计算开发手册里都有模板,都能成功的处理止盈止损点数计算,算错了肯定是你代码问题

第三 已经给你指出了代码里存在的问题,但是如果因为看不懂觉得答非所问,那只能自己通过诊断语句自己排查了

第一公式代码是可以运行的,第二你说的答非所问。

我需要你帮我解决的是为什么我的开仓价格是2909,止损价格是2919,按照这个几个计算出来的止盈点数应该是10而不是20。

我不知道你是否看完我下面的完整代码来回答我的问题,但是我想说的是如果你们TB的客服都是这样帮助解决问题的话,那么你的软件怎么可能会越做越好

您好!麻烦您把Entryprice也输出下,看看计算结果不对,到底问题在哪。您代码没给全,我们没法运行,对调试来说是很不方便的。客服工作本来就很繁重,诊断客户的代码严格来讲并不属于客服的范围,但因为出现问题可能是用户没写对,也可能是系统本身有Bug,所以一般提交客服,我们还是会帮助诊断。所以,希望客户上帝们也要理解下,尽可能地配合调试,别总是觉得自己代码没问题,问题都是TB的。实际上,我服务TB客户这么多年,出现问题是客户原因的概率绝对是大得多的。但我们根据经验这么回复,也是一种正常的诊断顺序,不是为了甩锅,没有谁比我们更希望客户更快解决问题的。