連續觸發

  •   96 
  • 最後發表   小資男  2025 七月 10
小資男 發文於   2025/07/03

你好可以請教一下,下列的寫法有什麼問題嗎

使用連續觸發是用日頻當今日價格突破10日高點時且成交量>300時觸發第一次警報,當價格持續上升大於第一次0.7%時第二次警報,後續以此類推在往上漲0.7%會第三次警報,寫了下列程式碼為何會只警報第一次


// 變數定義 var: initFlg(0), alertActive(0), firstHigh(0), firstLow(0), refHigh(0), preClose(0); var: intraBarPersist _time(0); var: intraBarPersist _hpoint(0); var: intraBarPersist _hflag(0); var: intraBarPersist _prpre(0); // 每日重置 if Date <> Date[1] then begin _hflag = 0; _hpoint=0; _prpre=0; end; // 技術指標計算 value1 = average(getField("收盤價", "D")[1], 5); // 前5日均價 value2 = ((close - getField("開盤價", "D")) / close) * 100; // 紅K長度 value3 = ((close - getField("參考價", "D")) / getField("參考價", "D")) * 100; // 即時漲幅 value4 = average(value2[1], 5); // 平均漲幅 value5 = highest(getField("最高價", "D")[1], 10); // 前10日高點 value6 = average(getField("成交量", "D")[1], 5); value9=(getField("成交量", "D")/getField("成交量", "D")[1]); value10=getField("成交量", "D"); // 條件觸發第一段突破 if close > value5 and getField("成交量", "D")> 300 and _hflag = 0 then begin ret = 1; _time = time; _hflag += 1; _prpre=value3; _hpoint = value3 + 0.7; end; // 創高後每漲 0.7% 觸發一次 if _hflag > 0 and _prpre>_hpoint then begin ret = 1; _time = time; _hflag += 1; _prpre=value3; _hpoint = _prpre + 0.7; end;

 

 

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/07/03

if _hflag > 0 and value3>_hpoint then begin

小資男 發文於   2025/07/09

設定日頻連續觸發,會連續一直觸發不會,創高後每漲 0.7% 才觸發,可以請問問題出在哪裡嗎

intrabarpersist這樣的運用有問題嗎

虎科大許教授 發文於   2025/07/09

若用日頻率,則date<>date[1]永遠會成立,代表以下三個變數永遠都是0。

_hflag = 0;

_hpoint=0;

_prpre=0;

則_hflag += 1與_prpre=value3都是白設,且_hflag > 0 and _prpre>_hpoint不會成立,

小資男 發文於   2025/07/10

那我取消date<>date[1]用起始0測試看看,感謝

虎科大許教授 發文於   2025/07/10

不論使用什麼頻率,都請改用isFirstCall處理:

if isFirstCall("Date") then 
    begin
        _hflag = 0;
        _hpoint=0;
        _prpre=0;
    end;

發表回覆
Close