一個異想天開的清倉想法策略,是否可行?

  •   426 
  • 最後發表   XQYi  2025 十月 22
XQYi 發文於   2025/03/16

一個異想天開的想法,是否可行? (有3問)

1.

input:money(1500,"獲利元"),

Stock1("1569.TW"), //手動輸入庫存股

Stock2("1815.TW"),

Stock3("2105.TW"),

Stock4("2250.TW"),

Stock5("2332.TW");

If Symbol = Stock1 then value1= close-Filled*FilledAvgPrice else value1= 0 ;//取得損益 若無商品=0

If Symbol = Stock2 then value2= close-Filled*FilledAvgPrice else value2= 0 ;

If Symbol = Stock3 then value3= close-Filled*FilledAvgPrice else value3= 0 ;

If Symbol = Stock4 then value4= close-Filled*FilledAvgPrice else value4= 0 ;

If Symbol = Stock5 then value5= close-Filled*FilledAvgPrice else value5= 0 ;

value6=value1+value2+value3+value4+value5; //統計損益

 

if value6*1000 >money then setposition(0,market,label:="清倉"); //判斷損益 清倉

 

另2.

是否可用Filled > Filled[1] 來記錄買進的商品?

Var:VStock6("");

if Filled > Filled[1] then VStock6=Symbol;

 

3.

如果可以,因為只設VStock6("")是否能自動增加購買的商品VStock7~10("" )?

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/03/16

(1)你這樣的處理,會在任何一檔商品獲利超過1000元,將該商品平倉,而非全部商品獲利超過1000元,平倉全部商品。這牽涉到跨域變數,目前沒辦法處理。

(2)(3)你是可以記錄庫存增加的商品代號,但這樣沒有意義。對該商品洗價時,我們本來就知道該商品的部位變化,但其他商品則無從得知。每檔商品的filled是各自獨立的。

 

XQYi 發文於   2025/03/17

value6=; //統計庫存總損益,

if value6*1000 >money then setposition(0,market,label:="清倉"); //判斷損益 清倉

不是 "合計" 超過設定值1000就各商品賣出,而是 "個別商品" 獲利1000就賣出該商品?

value6的統計是多餘的?

 有些想不清

虎科大許教授 發文於   2025/03/17

個別商品獲利超過1000元,將該商品全部庫存賣出,用setposition(0)即可,但若是個別商品獲利超過1000元,將全部商品的全部庫存出清,就無法處理。

XQYi 發文於   2025/03/17

個別商品獲利超過1000元,將該商品全部庫存賣出,用setposition(0)即可=>這了解

但若是個別商品獲利超過1000元,將全部商品的全部庫存出清,就無法處理。=>如果條件不是Value6做判斷也能理解

不懂已經手動統計庫存5檔商品的盈虧,為何會變成"個股"而已。

還是雖然我寫了value1-5,但程式執行時只針對該對應代號商品做計算,其餘四個都為0 ?

虎科大許教授 發文於   2025/03/17

統計所有庫存的損益需要跨域變數,你使用的都不是跨域變數,代表換另一檔商品洗價時,原本記錄的變數都歸零,並不會保留之前的記錄。

XQYi 發文於   2025/03/17

我試了一下回測比較,單純只有下列一行程式碼做賣出

if close-Filled*FilledAvgPrice > money then setposition(0,market,label:="清倉");

執行結果不一樣,如圖上方(有加入3605的代號),只買進卻未賣出。

所以之前的程式碼(有加入3605的代號)還是有作用,但難以預期,下方: 有買進有賣出。

每次都是真的想太多,反給自己找問題、找更糊塗來累自己~

XQYi 發文於   2025/03/17

Print各個value值,只有該商品有數值,其他商品皆為0。

原先沒有加and Filled >=1判斷是否已成交,會很頻繁的觸發取值因成本為0,所以Value6數值=close,直到有買入後才是正確值。

也導致兩個程式碼的交易情況有差異

以下回測有新增加商品回測的情況,

增加and Filled >=1 成交的商品數、成交日期與價格都有差異

if close-Filled*FilledAvgPrice > money then setposition(0,market,label:="清倉");

則是少 *1000 導致都沒賣出!

 

 

虎科大許教授 發文於   2025/03/17

獲利超過一定金額出清庫存,不能用

if close-Filled*FilledAvgPrice > money then setposition(0,market,label:="清倉");

應改成

if close-FilledAvgPrice > money then setposition(0,market,label:="清倉");

 

XQYi 發文於   2025/03/18

感謝!

只能等待期望XS,

1. 將自動中心的總損益值提供給交易用(應該比較簡單吧!)

2. 增加跨域函數 (可能很難等到)

XQYi 發文於   2025/10/21

終於測試完成了在模擬帳戶中,以總損益方式來設定損益值,進行自動一次性清倉。

顯示更多回應 發表回覆
Close