語法問題(突破)

  •   184 
  • 最後發表   股海無涯  2025 十月 22
股海無涯 發文於   2025/10/20

input: timeline(100000);            setinputname(1,"時間切算點");

input: TXT1("限用分鐘線");         setinputname(2,"使用限制");

input: TXT2("高低自開盤起算");     setinputname(3,"使用說明");

 

settotalbar(3);

 

if barfreq <> "Min" then return;

 

variable: RangeHigh(0), RangeLow(999999);

 

// 換日重置

if date <> date[1] then begin

    RangeHigh = 0;

    RangeLow  = 999999;

end;

 

// timeline 前:同步累計「最高/最低」

if Time < timeline then begin

    RangeHigh = maxlist(RangeHigh, High);

    RangeLow  = minlist(RangeLow , Low );

end

else

// timeline(含)之後:若突破上緣或跌破下緣,皆觸發警示

if time >= timeline then begin

    if (RangeHigh > 0      and Close > RangeHigh) and GetField("股本(元)","D") > 0 then ret = 1

    else

    if (RangeLow  < 999999 and Close < RangeLow ) and GetField("股本(元)","D") > 0 then ret = 1;

end;



若我設定排程 100000開始跑 並且在突破或是跌破1000000最高點或最低點時警示
但編譯沒問題 就是不會跳警示

是否是我哪邊有設定錯誤 感謝版上各位大大

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

你的問題出在記錄高低點的變數沒有用intrabarpersist宣告。此外,由於需要時間點判斷,因此最好限定使用何種分鐘頻率。這個問題可以用更有效率的方式處理,以下警示腳本限定使用5分鐘。

if barfreq <> "Min" or barinterval<>5 then raiseRunTimeError("限用5分鐘頻率");
input: timeline(100000,"時間切算點");
var: intraBarPersist RangeHigh(0); 
var: intraBarPersist RangeLow(999999);
if time<timeline then return;
if time=timeline then
    begin
        RangeHigh=GetField("最高價", "D");
        RangeLow=GetField("最低價", "D");
    end
else
    if Close > RangeHigh or Close < RangeLow then ret=1;
 

股海無涯 發文於   2025/10/22

謝謝許教授~

發表回覆
Close