簡體   English   中英

輸入后如何在 PineScript 上存儲值?

[英]How to store a value on PineScript after an entry?

我為風險設置了 1:1 的止盈值。 它基於 ATR。 一旦收盤價高於/低於 atr,它就會給我一個入場點,之后,我計算入場價和 ATR 之間的距離。 所以這個距離將與我的 TP 相同。 但實際情況是,機器人不斷從最后一根柱線獲取 ATR 水平,而不是從入場柱線獲取。

這是代碼示例和交易屏幕截圖:

插圖

//@version=4
buy = crossover(close,atr)
sell = crossunder(close,atr)
    
 
strategy.entry("long",   true, when = buy)
strategy.entry("short", false, when = sell)


//calculate difference between entry and atr
differenceLong = strategy.position_avg_price - atr
differenceShort = atr - strategy.position_avg_price

//Calculate the TP price

longExitPrice  = strategy.position_avg_price + differenceLong
shortExitPrice  = strategy.position_avg_price - differenceShort

if (strategy.position_size > 0)
    strategy.exit(id="TP", limit = longExitPrice)

        
if (strategy.position_size < 0)
    strategy.exit(id="TP", limit = shortExitPrice)

使用內置變量strategy.position_size來確定您是否輸入了新頭寸。 然后使用var來存儲輸入時的 ATR 值。 通過使用 var,您可以確保它的值不會被更新,除非您特別這樣做。

atr = ta.atr(14)

var float atr_at_entry = na

is_new_long = (strategy.position_size > 0) and (strategy.position_size > strategy.position_size[1])
is_new_short = (strategy.position_size < 0) and (strategy.position_size < strategy.position_size[1])
is_new_entry = is_new_long or is_new_short

atr_at_entry := is_new_entry ? atr : atr_at_entry

在退出計算中使用atr_at_entry

注意:如果您使用的是process_orders_on_close=true ,則需要像這樣獲取先前的 atr 值: atr_at_entry := is_new_entry ? atr[1] : atr_at_entry atr_at_entry := is_new_entry ? atr[1] : atr_at_entry

這個策略做你想做的

關聯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM