settotalBar應用,腳本內容 底底低

  •   323 
  • 最後發表   里歐  2025 二月 05
里歐 發文於   2025/02/01

底底低 腳本,想增加選到個股的範圍,改成如下




但選股時,發現有問題,01/22,01/20 都抓的到,顯示達成條件為01/15
但01/21抓不到...

排序方式: 標準 | 最新
里歐 發文於   2025/02/01

 

補上腳本全文:

input: n(10,"search天數");

 

settotalBar(n);

 

var: hasCrossOver(false);

 

var: BarCount(0);

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

Value11 = average(close, 5);

Value22 = average(close, 10);

Value33 = average(close, 20);

 

value99 = MaxList(Value11, Value22, Value33); //均線取最大

value66 = MaxList2(Value11, Value22, Value33); //均線第二大

value77 = MinList(Value11, Value22, Value33);

value88 = MinList2(Value11, Value22, Value33);

 

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

// k

//   k

//     k k

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

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

value2=countIf(GetField("主力買賣超張數", "D")>0,4); //買超

condition2 = value2>2  ;

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

if (((close[1] < close[2] and close[2] < close[3]))    or

   (low[1] < low[2] and low[2] < low[3])              or

   (high[1] < high[2] and high[2] < high[3])  )        and

   (countif(close< value77, 3) > 0)                and

   (hasCrossOver=false)                            and

   condition2

   then

 

begin

 

//if (((close < close[1] and close[1] < close[2]))    or

//   (low < low[1] and low[1] < low[2])              or

//   (high < high[1] and high[1] < high[2])  )        and

//   (countif(close< value77, 3) > 0)                and

//   (hasCrossOver=false)                            and

//   condition2

//   then

 

//begin

 

 

hasCrossOver=true;

 

BarCount=currentBar;

 

value111 = close; //儲存突破k棒的收盤價

end;

 

if islastBar then

 

if hasCrossOver=true then

 

begin

 

 

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

//這種用法 有問題 n改變會導致抓不到

 

//n-BarCount = 當日與條件達成k棒之間的幾天

//value1=summation(GetField("主力買賣超張數", "D")[n-BarCount],1);

//value2=countIf(GetField("主力買賣超張數", "D")[n-BarCount]>0,3); //買超

//符合條件當日開始 往前三日(底底低要三根),condition2>2 = 三天都買超

//value3=countIf(GetField("主力買賣超張數", "D")<=0,n-BarCount);//賣超

 

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

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

 

//n-BarCount 為符合底底低 那一瞬間的k棒日,等於第三根(底底低本身就要三根)

//condition2 = value2>2  ;

 

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

condition3 = close  > value77; //站上最低均線

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

if condition2   then ret=1;

 

outputField1(date[n-BarCount],"突破日期");

outputField2(BarCount,"BarCount");

outputField3(value1,"value1");

end;

 

里歐 發文於   2025/02/01

紀錄:

好像是最後回傳 不應該又去用condition2的樣子

if condition2   then ret=1;

 

虎科大許教授 發文於   2025/02/02

有一點要注意,當跑歷史K棒時,hasCrossOver若變成True,它就會一直保留True。我會建議加上Else,讓它有機會恢復為False。

if (((close[1] < close[2] and close[2] < close[3])) or
   (low[1] < low[2] and low[2] < low[3]) or
   (high[1] < high[2] and high[2] < high[3])) and
   (countif(close< value77, 3) > 0) and
   (hasCrossOver=false) and
   condition2 then
    begin
        hasCrossOver=true;
        BarCount=currentBar;
        value111 = close; //儲存突破k棒的收盤價
    end
else hasCrossOver=false;

XS小編 發文於   2025/02/05

Hello 里歐,

 

小編補充,如果您只是要找過去n期是否有發生過條件符合的狀況,那麼不需要加上condition2 (因為在hasCrossOver設為True時就判斷過了) 且hasCrossOver也不用重置沒錯。

發表回覆
Close