使用選股腳本統計在20日內三大法人同買的天數並把20日曾經同買過的個股挑出來

  •   1.6K 
  • 最後發表   Jack  2018 八月 15
Jack 發文於   2017/04/07

大家好,

使用選股腳本統計在20日內三大法人同買的天數並把20日曾經同買過的個股挑出來,程式碼範例腳本如下,提供給大家參考,

 

大致邏輯:

1. 使用For迴圈累加統計在20日內三大法人同買的天數。

2. 使用TrueAny函數判斷20日曾經同買過。

 

今日執行完選股策略後,挑選出來的股票如圖:

 

選股腳本程式碼範例如下:

setbarfreq("D");
input: D(20, "天期數");
variable: Sum1(0),Sum2(0),Sum3(0);
settotalbar(D);

value1 = 0; //  初始化

if IsLastBar = false then return; // 統計在20日內三大法人同買的天數 for value100 = 0 to D - 1 if GetField("外資買賣超")[value100]>0 and GetField("自營商買賣超")[value100]>0 and GetField("投信買賣超")[value100]>0 then value1 += 1; condition1 = TrueAny(GetField("外資買賣超")>0 and GetField("自營商買賣超")>0 and GetField("投信買賣超")>0,D); // 20日曾經同買過 if condition1 then ret = 1; outputfield1(value1,"統計在20日內三大法人同買的天數");

 

以上,供參,有問題歡迎詢問。

排序方式: 標準 | 最新
恰吉 發文於   2017/04/07

 

感謝Jack回覆,

程式碼中GetField("外資買賣超")>0是否指的是買超>0, 而非買賣超加總>0? 若是買賣超加總>0該如何做修正?

謝謝

 

XQ小幫手 發文於   2017/04/07

Hi 恰吉:

您可以參考外資買賣超函數此篇文章連結的說明,以上,謝謝。

恰吉 發文於   2017/04/07

 感謝您的回覆~~

藍靖 發文於   2017/04/21

 請問J大 如何才能寫出最進30天內,控盤者買賣超,買超天數超過十天以上的個股

如圖:

 

Jack 發文於   2017/04/24

藍靖 兄:

上面的語法改一下即可,如下完整範例程式腳本,供參考,若有問題歡迎詢問。

setbarfreq("D");
input: D(30, "天期數"), Accumulate_D(10,"累加天期數");
settotalbar(D);

value1 = 0; //  初始化

if IsLastBar = false then return;   //   在最新的K棒執行即可

//  統計在近30日內控盤者買賣超>0的天數
for value100 = 0 to D - 1
    if GetField("控盤者買賣超張數")[value100] > 0 then value1 += 1;

if value1 > 10 then ret = 1;
//  統計在近30日內控盤者買賣超>0的天數超過10天以上

outputfield1(value1,"統計在30日內控盤者買超的天數");

 

方才用程式範例跑出來的選股畫面如下圖

  • 按讚來自於
  • a229550
媽咪 發文於   2018/08/08

請問小編  如上 如何選出融資30天買超20天的個股?      選股條件並無天數,只有%跟張數

XQ小幫手 發文於   2018/08/13

Hi 媽咪,

您好,請問您撰寫至和步驟卡關呢?以利小幫手提供方向給您參考唷~

融資買超可以使用 融資買進張數 (選股欄位)融資賣出張數 (選股欄位) 撰寫,

30天內有20天達成,可以使用 CountIf 撰寫,CountIF會計算特定期間內符合某些條件的次數,

最後再搭配 if 條件判斷,以上方向供您參考,謝謝。

  • 按讚來自於
  • b229550
媽咪 發文於   2018/08/13

setbarfreq("D");

input: D(30, "天期數"), Accumulate_D(20,"累加天期數");

settotalbar(D);

value1 = 0; // 初始化

if IsLastBar = false then return; // 在最新的K棒執行即可

// 統計在近30日內融資買進張數>0的天數

for value100 = 0 to D - 1

  if GetField("融資買進張數")[value100] > 0 then value1 += 1;

if value1 > 20 then ret = 1;

// 統計在近30日內融資買進張數>0的天數超過20天以上

outputfield1(value1,"融資30日買超天數");

媽咪 發文於   2018/08/13

請小編指教

XQ小幫手 發文於   2018/08/15

Hi 媽咪,

您好,查看您的程式碼,發現您買超的撰寫應該有誤,融資買超為融資買進張數-融資賣出張數,

故 for 迴圈中的程式碼應改為以下程式碼,小幫手方才有跑並與技術分析對照,應該是正確的,請您再試試看,

if GetField("融資買進張數")[value100] - GetField("融資賣出張數")[value100] > 0 then value1 += 1;

完整修改範例如下,以上說明,謝謝。

setbarfreq("D");
input: D(30, "天期數"), Accumulate_D(20,"累加天期數");

settotalbar(D);

value1 = 0; // 初始化

if IsLastBar = false then return; // 在最新的K棒執行即可

// 統計在近30日內融資買進張數>0的天數
for value100 = 0 to D - 1
  if GetField("融資買進張數")[value100] - GetField("融資賣出張數")[value100] > 0 then value1 += 1;
if value1 > Accumulate_D then ret = 1;

// 統計在近30日內融資買進張數>0的天數超過20天以上
outputfield1(value1,"融資30日買超天數");

 

發表回覆
Close