不好意思請教一下 以下腳本頻率一分鐘 假設
if high < GetField("收盤價", "D")[1] or low > GetField("收盤價", "D")[1] or
low = GetField("收盤價", "D")[1] then ret = 1
我使用觸發方式是k棒單次內觸發
但我希望達到條件後 只觸發3次後 就別再觸發
請腳本要怎樣寫能限制他達條件後的觸發次數?
我自己有試過幾個方法都不行
再請教請教了 感謝!!!!
不好意思請教一下 以下腳本頻率一分鐘 假設
if high < GetField("收盤價", "D")[1] or low > GetField("收盤價", "D")[1] or
low = GetField("收盤價", "D")[1] then ret = 1
我使用觸發方式是k棒單次內觸發
但我希望達到條件後 只觸發3次後 就別再觸發
請腳本要怎樣寫能限制他達條件後的觸發次數?
我自己有試過幾個方法都不行
再請教請教了 感謝!!!!
宣告一個變數,在每次觸發時加1。
var: intrabarpersist count(0);
if isFirstCall("Date") then count=0;
if count<3 and high < GetField("收盤價", "D")[1] or low > GetField("收盤價", "D")[1] or
low = GetField("收盤價", "D")[1] then
begin
count+=1;
ret = 1;
end;
您好 許教授 我把腳本稍微改這樣比較好判讀
if barfreq <> "Min" or Barinterval <> 1 then RaiseRuntimeError("請設定頻率為1分鐘");
var: intrabarpersist count(0);
value1 = GetQuote("成交金額(元)");
if isFirstCall("Date") then count = 0;
if count < 3 and high < GetField("收盤價", "D")[1] and value1 >= 4000000000 or
low < GetField("收盤價", "D")[1] and value1 >= 4000000000 or
close < GetField("收盤價", "D")[1] and value1 >= 4000000000 then
begin
count += 1;
ret = 1;
end;
print(date,currenttime,count);
count 確實有在紀錄 但可是卻沒有因為count>3 就開始停止觸發
還是一直觸發下去 請問可能問題在哪裡呢
問題出在處理邏輯運算子錯誤。應該改成:
if count < 3 and (high < GetField("收盤價", "D")[1] and value1 >= 4000000000) or
(low < GetField("收盤價", "D")[1] and value1 >= 4000000000) or
(close < GetField("收盤價", "D")[1] and value1 >= 4000000000) then
許教授您好 我腳本照這樣改一樣會一直觸發下去耶
並沒有在count < 3就停止觸發
請問還有可能是什麼原因呢 感謝您
if count < 3 then
if (high < GetField("收盤價", "D")[1] and value1 >= 4000000000) or
(low < GetField("收盤價", "D")[1] and value1 >= 4000000000) or
(close < GetField("收盤價", "D")[1] and value1 >= 4000000000) then
begin
count+=1;
ret=1;
end;
許教授您好
改這樣變成無法觸發耶
因為今日盤強 我有把high low close 改成>GetField("收盤價", "D")[1]
可是改成 if count < 3 then if
變成都沒有觸發任何股票 不知道是為何原因
然後我有試著改成這樣 if ret = 1 then count += 1;
也不行 都會一直觸發不會限制住
還有試著改這樣也不行
if barfreq <> "Min" or Barinterval <> 1 then RaiseRuntimeError("請設定頻率為1分鐘");
var: intrabarpersist count(0);
variable:intraBarPersist ret1(false);
variable:intraBarPersist ret2(false);
variable:intraBarPersist ret3(false);
value1 = GetQuote("成交金額(元)");
if isFirstCall("Date") then count = 0;
if ret1 = false and
(high > GetField("收盤價", "D")[1] and value1 >= 2000000000) or
(low > GetField("收盤價", "D")[1] and value1 >= 2000000000) or
(close > GetField("收盤價", "D")[1] and value1 >= 2000000000) then
begin ret = 1;
ret1 = true;end;
if ret2 = false and ret1 = true and
(high > GetField("收盤價", "D")[1] and value1 >= 2000000000) or
(low > GetField("收盤價", "D")[1] and value1 >= 2000000000) or
(close > GetField("收盤價", "D")[1] and value1 >= 2000000000) then
begin ret = 1;
ret2 = true;end;
只覺得你的邏輯很奇怪,既然low>GetField("收盤價", "D")[1],那high一定也大於GetField("收盤價", "D")[1]。把你真正的想法表達出來,什麼情況要警示。警示三次用我提供的方式應該可以。寫法如下。你只要確認警示的條件是否正確即可。
if barfreq <> "Min" or Barinterval <> 1 then RaiseRuntimeError("請設定頻率為1分鐘"); var: intrabarpersist count(0); if isFirstCall("Date") then count=0; value1 = GetField("成交金額","D"); if count < 3 then if (high > GetField("收盤價", "D")[1] and value1 >= 2000000000) or (low < GetField("收盤價", "D")[1] and value1 >= 2000000000) or (close > GetField("收盤價", "D")[1] and value1 >= 2000000000) then begin count+=1; ret=1; end;
8 評論