自動交易setposition 、Position、Filled使用差別請釋疑

  •   657 
  • 最後發表   XQYi  2024 十二月 27
XQYi 發文於   2023/12/08

自動交易setposition 、Position、Filled有無使用的差別請釋疑,
1. 修正請按表格形式修正補充 TKS!  

 2. 可否用範例+白話  or  邏輯流程圖 來說明三者之間買賣交易間的變化關係?
例如 (範例+白話) 白話若有誤請修正

Position(N)、SetPosition(N1)的關係式= N+X=N1 ,=>X=N1-N  此X變數是計算後要執行的委託量
例 :N=2、N1=-1 => -2-1=-3  、 X= - 3 =>賣出3張

按此關係式推得 "Position" = "(委託or現在)的買進量"(依策略腳本或實際庫存而定),
當委託成功(SetPosition)執行後,此時Position會變成="現在的委託量"


Filled="希望的成交量",當委託且成交(SetPosition)後,電腦會記住回傳的成交數量 Filled="實際已成交量"   
Position 和 Filled 在執行(SetPosition)結果的前後,有用不同稱呼來區隔。


=> 建議 : Position、Filled因會隨著執行(SetPosition)前後狀況不同而有不同,可加用兩個名稱來區隔,如(PositionF、PositionB)=Position,但內部程式執行時仍是相同的,這樣使用者才不會搞混。

假設語法只寫Filled(希望的成交量)
=>系統知道Filled(希望成交量),但不知道Position( 現在的庫存) 所以不知道價格,在下委託單後若還沒成交前,這個價格只要訊號再出現就會再改新的價格再委託一次,重複改價直到成交。

假設語法只寫Position(委託or現在 的買進量)
=>系統知道你Position(委託or現在 的買進量),但不知道你Filled(希望的成交量)而無法比對數量,所以下委託單後還沒有成交前,如果有第二次的買賣訊號出現,就會把第一張單刪掉改下第二張委託單,若第二筆訊號又沒成交,第三筆訊號出現時又會刪單, 重複改單直到成交。

這樣的解釋是否正確?

SetPosition(1,market)=>設定買賣後庫存和交易價格(庫存存量"1"、委託價格"市價")

=>數字1為"+"多單現股的庫存數量、-1為"-"空單融卷的庫存數量、0=平倉(多空皆是庫存0)

 

if Position = 0 and Filled = 0 and Condition1 then SetPosition(2,market) 

// if 委託0 and 庫存0 and 條件1成立 then 用市價買賣將庫存調到剩2張 +=多單(會買進兩張2-0=0)

 

if Position= 1 and filled=1 and condition2 then SetPosition(-2, Close)

// if 委託1 和  庫存1 和條件2 成立 then 用成交價買賣將庫存調到剩-2張 -=空單(會賣出3張-2-1=-3)

如果自動交易中心
=>3.若選擇現股,此指令是否會賣出1張現股+卷賣2張 or 現股先賣?  若現股先賣如何設定不允許?
=>4.若選到資卷,又會是甚麼情況?


if Position = 3 and Filled = 1 and Condition1 then SetPosition(2,market);
5.程式碼Position 和 Filled 量不相等的情況 對SetPosition的執行影響?
6.如果Position、Filled 數字變來變去易搞混,若都不寫,會有何影響?

7. 本想一個腳本內把可能發生的交易方式包含(現股、資卷,判別庫存)在內,依訊號和獲利看哪個最有利來自動執行買賣,一直難以成功(系統似乎做不到),如果捨棄不用這三個函數,改用Buy、Sell 、Cover、Short 有何差別或限制?

 

 

排序方式: 標準 | 最新
XQYi 發文於   2023/12/10

寫了一個Excel自動判斷的說明檔,如附件。

若不完整請補充!

如果編輯器,能將所寫程式碼編譯後,也輸出中文的執行方式來做雙向確認,就太棒了

附加文件

XS小編 發文於   2024/01/16

Hello xqyi,

 

position => 策略的部位,是個單純的值

filled => 策略的庫存,是個單純的值

setposition => 調整交易策略部位的數量,是個動作。

 

腳本運算前會取得position和filled的數值。 (ex. position為0、filled為0)

腳本運算時會判斷是否有交易指令 (ex. setposition) 改變了 position。  (ex.觸發setposition(1), position被修改為1)

腳本運算結束後會依據position和filled的數值決定是否要下出委託和委託的數量,數量會是 (position - filled)。    (position為1、filled為0,故買進1張 (1-0 = 1))

 

Buy、Sell 、Cover、Short都是交易指令,會在腳本執行時改變策略的position。

細節可以參考 XSHelp 上的說明。

 

在選擇現股交易時,系統只會依據帳號的現股庫存數量去判斷下出何種委託,買進時會送出現股買進,賣出時會送出現股賣出或是現股先賣(當沖)。

在選擇信用交易時,系統會依照這個帳號的融資/融券庫存數量去判斷下出何種委託,買進時可能會送出買進融券(回補)或是買進融資委託,賣出時可能會送出賣出融券或是賣出融資的委託。

兩者是獨立的,不會互相混合。

 

if Position = 3 and Filled = 1 and Condition1 then SetPosition(2,market);

position 和 filled 是個值,只有在這個值符合條件和condition1符合條件的時候才會執行 SetPosition。

都不寫的話就是簡化條件,只要condition1符合就會執行 SetPosition。

自動交易語法介紹裡有說明為何要使用position和filled當作條件。

XQYi 發文於   2024/12/27

一年後還是沒全搞懂的Position 與  Filled的"數量交易關係"。

1. 寫腳本時首先要考慮你要應用在的哪個K頻率(日K頻率、分K頻率)

2. 由於這兩個函數也是序列值,Position=1 Filled=1 、Position[1]、Filled[1]。

當有應用到Position[1]、Filled[1]時,一定要考慮交易的K頻率,    因為這個[1]是跟著你所使用交易的K頻率而變

3.當 Position = Filled 表示委託的目標數量 都已達成(成交)

4.當Position > Filled 表示委託的目標數量 ,委買尚有未成交的

5. 當Position < Filled 表示委託的目標數量小於成交數量,通常發生 在庫存委賣但尚未成交時。

其中腳本的應用,還要考慮該 "各商品" 是否有庫存及 "庫存的數量",應用上面最容易被 "數量" 所搞混

因每個商品的庫存數量若有不同,腳本上的Position、Filled所寫的數字 -> "數值判斷式",可能會是一大困擾!?

再者若當沖以平均成本做為獲利判斷時,當庫存品在今日有新的委託買進,平均成本產生變化,則無法如預期獲利賣出。

此時只能用同個策略但啟動兩個交易,分別為有庫存量和無庫存的,這還算單純。

但若還想用不同策略進行交易時,就會開始變得不知該如何下手,

就會又想把不同策略寫到同一個腳本,此時程式的編寫邏輯可能又是一大挑戰。

當一個函數,可用於多種不同情境狀態控制的時候,就是認知混亂的開始。

 

目前的自動交易中心,應用於單一商品或無庫存時很好寫腳本及交易。

但若想用於多商品且有不同庫存數量時,應該就會有一團霧的現象了。

這一團霧有沒有解?  其實有解,可惜程式能力差,雖有想法但無法轉為做法!

發表回覆
Close