日頻率選股為何卡住選不出來?

  •   204 
  • 最後發表   XQYi  2024 六月 18
XQYi 發文於   2024/06/17

選股程式碼如下,執行頻率為日

settotalBar(500);

var: intrabarpersist DB1(0) , intrabarpersist DS2(0) , intrabarpersist WB3(0) ,intrabarpersist WS4(0) ;

 

if ema(close,12) cross Over ema(close,26)  then begin 

DB1=currentBar;//EMA 12 向上 26,紀錄日多K號

value1=DB1;

end;

 

if ema(close,12) cross under ema(close,26)   then begin

DS2=currentBar; //EMA 12 向下 26,紀錄日空K號

value2=DS2;

 end;

 

if xf_EMA("W", Close,12) cross Over xf_EMA("W", Close,26) then begin

WB3=currentBar; //周頻率 EMA金叉,紀錄周多K號

value3=WB3;

end;

 

if xf_EMA("W", Close,12) cross under xf_EMA("W", Close,26) then begin

WS4=currentBar;//周頻率 EMA死叉,紀錄周空K號

value4=WS4;

end;

 

MACD(WeightedClose,12,26,9,value13,value14,value15); //取得OSC 日多空柱圖值

condition6 = value15[1] <=0 and value15 > 0 and trueAll(value15 >value15[1],2); //當日轉為多方時,且連續上升2天

 

 

if  

value3 > value4 //目前處於周多方

and value1 > value2 //目前處於日多方

and condition6  //MACD柱圖由負轉正。至少上升兩天

and GetField("每股淨值(元)","Q") >=5.1

and (GetSymbolInfo("處置股")=false 

and GetSymbolInfo("買賣現沖")=true 

or GetSymbolInfo("先買現沖")=true)

then ret=1; //執行選股

 

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

你的程式很沒有效率,跑起來自然很慢。寫程式,不是能跑就好,而是有效率且正確地執行(這部份需要對XQ運作邏輯有一定的認識)。特別是你又使用跨頻率處理,那就更要對程式是否有效率斤斤計較。

幾個問題:

(1)選股腳本宣告變數時,不需要intrabarpersist,這是在交易腳本逐筆洗價時才會使用到。你宣告的這四個變數,其實沒使用到,亦即可以不必宣告。

(2)一根一根K棒跑,記錄黃金交叉與死亡交叉的K棒編號,以判斷到底哪個最後出現,其實可以在最後一根K棒用BarsLast函數處理。

(3)用選股腳本判斷是否是處置股、可否買賣現沖或先買現沖,並不是那麼必要,特別是監控選出來的股票以自動交易,因為今天晚上選出來不是處置股,但明天交易時可能就變成處置股了。這部份只要明天用交易腳本判斷即可。

(4)預設選股的範圍是上市櫃普通股全部,超過1800檔,若程式沒效率,就會卡住。可考慮針對特定成份股,例如台灣50成份股,進行選股,或是將要選的股票放入自選商品組合。

(5)跨週頻率計算指標,也需要使用週頻率資料,應該將Close改成GetField("收盤價", "W")。

(6)將腳本改寫如下,並將選股範圍設定為台灣五十成分股(系統),即可選出6/17的三檔股票。

settotalBar(500);

MACD(WeightedClose,12,26,9,value13,value14,value15); //取得OSC 日多空柱圖值

if isLastBar then

begin

value1=barsLast(ema(close,12) cross Over ema(close,26));

value2=barsLast(ema(close,12) cross under ema(close,26));

value3=barsLast(xf_EMA("W", GetField("收盤價", "W"),12) cross Over xf_EMA("W", GetField("收盤價", "W"),26));

value4=barsLast(xf_EMA("W", GetField("收盤價", "W"),12) cross under xf_EMA("W", GetField("收盤價", "W"),26));

condition6 = value15[1] <=0 and value15 > 0 and trueAll(value15 >value15[1],2); //當日轉為多方時,且連續上升2天

if value3 < value4 //目前處於周多方

and value1 < value2 //目前處於日多方

and condition6  //MACD柱圖由負轉正。至少上升兩天

and GetField("每股淨值(元)","Q") >=5.1

and (GetSymbolInfo("處置股")=false 

and GetSymbolInfo("買賣現沖")=true 

or GetSymbolInfo("先買現沖")=true)

then ret=1; //執行選股

end;

XQYi 發文於   2024/06/18

1.不需要intrabarpersist=>原來沒有,跑不出來以為抓不到才加上的。

2.K棒用BarsLast函數處理 =>待會試試也用在指標上

3.用選股腳本判斷是否是處置股=>上次沒留意交易腳本當沖卡住
(因為交易腳本改來改去的測試交易情況),所以選股也在寫進去

4.因為想從技術面去看能撈出那些股票,線型差異性,做交易想法設計的觀察用

5.跨頻率,不就是不想在該頻率下使用但想抓頻率的資料而設計,所以總是忘了再指定W?

6. 一次能處理的別拆成多次,似乎不適合用此,得改這習慣,

昨天有將拆成周、日兩部分,跑出30多檔,感謝修正,稍後測試

(可能程式碼內容,有觀察到拆開和不拆開,選出來的股票會有不同商品)

 

 

 

發表回覆
Close