選股反覆發生錯誤,顯示:請重新執行策略,取得最新的選股結果(4)

  •   264 
  • 最後發表   kevin0300068  2019 十一月 15
kevin0300068 發文於   2019/11/13

小幫手您好,

剛剛使用選股策略時發生以下錯誤,此策略之前都沒發生過此問題,已經連續刷幾次都是一樣的錯誤結果。

請問這個問題是什麼造成的呢? 運算量過大嗎?

 

後來發現問題好像出在第七行,if currentbar<gettotalbar then return; //只計算最後一筆資料

刪除之後就沒有此問題了。但是這個語法我之前用都沒有問題耶,是編譯器有改版嗎?

 

如果我想要在第八行之上全部計算,但第八行之下只要運算最後一筆資料,請問該如何改呢? 謝謝。

variable: KBar(0),i(0),Part(0),Gain(0),r(0);

setbarfreq("D");
settotalbar(10);

KBar=60;

if currentbar<gettotalbar then return; //只計算最後一筆資料

Gain=1;

array: Team[](0);   //先宣告一個array,紀錄分價量用。
variable: arrT_size(0); //Team[]的陣列大小
variable: sky(0),base(0);

sky=ceiling(highest(high, kbar)/Gain)*Gain + Gain;
base=floor(lowest(low, kbar)/Gain)*Gain - Gain;

Part = (sky - base) / Gain;
array_setmaxindex(Team, Part+1);
arrT_size=Array_GetMaxIndex(Team);

var: Pa(0);
variable: B(0),Sum(0);
variable: H1(0);

for i = 0 to arrT_size-1 //  用迴圈的方式記錄各個區間的分價量。
 for B = 0 to KBar-1
        begin
            if  close[B] >= base + Gain * (i - 1) and close[B] <= base + Gain * (i + 1) then   
                Team[i + 1] = Team[i + 1] + volume[B];
        end;


My_nthextremesarray(Team, arrT_size, 1, 1, H1, i);
Pa= base + Gain * (i - 1);


//Array歸零
Array_SetValRange(Team, 1, arrT_size, 0);

ret=1;

//********************************************************************************************************//
outputfield(1,Pa,2,"Pa");

 

排序方式: 標準 | 最新
kevin0300068 發文於   2019/11/15

XQ小幫手您好,

我發現問題可能出在第7行與第36行這兩段程式碼,

把其中一段移除就不會有以上錯誤,但結果也不是我想要的了。

以前相同的程式碼從來都沒有發生這樣的問題,

如果本來很穩定的程式碼,常常因為一些不知原因的理由突然不能用了,

這實在會很讓人困擾且難以維護。

 

附上第36行函式,希望問題能快點被解決。。。。。

SetBarMode(1);

input:
    SourceArray[MaxSize](numericarray),     //來源陣列
    Size(numericsimple),                    //來源陣列大小
    N(numericsimple),                       //極值順序
    DscAsc(numericsimple),                  //極大值(1)或極小值(-1)
    refExtremeValue(numericref),            //輸出極值
    refExtremeIndex(numericref);            //輸出極值陣列索引值

array: ntharrayA[1200](0),ntharrayB[1200](0);
variable: x(0),y(0),temp(0);

if N > Size or Size > MinList(MaxSize,1200) then
begin 
    refExtremeValue = 0;
    refExtremeIndex = -1;
    my_NthExtremesArray = -1;
end
else 
begin
    for x = 0 to Size - 1
    begin
        ntharrayA[x] = SourceArray[x];
        ntharrayB[x] = x;
    end;
    for x=0 to Size - 2
    begin
        for y = x+1 to Size - 1
        begin
            if((DscAsc = 1 and ntharrayA[x] < ntharrayA[y] )or
                (DscAsc = -1 and ntharrayA[x] > ntharrayA[y])) then
            begin
                temp = ntharrayA[x];
                ntharrayA[x] = ntharrayA[y];
                ntharrayA[y] = temp;

                temp = ntharrayB[x];
                ntharrayB[x] = ntharrayB[y];
                ntharrayB[y] = temp;
            end;
        end;
    end;
    refExtremeValue = ntharrayA[N-1];
    refExtremeIndex = ntharrayB[N-1];
    my_NthExtremesArray = 1;
end;

XQ小幫手 發文於   2019/11/15

Hi kevin0300068,

您好,謝謝您的回饋,小幫手已請相關人員確認中,待相關人員確認後再向您說明,謝謝。

發表回覆
Close