線性回歸和計算布林通道時執行速度很慢

  •   41 
  • 最後發表   jerrys910114  2025 十二月 21
jerrys910114 發文於   2025/12/21

如題,想要寫一個程式尋找20天內線性回歸和布林通道LB1, LB2的低點

但在XQ疊圖執行時每次都要跑非常久

請問有方式加速嗎,或是語法哪裡有問題

再請麻煩幫忙解惑感謝

 

var:val1(0), pred(0), ax(0), b(0), rad(0), cnt(0), num0(0);

input: Day(20);

val1 = linearreg(close,Day,-1,ax,rad,b,num0);

 

 

var: sum(0), diff(0), std(0);

Array: closeArr[60](0);

sum = 0;

diff = 0;

std = 0;

 

for cnt = 1 to Day

   begin

      pred = cnt * ax + b;

      closeArr[Day + 1 - cnt] = GetField("Close", "D")[Day-cnt];

      diff = pred - closeArr[Day + 1 - cnt];

      sum = diff * diff + sum;

   end;

 

std = SquareRoot(sum/Day);

var: LB1(0), LB2(0), LR1(0), LR2(0), val3(0), val2(0);

for cnt = 1 to Day

   begin

      LB1 = bollingerBand(closeArr[Day - cnt + 1],Day,-1);

      LB2 = bollingerBand(closeArr[Day - cnt + 1],Day,-2);

      LR1 = cnt * ax + b - std;

      LR2 = cnt * ax + b - std * 2;

      val3 = MaxList(LB1, LR1);

      val2 = MinList(LB1, LR1);

      val1 = MinList(LB2, LR2);

      PlotLine(3, CurrentBar - Day + cnt, val3, CurrentBar - Day + cnt, val3, "line3", add:=1);

      PlotLine(4, CurrentBar - Day + cnt, val2, CurrentBar - Day + cnt, val2, "line2", add:=1);

      PlotLine(5, CurrentBar - Day + cnt, val1, CurrentBar - Day + cnt, val1, "line1", add:=1);

   end;

 

虎科大許教授 發文於   2025/12/21

你的程式每根K棒都要跑兩個迴圈,加上linearreg函數的一個迴圈,總管3個迴圈,花1分多鐘運算是很正常的。

closeArr陣列只需要20個元素:

Array: closeArr[20](0);

發表回覆
Close