FilledAvgPrice -  (內建函數) 交易函數
語法:
取得商品目前的未平倉成本。
Value1 = FilledAvgPrice
說明:

FilledAvgPrice回傳目前商品的未平倉成本。如果目前Filled數值是0的話,則FilledAvgPrice回傳0,否則FilledAvgPrice回傳的是一個大於等於0的數值,與Filled的方向無關。

範例

if Filled > 0 then begin
    if Close >= FilledAvgPrice * 1.02 then SetPosition(0);
    if Close <= FilledAvgPrice * 0.98 then SetPosition(0);
end;

未平倉成本計算邏輯

腳本執行過程內,系統會紀錄每一筆成交紀錄,依照成交時間排序,然後依照這些成交紀錄的成交價格/數量,採用先進先出的方式計算商品的未平倉成本。

範例#1

假設以下三筆成交記錄, 依照時間順序:

  • 第1筆成交:買進1張,100元,
  • 第2筆成交:買進1張,102元,
  • 第3筆成交:賣出1張,101元

在第1筆成交時,Filled = 1,FilledAvgPrice = 100。

在第2筆成交時,Filled = 2,FilledAvgPrice = (100 + 102) / 2 = 101。

在第3筆成交時,Filled = 1,依照先進先出的沖銷順序, 第3筆賣出1張的成交會沖銷掉第1筆買進1張成交,所以未平倉數量剩下第2筆的買進1張, FilledAvgPrice = 102。

請注意:上面這個計算方式跟把所有成本加總後來除是不一樣的((100 + 102 - 101) / 1 = 101):全部加總後的平均數值會涵蓋已實現損益。

範例#2

  • 第1筆成交:買進2張,100元,
  • 第2筆成交:買進2張,101元,
  • 第3筆成交:買進2張,102元,
  • 第4筆成交:賣出3張,101元

在第1筆成交時,Filled = 2,FilledAvgPrice = 100。

在第2筆成交時,Filled = 4,FilledAvgPrice = (100 * 2 + 101 * 2) / 4 = 100.5。

在第3筆成交時,Filled = 6,FilledAvgPrice = (100 * 2 + 101 * 2 + 102 * 2) / 6 = 101。

在第4筆成交時,Filled = 3,依照先進先出的沖銷原則,第4筆的賣出3張分別沖掉了第1筆的買進2張,以及第2筆的買進1張,所以剩餘的買進成交是第2筆買進1張,101元,以及第3筆的買進2張,102元,FilledAvgPrice = (101*1 + 102 * 2) / 3 = 101.66666。

如果策略在設定時指定要採用交易帳號的庫存部位的話,此時系統就會依照策略的設定修改未平倉成本,之後收到成交之後再依照先進先出的方式調整數值。

範例#3

  • 策略設定時指定策略部位:部位=2張,成本=100元,
  • 第1筆成交:買進1張,102元,
  • 第2筆成交:賣出1張,101元,

在策略指定策略部位時,Filled = 2,FilledAvgPrice = 100。

第1筆成交時,Filled = 3,FilledAvgPrice = (100 * 2 + 102 * 1) / 3 = 100.66666。

第2筆成交時,Filled = 2,依照先進先出的沖銷方式,這一筆賣出1張會沖銷掉策略指定部位其中1張,所以剩餘的數量是策略指定部位的1張,100元,跟第1筆成交1張的102元,FilledAvgPrice = (100 * 1 + 102 * 1) / 2 = 101。

請注意:未平倉成本不包含交易成本,所以使用者如果要估算未平倉損益時,可以在腳本內利用[FFilledRecordCount等函數取得每一筆成交紀錄,然後再自行計算。