選股腳本回測失敗

  •   311 
  • 最後發表   onlineperson  2024 九月 27
onlineperson 發文於   2024/09/22

您好我有寫了一個選股腳本

他平常搜尋股票時能正常運作

但進行回測時卻會失敗

可以幫我確認一下可能原因嗎

 

腳本內容如下:

 

 

 

input:days(90); setinputName(1,"搜尋天數");

input:CCross(5); setinputName(2,"幾天後趨勢交叉");

Array:HH[](0);

Array:LL[](0);

Array:MM[](0);

Array:NN[](0);

Array_SetMaxIndex(HH, days);

Array_SetMaxIndex(LL, days);

Array_SetMaxIndex(MM, days);

Array_SetMaxIndex(NN, days);

 

 

Var:i(0);

Var:i1(0);

Var:j(0);//最大值的位置

Var:k(0);//最小值的位置

Var:m(0);

Var:n(0);

Var:ii(0);

Var:iii(0);

value1 = GetField("High","D");

value2 = GetField("最低價","D");

 

For i =1 to days

begin

HH[i] = i;

HH[i]=GetField("High","D")[i];

END;

For i1 = 1 to days

begin

LL[i1] = i1;

 LL[i1]= GetField("最低價","D")[i1];

 

END;

 

value100 = ExtremesArray(HH,days,1,value3,j);

value200 = ExtremesArray(LL,days,-1,value4,k);

 

IF j >4 

then

 

For ii = 1 to j-3

begin

MM[ii] =ii;

MM[ii] = (value3-HH[ii])/(j-ii);

END;

 

 

IF k >4 

then

 

For iii = 1 to k-3

begin

NN[iii] =iii;

NN[iii] = (LL[iii]-value4)/(k-iii);

END;

 

 

 

value300 = ExtremesArray(MM,j-3,-1,value5,m);

value400 = ExtremesArray(NN,k-3,-1,value6,n);

 

 

 

IF

value3-value5*(j) > value4+value6*(k) and value3-value5*(j+CCross) < value4+value6*(k+CCross) and n>3 and m>3

then 

ret =1;

 

 

   

 

 

Outputfield(1,value3,"壓力線趨勢線頂點");

Outputfield(2,j+1,"頂點在第幾天");

 Outputfield(3,Value5,"壓力線斜率");

 Outputfield(4,m+1,"壓力線點2在第幾天");

 Outputfield(5,HH[m],"壓力線點2");

 Outputfield(6,value4,"支撐線頂點");

 Outputfield(7,k+1,"頂點在第幾天");

Outputfield(8,value6 , "支撐線斜率");

 Outputfield(9,n+1, "支撐線點2在第幾天");

 Outputfield(10,LL[n],"支撐線點2");

Outputfield(11,value3-value5*(j+1), "突破邊界"); 

 

 

 

排序方式: 標準 | 最新
虎科大許教授 發文於   2024/09/23

你的程式「超級」沒效率。你使用value1及value2記錄日最高價及最低價,但整個程式其實都沒有用到它們。另外,計算value100及value200,不需要用到陣列,也不需要跑迴圈。這些都是浪費資源的做法。

要計算過去90天最高價及最低價,只需要simplehighest(GetField("High","D")[1],days)及simplelowest(GetField("Low","D")[1],days)。要抓最高價及最低價的相對位置,可使用simplehighestBar(GetField("High","D")[1],days)及simplelowestBar(GetField("Low","D")[1],days)。

MM及NN一樣不需要用陣列處理。使用變數的時序處理即可。

onlineperson 發文於   2024/09/23

謝謝您 所以是執行效率的問題嗎?  因為我之前不知道 simplehighest這個序列函數 我會再修改看看 謝謝

XS小編 發文於   2024/09/27

Hello onlineperson,

 

小編補充,您可以在 XSHelp 上查詢可用函數以及欄位。

另外網站上的教學區教學影片,裡面有XS語法的基礎和應用可以閱覽。

感謝 虎科大許教授 的熱心回覆。

發表回覆
Close