隔日沖 Part5

By | 2022-07-28

昨天跟大家分享隔日沖漲停打開就烙跑的腳本,有網友說如果等到漲停打開才跑太慢了,應該是要在漲停鎖死的委買單少到一定的程度後就要跑,這是非常有道理的建議,先前也有隔日沖大戶提到類似的需求,一樣請XS教主幫我寫了以下的腳本,這次我沒有改寫,原汁原味的把他寫的腳本分享給大家。

他的作法是,當漲停鎖死後的委買,只剩下當初漲停時的委買的90%以下時,就平倉,他的觀點是,如果漲停後的委買張數比漲停時的委買張數少,代表買進的力道被賣盤削弱到不如一開始的氣勢,這是比較容易翻車的情況。

以下的腳本是包括了兩種case,一是昨天說的漲停打開,另一個則是漲停委買單變少:

 

 

{
追漲停+提前烙跑

- 日線
- 每日盤前啟動/收盤後關閉
- 使用自訂部位(讓系統記住先前的部位)
- 在觸發時間之後, 如果是當日最高價, 且價位接近漲停時買進
- 買進之後, 如果價格無法鎖住漲停, 則先出場
- 買進之後, 如果委買量縮手, 則先出場
}

input: entry_time(100000, "觸發時間");
input: up_ratio(9.0, "上漲幅度");
input: check_not_uplimit(1, "漲停打開就先跑");
input: check_buysize(1, "總委買量縮就先跑");
input: bsize_shrink_ratio(0.9, "委買量縮比例");

var: intraBarPersist lastdate(0); { 用來判斷換日 }
var: intraBarPersist dayposition(0); { 每一日剛開始時的部位}
var: intraBarPersist placeorder(false); { 今日觸發了沒 }

if barFreq <> "D" then RaiseRunTimeError("請使用日線");

if date <> lastdate then begin
lastdate = date;
placeorder = false;
dayposition = Position;
if dayposition <> dayposition[1] then begin
SetPosition(dayposition[1], label:="開盤出場");
Print(text(
FormatDate("yyyy/MM/dd", Date), 
",", FormatTime("HH:mm", CurrentTime),
",", NumToStr(dayposition[1], 0),
",", "開盤出場"
));
dayposition = dayposition[1];
end; 
end;

// 底下是觸發進場的條件: 請自由發揮
//
condition1 = CurrentTime >= entry_time;

value1 = 100*(Close - GetField("參考價"))/GetField("參考價");
condition2 = value1 >= up_ratio;
condition3 = Close = High;
condition4 = High < GetField("漲停價");

condition99 = condition1 and condition2 and condition3 and condition4;

if condition99 and not placeorder then begin
placeorder = true;
SetPosition(Position+1, label:="進場"); 
Print(text(
FormatDate("yyyy/MM/dd", Date), 
",", FormatTime("HH:mm", CurrentTime),
",", NumToStr(Position+1, 0),
",", "進場"
));
end;

// 當日提前出場的檢查
//
var: intraBarPersist exitToday(false); { 今日提前出場 }
var: intraBarPersist highestSinceEntry(0); { 紀錄當日進場後的最高價 }
var: intraBarPersist maxbuySizeSinceEntry(0); { 紀錄當日進場後的最大委買量 }

if placeorder and Filled = Position then begin

{ 如果已經成交, 檢查是否要提前出場 }

{ case#1: 如果進場之後, 成交觸及漲停, 可是之後回落, 那就先跑 }

highestSinceEntry = MaxList(Close, highestSinceEntry);
if not exitToday and check_not_uplimit = 1 and 
highestSinceEntry = GetField("漲停價", "D") and Close < highestSinceEntry then begin

exitToday = true;

SetPosition(Position-1, label:="跌破漲停出場"); 
Print(text(
FormatDate("yyyy/MM/dd", Date), 
",", FormatTime("HH:mm", CurrentTime),
",", NumToStr(Position-1, 0),
",", "跌破漲停出場"
));
end;

{ case#2: 如果進場之後, 總委買量縮手, 那就先跑

- 請注意因為總委買量無法回測, 所以僅在執行AT時才檢查(GetInfo("Instance")=5)
- http://xshelp.xq.com.tw/XSHelp/?HelpName=GetInfo&group=GENERALFUNC 

- 委買量縮的判斷方式: 目前漲停, 且五檔委買量加起來 < 目前成交量
}

if not exitToday and check_buysize = 1 and GetInfo("Instance") = 5 then begin

value2 = q_BestBidSize1+q_BestBidSize2+q_BestBidSize3+q_BestBidSize4+q_BestBidSize5;
maxbuySizeSinceEntry = MaxList(value2, maxbuySizeSinceEntry);

if Close = GetField("漲停價", "D") and value2 < maxbuySizeSinceEntry * bsize_shrink_ratio then begin

exitToday = true;

SetPosition(Position-1, label:="委買量縮出場"); 
Print(text(
FormatDate("yyyy/MM/dd", Date), 
",", FormatTime("HH:mm", CurrentTime),
",", NumToStr(Position-1, 0),
",", "委買量縮進場"
));
end;
end; 

end;




 

這個腳本裡因為有用到委買等欄位,所以無法回測,這點得先跟大家說明清楚。

在大格局充滿不確定因素的情況下,台股從投資型市場變成交易型市場,短線或高頻交易變成顯學,我之後也會陸續跟大家討論這方面的議題。

===

● XQ【盤中量化交易模組】($1,000) 七大功能,購買就送【台股進階(原價$300)+小道瓊行情(延遲)】完整介紹 ➤https://utm.to/4apmvq

● 首次訂閱享7天鑑賞期,首次購買輸入官方優惠碼「@XQ8899」,首月可折抵模組費用$100!