求助帖
固定止盈点数=止损价格-开仓价格 这个公式怎么写 我自己写的 ZYDS=mylossprice-myentryprice;(做空为例) if(low<=myentryprice-zyds*minpoint) { buytocover(ss,open); } 按照这个写,在图表上计算出来的止盈点数不等于止损价格和开仓价格的差值
固定止盈点数=止损价格-开仓价格 这个公式怎么写 我自己写的 ZYDS=mylossprice-myentryprice;(做空为例) if(low<=myentryprice-zyds*minpoint) { buytocover(ss,open); } 按照这个写,在图表上计算出来的止盈点数不等于止损价格和开仓价格的差值
感觉时间都用在编辑策略上了,比手动盯盘做单都要少了,建议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客户这么多年,出现问题是客户原因的概率绝对是大得多的。但我们根据经验这么回复,也是一种正常的诊断顺序,不是为了甩锅,没有谁比我们更希望客户更快解决问题的。