取a日資料,跟n日後的b日當天資料,比較

  •   454 
  • 最後發表   里歐  2024 六月 30
里歐 發文於   2024/05/26

如標題,想要用符合特定條件的當日條件,跟符合另一個條件比對。

例如:

n日之前,a日曾突破前高+爆量,
那n日後的今天b,a~b 這幾天法人買超量>0(條件1),並且b日收盤價跟a日比較<4%(條件2)
(n不希望寫死,大約3<n<10這樣),如下圖,兩種顏色的2都應該抓到


====================================

目前"分段"只寫的出前半段

例如

condition999 =  condition1(突破前高) and condition2

condition111 = TrueAny(condition999, n日);

 

if     condition3(當日需求ex:漲3%以上) and condition111(前段條件) then ret =1;

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

若你只缺後半段的condition3,則可撰寫如下:

condition3=rateofChange(c,1)>3;

里歐 發文於   2024/06/02

我的舉例不太好,我的需求是 : n不希望寫死,(大約3<n<10這樣)

我的後半段條件,是想要n日內
1.買超>賣超(n日加總)  或者
2.n日 買超次數 > 賣超次數 (當日結算)

問題點:(1.2兩點優先)
1. n不想寫死,如何 記住 前半段條件達成當日,讓我可以計算已經過了幾天
2. 假設 計算買超在10內需大於一半,由於n沒寫死,不知如何計算 "是否大於一半"
3.(其他問題)
後半段其他條件,希望能當日收盤價跟滿足條件1的收盤價比較,漲幅小於5%
4.(其他問題,感覺較難)
上述三點符合後,確認符合條件1當日收盤價,跟一直到當日之間所有k棒最高價,差距小於6%

舉例:

如下圖,價量突破當作條件1,條件2是條件1達成開始計算10日內的 主力/法人買賣超狀況
假設 條件設 "主力"/買超次數/大於一半,那第九日失敗,第七日達成


第九日:(2024/05/20)


第七日:2024/05/16

虎科大許教授 發文於   2024/06/03

//這n天的第一天(亦即a)突破更早n天最高價且量超過更早n天均量的50%

//這n天主力買超金額大於賣超金額,且買超次數大於賣超次數

input: n(3,"天數");

input: v0(50,"量超過均量趴數");

settotalBar(n);

if islastBar then

begin

condition1=c[n-1] cross over highest(h[n],n) 

and v[n-1]>average(v[n],n)*(1+v0/100)

and summation(GetField("主力買賣超張數", "D"),n)>0

and countIf(GetField("主力買賣超張數", "D")>0,n)>countIf(GetField("主力買賣超張數", "D")<=0,n);

if condition1 then ret=1;

end;

XS小編 發文於   2024/06/06

Hello 里歐,

 

小編補充,如果您不希望寫死的話,只要使用 input 參數來設定所需期間即可。

舉例來說:

input: _N(10);  

 

value1 = _N / 2;

這樣 _N 就可以在策略中調整,而 value1 就會是 _N 的一半。

要計算符合條件數量,可以參考 CountIf 函數。

要計算漲跌幅只要拿當下的成交價和 _N 期前的成交價作計算即可。

 

小編建議您先觀看網站上的教學區教學影片,裡面有XS語法的基礎和應用可以閱覽。

 

感謝 虎科大許教授 的熱心回覆。

里歐 發文於   2024/06/09

感謝兩位的回覆!!

之前都是用 TrueAny() 來拆分兩個時間點的 condition
許教授的方式似乎更直接&簡潔
=============================================

[更新]這段寫得很亂,先只留for部份的腳本,其餘提問已在下方重新留言發問

需求:
例如:3<n<10,3寫死,10為input。  5/1(a條件達成),5/4,5/4,...5/11主力條件(b條件)若符合就都要抓到。
=============================================

目前想到用for 修改,讓a條件 3~10都跑一遍,但是抓到結果有問題,還正在看,先把目前修改的腳本也附上

 不知道如何把 for回圈裡面抓到的所有個股(i=1,i=2,...)全存起來

//以下是for的部份
For i = 3 to n

Begin

    if c[i-1] cross over highest(h[i],5) //前一日收盤價 沒超過最高價?

    //後面那個n先寫死,代表突破範圍

    and v[i-1]>average(v[i],4)*(1+v0/100) //?

    //後面那個n先寫死,代表均量範圍     

    and summation(GetField("主力買賣超張數", "D"),i)>0 //這n日 總張數>0

    and countIf(GetField("主力買賣超張數", "D")>0,i)>countIf(GetField("主力買賣超張數", "D")<=0,i) then

   //i從3 to n, 如何把i=3,i=4,...i=n時抓到的個股都存起來

End;

虎科大許教授 發文於   2024/06/10

ex: 5日前突破前高(a條件),接下來三日後,主力買超>賣超(b條件),抓到。
      同時四日後 主力買超>賣超(b條件),也要抓到。

你時間軸交待不清楚。5天前突破前高,代表包含今天,你至少要有6天的資料。

[5]那天突破前高,[4]、[3]、[2]主力買超>賣超。然後四天後,亦即[1]又是主力買超>賣超?我都被搞混了。

任務若沒說清楚,其他人很難幫上忙。

建議你,舉兩個例子,一個是5天前突破前高(前高要定義是更早的幾天高點),一個是10天前突破前高,然後各自說明突破後一直到選股的今天,你要做什麼。

里歐 發文於   2024/06/10

抱歉還在整理,沒想到假日會得到回覆,更新如下
===========================================
目前腳本問題點:
若直接使用許教授腳本,遇到的問題是a條件"必須"是五(n)日前達成。

需求舉例:
天數設為6時,[6-1]天前符合a條件,且後續符合b條件,抓到個股。
需求類似是6/6, 6/5使用選股也要因[n-1]天符合a條件抓到 這檔。



舉例2,同上概念,目前腳本為淺藍色ab條件抓到個股(n設為10)
需求是紫色b的日期也要抓到該個股




想到的可能解法是用for, 
使設n時,符合a條件的條件非固定值,而是查詢當日,3(寫死)~n日前的符合a條件結果都跑一次

語法問題點:
不知道如何把 for回圈裡面抓到的所有個股(i=1,i=2,...)全存起來

虎科大許教授 發文於   2024/06/10

我不清楚你所謂的把抓到的個股都存起來的意思。若你想跨域,需要全域變數。目前XQ並不提供全域變數。

我的理解是,N天前帶量突破,這N天以來符合兩個主力買賣超的條件,且今天相對於突破當天的漲幅不超過4%。

若這是你要的,則程式如下,若不是你要的,則愛莫能助。

input: n(5,"N天前突破");

input: v0(50,"量超過均量趴數");

input: percent(4,"漲幅上限");

settotalBar(n);

if islastBar then

begin

condition1=c[n-1] cross over highest(h[n],n) 

and v[n-1]>average(v[n],n)*(1+v0/100)

and summation(GetField("主力買賣超張數", "D"),n)>0

and countIf(GetField("主力買賣超張數", "D")>0,n)>countIf(GetField("主力買賣超張數", "D")<=0,n)

and rateOfChange(c,n)<percent;

if condition1 then ret=1;

end;

里歐 發文於   2024/06/10

感謝許教授,我想再試試解釋一次需求,
我也會先自己繼續研究這題,再次感謝兩位。
===============================================================
我的理解是,N天前帶量突破,這N天以來符合兩個主力買賣超的條件
    --> 是的,只是N我想寫成範圍,不是固定值。
===============================================================

我直接用原先許教授的腳本,跑出的結果為範例,提出我的需求如下

目前:
設定 天數 10 能找到  2601 (2024/06/07),但是06/06,06/05因為A條件"必須是10天前",所以無法抓到個股


需求:
希望腳本跟上面一樣的設定,但是在06/06,06/05,0x/0x 只要b條件也符合,也要能抓到這檔




需求就同上述,設定相同下,06/06,06/05,0x/0x 只要b條件也符合,也要能抓到這檔,


下面是note補充,如果反而又讓大家混亂,麻煩先略過。
以上。
=======================================
note1:
上面範例是 2024/06/07,參數10天,可找到2601。改日期06/06抓不到。
以下是2024/06/06搜尋 ,參數改9天,可以找到2601。
需求就是腳本 改成不需要這樣手動改參數一個一個找,06/07,06/06 參數設10天,都要能找到


note2:
(前面留言,提到for是想說能不能 天數的設定 不要n=10,  而是 n= 1~10的"概念")
(或者2~10, 2~12, 3~10 可調整的概念)

虎科大許教授 發文於   2024/06/10

看起來任務似乎是:

N日之內,只要有帶量突破,則從突破日到今天之間,只要符合兩個主力買賣超且今天漲幅小於4%,就把股票選出來。對吧?若是這樣,不需要跑迴圈。

顯示更多回應 發表回覆
Close