Pinescript 停止不工作 - 本地范围?

问题描述 投票:0回答:1

我一直在尝试让一些进入/退出代码在 pinescript (5) 中工作。它似乎适用于策略的限价。退出,但止损不会触发。

我一直在玩这个,但我无法让它工作 - 我认为这可能取决于本地?全球范围。

  • 本质上,这些条目都很好并且有效
  • 退出类型是从下拉列表中选择的,它是一组选项 - 最像固定%TP是通过入场价格变量entryPriceB计算的。
  • 但是,有一个“自定义”TP 选项,它是一个信号 - 因此在收到信号 CLOSE_BUY_SIGNAL 之前无法计算 TakeProfitB 变量。
if Trade_Direction_Filter_Long and dateRange and OPEN_BUY_SIGNAL and Long_Orders_Placed < Max_Long_Orders
    entryPriceB := close
    Long_Position := true
    stopLossB := SL ? calculateSL() : na
    takeProfitB := TP ? calculateTP() : na

    if useLeverage 
        strategy.entry("Long", strategy.long, limit=entryPriceB, qty=math.min(math.max(.000001, ( strategy.equity / close ) * leverage), 1000000000), alert_message = alert_txt_entry_long)//ADD {{strategy.order.alert_message}} to the message box in Alerts to set up dynamic link
        Long_Orders_Placed := Long_Orders_Placed + 1
        alert("ADD Increased count - " + str.tostring(Long_Orders_Placed)) 
    else  
        strategy.entry("Long", strategy.long, limit=entryPriceB, alert_message = alert_txt_entry_long)//ADD {{strategy.order.alert_message}} to the message box in Alerts to set up dynamic link
        Long_Orders_Placed := Long_Orders_Placed + 1
        alert("ADD Increased count - " + str.tostring(Long_Orders_Placed)) 

if Trade_Direction_Filter_Long and dateRange and Long_Orders_Placed > 0 
    if CLOSE_BUY_SIGNAL and optionTP == "Custom"
        takeProfitB := TP ? calculateTP() : na
        strategy.exit("Long Exit", "Long", stop=stopLossB, limit=takeProfitB, comment = "Signal Exit")
        Long_Orders_Placed := Long_Orders_Placed - 1
    else if (optionTP != "Custom" )
        strategy.exit("Long Exit", "Long", stop=stopLossB, limit=takeProfitB, comment = "Option Exit")
        Long_Orders_Placed := Long_Orders_Placed - 1

希望这是有道理的,任何意见都将不胜感激。

我尝试过移动范围,但遇到了基于 optionTP ==“Custom”和 CLOSE_BUY_SIGNAL 的条件退出问题。或 optionTP != "自定义"

pine-script exit pine-script-v4
1个回答
0
投票

您面临的问题可能与您在 if

takeProfitB
CLOSE_BUY_SIGNAL
块内有条件更新
optionTP == "Custom"
值的方式有关。 Pine Script 是一种前瞻性语言,在 if 条件中更改变量可能不会按照您期望的方式更新变量。尝试以下方法:

//@version=5
indicator("Custom TP Example", overlay=true)

var float entryPriceB = na
var bool Long_Position = na
var float stopLossB = na
var float takeProfitB = na
var bool CLOSE_BUY_SIGNAL = ta.crossover(close[1], close)
var string optionTP = "Custom" // Replace with your logic for optionTP

if ta.crossover(close[1], close)
    // Entry conditions
    entryPriceB := close
    Long_Position := true
    stopLossB := SL ? calculateSL() : na
    takeProfitB := optionTP == "Custom" ? calculateTP() : na

if ta.crossover(close, close[1]) and Long_Position
    // Exit conditions
    if optionTP == "Custom"
        takeProfitB := calculateTP()

    strategy.exit("Long Exit", "Long", stop=stopLossB, limit=takeProfitB, comment = "Exit")
    Long_Position := false

在此修改后的代码中:

  • 我使用

    ta.crossover
    函数来检测
    CLOSE_BUY_SIGNAL
    。根据您的实际信号逻辑修改此条件。

  • 当您入仓时以及当您想用

    takeProfitB
    退出时,我都会有条件地更新
    "Custom" TP
    。这可确保在发生
    takeProfitB
    时正确设置
    CLOSE_BUY_SIGNAL

  • 我使用

    Long_Position
    作为标志来跟踪您是否处于多头仓位。这有助于确定何时退出。

请根据您的具体进入和退出条件调整代码,但此结构应有助于确保在需要时正确计算 takeProfitB。祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.