用TrueAny() 寫的兩個時間段腳本,相關問題

  •   69 
  • 最後發表   里歐  2024 四月 16
里歐 發文於   2024/04/06

用TrueAny() 寫的腳本,大致是,曾符合爆量突破前高,後續拉回時篩選出來

想問n日前符合條件的k棒資訊,我要如何使用,
例如
1.符合條件當日k棒收盤價,運用該close 再寫一個條件,比如兩日之間 最高價不得超過,符合突破當日k棒最高價的n%
2.需得知符合條件當日是哪一天,然後計算當日跟今日之間  法人/主力 買超的天數-賣超的天數>0

例如以下個股是透過 目前腳本抓到
綠色箭頭是第一個時間段的條件,突破。3/18
粉色是第二時間段抓到的。3/21 3/25



排序方式: 標準 | 最新
里歐 發文於   2024/04/06

附上腳本

//突破前高

input:N(2); 

condition5 = GetField("收盤價") >= Highest(GetField("最高價")[1],N);

 

condition6 = close>close[1]*1.024; //

//=================================================================

 

//價量

input:VolumeLimit(10000);

input:VolumeCloseLimit(800000); //參考 價100, 8000張 //當沖可能要設更高 150*8000 = 1200000 ?

 

Value1 = GetField("成交量");

 

If close < 50 Then

condition11 = Volume > 3000;

If close > 50 and close < 200 Then 

condition11 = Volume > 2000;

If close >= 200 and close <= 500 Then 

condition11 = Volume > 1000;

If close > 500 Then 

condition11 = Volume > 100;

 

// Volume*close > VolumeCloseLimit-1 Then

condition7 = Volume > Average(Volume[1], 5) * 2;

condition12 = Volume > Volume[1] * 2;

//Else

//condition7 = Volume > Average(Volume[1], 5) * 2.5;

 

condition8 = Value1 > VolumeLimit-1;

 

condition9 = Volume*close > VolumeCloseLimit-1;

//if   condition7 and (condition8 or condition9) then ret =1;

//=================================================================

 

//====後續篩選,均線糾結程度===============================================================

Value1 = average(close, 5);

Value2 = average(close, 10);

Value3 = average(close, 20);

 

 

value5 = MaxList(Value1, Value2, Value3); //均線取最大

value6 = MaxList2(Value1, Value2, Value3); //均線第二大

value7 = MinList(Value1, Value2, Value3);

value8 = MinList2(Value1, Value2, Value3);

 

input:DistMaxMin(1.0371); 

input:DistMaxMid(1.026);

input:DistMidMin(1.026); 

 

condition1 = close > value7; //收盤價大於最低的均線

 

value9 = value5/value7;

condition2 = value9 < DistMaxMin; //差距最大的兩條均線,差距需小於0.35

 

value10 = value5/value6;

condition3 = value10 < DistMaxMid; //最大均線跟第二大均線,差距小於0.26

value11 = value6/value7;

condition4 = value11 < DistMidMin; //第二大均線跟最小均線,差距小於0.26

 

input:DistCloseMax(1.04); 

condition10 = close/value5 < DistCloseMax;

//condition11 = close

//=============================================================

//過去三個月是否有紅k棒 超過3%? 過濾平穩股票  //但會錯過鴻海 2317 03/04

//input:j(100); 

//value12 = close/close[1];

//value13 = countif(value12 > 1.03, j);

//condition11 = value13 > 1;

//=============================================================

input:k(7);

condition999 =  (condition5 and condition6)  and ((condition7 or condition12) and (condition8 or condition9));

condition111 = TrueAny(condition999, k);

 

 

if    condition1 and condition2 and (condition3 or condition4) and condition10 and condition111 then ret =1;

XS小編 發文於   2024/04/10

Hello 里歐,

 

小編不太確定您的條件為何,不過就您的描述來看應該是要分兩個階段來判斷。

且需要使用 BarsLast 或是用變數來記錄條件1的相對距離。

 

1.符合條件當日k棒收盤價,運用該close 再寫一個條件,比如兩日之間 最高價不得超過,符合突破當日k棒最高價的n%

=> 這邊的兩日除了當日以外是哪一日?

小編會如此來判斷:

condition1 = 符合條件 and simplehighest(high, 兩日間的距離) <= high * 1.0n;

 

2.需得知符合條件當日是哪一天,然後計算當日跟今日之間  法人/主力 買超的天數-賣超的天數>0

 

您可以使用 BarsLast 或變數來判斷上次條件的相對距離,在計算兩者間符合買超的天數。

value1 = BarsLast(condition1);   //condition1 最近一次符合的相對距離

condition2 = value1 > 0 and countif(GetField("法人買賣超", "D") > 0, value1) > countif(GetField("法人買賣超", "D") < 0, value1);    //相對距離內的法人買超天數大於賣超天數

condition3 = value1 > 0 and countif(GetField("主力買賣超", "D") > 0, value1) > countif(GetField("主力買賣超", "D") < 0, value1);    //相對距離內的主力買超天數大於賣超天數

這樣只要condition2 和 condition3 成立就代表 condition1 在前 value1 根Bar有符合過,從該根Bar到現在這根Bar的買超大於賣超。

 

或是用變數來記錄條件符合後買超 - 賣超天數:

if condition1 then begin 

    //條件成立後如果當天買超的話變數等於1,賣超的話則等於-1,否則為0

    if GetField("法人買賣超", "D") > 0 then value1 = 1 else if GetField("法人買賣超", "D") < 0 then valeu1 = -1 else value1 = 0;

    if GetField("主力買賣超", "D") > 0 then value1 = 1 else if GetField("主力買賣超", "D") < 0 then valeu1 = -1 else value1 = 0;

    value3 = 0;

    end

else begin

    //如果當天是買超變數加1,賣超的話減1

    if GetField("法人買賣超", "D") > 0 then value1 += 1 else if GetField("法人買賣超", "D") < 0 then valeu1 -= 1;

    if GetField("主力買賣超", "D") > 0 then value1 += 1 else if GetField("主力買賣超", "D") < 0 then valeu1 -= 1;

    value3 += 1;

    end;

 

condition2 = condition1[value3] and value1 > 0 and value2 > 0;   //相對距離前條件1有成立,且這段時間內買超大於賣超

里歐 發文於   2024/04/14

您好,想先提外問ㄧ下,如果我想用三天內法人買賣超張數 總合>0,要怎麼寫

XS小編 發文於   2024/04/16

Hello 里歐,

 

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

 

可以使用 Summation 來加總一定期數的資料。

舉例來說 summation(getfield("法人買賣超張數", "D"), 3) 就會是加總近3日的法人買賣超。

發表回覆
Close