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

但選股時,發現有問題,01/22,01/20 都抓的到,顯示達成條件為01/15
但01/21抓不到...
底底低 腳本,想增加選到個股的範圍,改成如下

但選股時,發現有問題,01/22,01/20 都抓的到,顯示達成條件為01/15
但01/21抓不到...
補上腳本全文:
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;
紀錄:
好像是最後回傳 不應該又去用condition2的樣子
if condition2 then ret=1;
有一點要注意,當跑歷史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;
Hello 里歐,
小編補充,如果您只是要找過去n期是否有發生過條件符合的狀況,那麼不需要加上condition2 (因為在hasCrossOver設為True時就判斷過了) 且hasCrossOver也不用重置沒錯。
4 評論