已有庫存時,股票池當日觸發要再買入,但若沒買到取消當日的委託,改委託其他商品

  •   356 
  • 最後發表   XQYi  2024 十二月 27
XQYi 發文於   2024/12/20

已有庫存時,當日觸發要再買入,但若沒買到取消該筆的委託,讓安控可改委託其他商品

以下程式碼是否正確,因為Position 在有庫存時不等於1

 

if Position = 1 and TrueAll(Position <> Filled, 3) then SetPosition(0); { 取消買進的委託 }

 {送出買進委託後, Position = 1, 如果成交了, Filled = 1j

Position <> Filled 在這裡則代表著委託已經送出, 可是還沒有成交,

 

Position, Filled, 跟value1, value2, Close一樣, 都是一個"序列",

 

所以Position[1]是上一根K棒最後的Position, Filled[1]是上一根K棒最後的Filled,

 

所以TrueAll(Position <> Filled, 3) 代表著連續三根K棒都沒有成交 }

 

 

排序方式: 標準 | 最新
虎科大許教授 發文於   2024/12/20

若你已有庫存且允許加碼,則Position=1要改成Position>0。TrueAll(Position <> Filled, 3)代表連續三根K棒都沒全部成交。

XQYi 發文於   2024/12/20

1. 這樣一來,原有的庫存是否也會被清空?

2. 為避免 SetPosition(0)清空,是否委託取消指令也得改成 SetPosition(Position-1); //-1是要與原委託的量一致?

3.是否有單獨的方式,只針對今日的委託做取消?

虎科大許教授 發文於   2024/12/20

若不想碰到舊庫存,策略部位選擇不設定即可。

XQYi 發文於   2024/12/20

所以該交易帳號需要用兩個交易方式,來區分庫存和當日的買賣,

無法透過腳本併存交易?

虎科大許教授 發文於   2024/12/20

可用同一個策略。策略部位選擇與庫存同步,但控制只交易今天新建立的庫存。

XQYi 發文於   2024/12/20

但控制只交易今天新建立的庫存。=>沒能理解!

 

如何設定控制可以達到庫存不被賣出只取消當日委託?
是以下這樣嗎?

 

虎科大許教授 發文於   2024/12/21

策略部位選取「不設定」。

XQYi 發文於   2024/12/22

若用這個指令 CancelAllOrders(),是否可達成所需 =>

1.已委託未成交的取消、讓按控能繼續進行下一個商品委託

2.庫存或今日成交的,若有獲利觸發可委賣

 

if Position > 1 and Getfield("時間","Tick")>=TimeAdd(BIT,"S",60) and TrueAll(Position <> Filled, 3) then CancelAllOrders(); //時間內未成交取消買進的委託

if Filled > 0 and  GetField("收盤價", "Tick") > FilledAvgPrice*B1A then 

 

Setposition(Position-1,GetField("收盤價", "Tick")); //達獲利賣出

虎科大許教授 發文於   2024/12/22

(1) CancelAllOrders可把沒成交的委託刪單。

(2)最後兩行程式碼,會在獲利賣出條件符合時,每個Tick都會賣出1張,直到賣光。過程中可能會產生很多無效的委託,且最後甚至可能還會放空1張。

XQYi 發文於   2024/12/22

var: ord1(true);

if Filled > 0 and ord1=true and  GetField("收盤價", "Tick") > FilledAvgPrice*B1A 

then begin

Setposition(Position-1,GetField("收盤價", "Tick"));

ord1=False;

end;

顯示更多回應 發表回覆
Close