[英]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.