策略屬性

每個Pine策略都有一些屬性,這些屬性決定了它的行為:

  1. 初始資本
  2. 基礎貨幣
  3. 訂單大小
  4. 金字塔式
  5. 佣金
  6. 為限價單核對價格
  7. 滑點
  8. 保證金
  9. 重新計算
  10. 回測精度

它們可以在策略設定中的"屬性"頁籤中找到:


在策略屬性中指定的每個參數,都可以透過編輯對應Pine腳本中呼叫strategy()函數的引數來進行更改:

strategy(title, initial_capital, currency, default_qty_value, default_qty_type, pyramiding, commission_type, commission_value, backtest_fill_limits_assumption, slippage, process_orders_on_close, margin_long, margin_short, calc_on_order_fills, calc_on_every_tick, process_orders_on_close, use_bar_magnifier)

下面我們來看看Properties選單中,各個輸入參數及其在Pine語法中對應的參數:

1 - 初始資本(參數:initial_capital) 表示初始可用於交易策略的資金量,以基礎貨幣中定義的貨幣表示。預設情況下,此值等於1,000,000。您可能需要增加此值,才能在某些商品上進行交易。

2 - 基礎貨幣(參數:currency) 指定用於計算的貨幣。策略模擬器頁籤中出現的結果(盈利、虧損、回撤等)以該貨幣表示。可用的選擇是:

預設值、美元、歐元、澳元、英鎊、紐西蘭元、加元、瑞士法郎、港元、日元、挪威克朗、瑞典克朗、新加坡元、土耳其里拉、南非蘭特。如果選擇了預設,策略將使用該商品的預設貨幣,並且沒有貨幣轉換。

3 - 訂單大小(參數:default_qty_value, default_qty_type)。這需要一個值和一個計算模式。請注意,由於商品的最小可交易數量,計算值可能會受到限制:

  • 合約(參數:strategy.fixed) - 該策略將以指定數量的合約/股票/手數進入。
  • 貨幣金額(參數:strategy.cash) - 該策略將以基礎貨幣指定的金額進入。
  • 淨值百分比(參數:strategy.percent_of_equity) - 當交易開啟時,部位大小將根據可用權益的百分比進行計算。

4 - 金字塔式(參數:pyramiding)。指定同一方向的最大連續K線數。停用金字塔式時,該策略只能開一個多頭或空頭部位,即使進場條件已滿足。金字塔式僅影響使用strategy.entry()函數創建的K線。它對使用strategy.order()創建的訂單沒有影響。

5 - 佣金(參數:commission_typecommission_value)。這是每筆交易所支付的交易費用。必須提供值和計算模式。請注意,佣金適用於進場和出場,並且當使用百分比時,計算出的佣金將隨交易價值而變化:

  • 交易價值百分比(參數:strategy.commission.percent) - 對每個訂單徵收等於指定百分比的佣金。
  • 每份合約的貨幣(參數:strategy.commission.cash_per_contract) - 對每份合約徵收佣金。
  • 每份訂單的貨幣(argument: strategy.commission.cash_per_order) - 對每份訂單收取佣金。

6 - 為限價單核對價格(參數:backtest_fill_limits_assumption)。使用限價訂單進場的條件更加嚴格。預設情況下,此值為0,一旦達到訂單中指示的價格,就會根據歷史數據執行限價訂單。如果參數不為0,僅當市場價格超過限價訂單水平指定的跳動數時,限價訂單才能在K線內建倉。

7 - 滑點(參數:slippage)。指定要增加到市價單或停損單的成交價的價格變動點值。它可以用來解釋價差。

8 - 多頭/空頭部位的保證金(參數:margin_long, margin_short) 指定每筆交易的保證金,即交易者必須為部位提供資金的百分比。例如:如果多頭部位的保證金設定為25%,交易者必須有足夠的資金來支付未平倉交易的25%,並且可能在每筆交易中花費高達400%的資金。

如果交易已經開始並且虧損,以至於交易者的資金不足以支付他們的部分交易,則會發生追加保證金通知,並強行清算部分原始部位。將被清算的精確單位數量是彌補損失所需數量的4倍。它是透過以下算法計算的:

1. 計算花費金額,即交易員在開倉時所花費的金額。

部位大小 * 進場價

2.  計算證券的市場價值 (MVS)。

部位大小 * 當前價

3. 計算未實現盈利。如果交易方向是空頭,且未實現盈利為正數,結果仍應為負數,因此我們將計算的絕對值乘以-1。

ABS(MVS - 花費金額) * -1

4. 計算淨值,即交易者當前可用的資金。

初始資本 + 淨利潤 + 未實現盈利

5. 將保證金百分比轉換為保證金比率。

保證金百分比 / 100

6. 計算保證金,即支付其部分未實現盈利部位所需的確切資金數額。

MVS * 保證金比率

7. 計算可用資金,即交易者無法用其當前資產彌補的虧損金額。

淨值 - 保證金

8. 計算交易者虧損的總金額。

可用資金/保證金比率

9. 計算交易者需要賣出多少單位才能彌補損失。該值將被截斷為當前商品的最小合約大小相同的小數點。

截斷(步驟#8 / 當前價)

10. 計算經紀商將出售多少單位以彌補損失。我們的模擬經紀商會賣出比必要數量多4倍的單位,以確保如果損失持續發生,保證金追加通知不會一直觸發。這個值對於做空交易而言是正值,因為經紀商需要買入單位來彌補損失。

步驟#9 * 4

為了詳細檢查此計算,讓我們將內建的超級趨勢策略增加到 NASDAQ:TSLA 圖表的1D時間週期內。將訂單大小設定為淨值的300%,將多頭部位的保證金設定為25%。

我們的第一次進場發生在2010年9月16日K線開盤時。我們以4.43美元(進場價)買入682438個單位(部位大小)。然後,在2010年9月23日,當價格為3.9(當前價格)時,111052單位被追加保證金強制平倉。

1. 花費金額:682438 * 4.43 = 3023200.34

2. MVS: 682438 * 3.9 = 2661508.2

3. 未實現盈利:−361692.14

4. 淨值:1000000 + 0 − 361692.14 = 638307.86

5. 保證金比率:25 / 100 = 0.25

6. 保證金:2661508.2 * 0.25 = 665377.05

7. 可用資金:638307.86 - 665377.05 = -27069.19

8. 虧損金額:-27069.19 / 0.25 = -108276.76

9. 用股票來彌補損失:截斷(-108276.76 / 3.9) = 截斷(-27763.27) = -27763

10. 追加保證金大小:-27763 * 4 = - 111052

9 - 重新計算選項指定策略應該重新計算的頻率。預設情況下,該策略在每個K線的收盤時重新計算,但也可以使用以下選項重新計算:

  • 訂單成交後(參數:calc_on_order_fills)。策略在訂單成交後,立即執行額外的K線內訂單計算。額外的計算發生在歷史K線和即時K線上。
  • 在每個Tick上(參數:calc_on_every_tick)。預設情況下,策略僅在即時K線關閉時進行計算。此參數允許策略在每次即時K線更新時進行計算,就像指標一樣。請注意,在刷新圖表時會丟失Tick數據,因此使用此選項的策略將重新繪製。該參數不影響歷史K線上的策略行為。還要注意,使用此功能的策略將無法顯示出歷史K線上真實的結果,因為它們不包含Tick數據。
  • 在K線關閉時(參數:process_orders_on_close)。如果為true,策略會在一個K線關閉並完成策略計算後,產生額外的嘗試來執行訂單。如果訂單是市價單,則模擬器會在下一個K線開盤之前執行它們。如果訂單是價格相關的,只有在符合價格條件時才會執行。這個選項非常實用,如果您希望在創建訂單的同時執行它們:預設情況下,訂單是在當前K線收盤時創建,並於下一根K線開盤時執行,打開此選項後,它們將在創建訂單的同一收盤價上被執行。請注意,在同一tick上進入持倉和創建訂單可能具有誤導性,因為這不可能實現真正交易。

10 - 回測精度:

  • 使用K線放大器(參數:use_bar_magnifier)允許經紀商模擬器在歷史回測期間,使用較低時間週期的數據,以獲得更真實的結果。您可以在相關的幫助中心了解有關K線放大器回測模式的更多資訊。