如何運用AI修正XS程式碼錯誤

2Shares
Image

在使用量化交易實驗室的AI撰寫XS程式碼的時候,如果編譯出現錯誤,對於XS程式碼不熟悉的朋友,往往不知道解決,本文將會使用實際案例,分享我的解決方式,希望能幫助更多人順利的運用AI來寫程式。

1. 前言

現在很多人都在用AI來寫程式,使用XQ的你,是不是超級羨慕也去嘗試讓AI撰寫XS程式碼了呢? 相信你試過之後的結果都會很失望吧,你以為他給你的是XS程式碼,但常常都是其他軟體的語法。

Image Not Found

這樣的結果是很正常的,主要是因為網路上可供AI學習的XS資源並不多,無法讓AI有效的學習,只能拿其他程式來忽悠你了。

想要讓AI能較為正確的撰寫XS程式碼,是需要另外訓練的,而市場上,只有量化實驗室的AI有針對XS語法做訓練,能夠較為正確的寫出XS程式碼,為何我會寫較為正確呢? 因為AI還是有其侷限性,不可能每次都寫出100%正確的程式碼,有錯都是很正常的。

Image Not Found

既然AI會出錯,那學習如何debug就會是非常重要的事,尤其是對XS還不熟悉的朋友,就一定要培養這樣的能力,至於如何學,我也還沒想出啥系統化的方式,所以先分享我debug的方式,或許能對你有些幫助。

2. 案例說明

以下是網友詢問的問題,網友想要寫一個XS指標,能夠找出最近一段時間內的最高點、次高點、最低點跟次低點並畫出來,程式碼已經讓AI寫出來了,但一直無法編譯成功

Image Not Found

完整有問題的程式碼我放在最下面,想要練習debug過程的,可以拿去試試

3. Debug過程

3.1 先編譯了解有那些錯誤

當拿到程式碼的時候,我第一個步驟不是去解讀程式碼,自己程式能力也沒很好,還是先丟給XScript編輯器編譯,看看有怎樣的錯誤再說,編譯後出現了如下方圖片的錯誤訊息,似乎有一堆錯誤,看了是不是頭很暈呢?

Image Not Found

其實,有很多錯誤似乎是一樣的,我們可以點錯誤描述那照錯誤名稱排序,就可以得到如下圖的排列結果,是不是頓時覺得錯誤少了許多呢

Image Not Found

3.2 先解決簡單的錯誤

當編譯有錯誤的時候,可能大部分的人會把所有錯誤一次都丟給AI去修正,但有的時候,這樣反而會越改問題越多,我的建議是,每次解決一兩個問題,這樣就算沒調整好,自己要debug也較容易。

另外,有些問題的產生是有因果關係的,把簡單的問題修正後,很有可能其他的問題就解決了還有就是,看到錯誤不定都要AI幫你改,有時跟AI來來回回反而浪費時間,簡單的錯誤可以嘗試自己改,順便培養程式的能力。以下先來修正兩個錯誤

錯誤1: Daily開頭為保留字目前版本不支援DailyClose語法

這個錯誤,應該很容易理解,就是名稱有問題,不能用Daily做開頭,由於這個錯誤出現在好幾個地方,所以我會偷懶點,讓AI去幫我改,避免漏改了。

錯誤2: “dailyClose” 沒有宣告,請用 Vars: 的方式宣告,冒號後面是變數名稱再用括號填入預設值。例如: Vars:varA(100); 如果要宣告陣列請用 Arrays: 冒號後面是名稱再用 [] 設定維度與大小,括號填入預設值。例如 Arrays:arr1[10](0);


這個錯誤應該也算簡單好解決,找到原始的程式碼,可以看到DailyClose是個陣列,但是寫成

array: dailyclose ;

跟上面的範例相比,是不是就很容易看出dailyclose後面,缺了維度與大小,如果不知怎麼填,可以看看函數說明,或是讓AI幫你改寫,我下的prompt如下

以下程式碼出現兩個錯誤,請幫我修正
1. 20250415v32329「Daily」開頭為保留字, 目前版本不支援「dailyClose」語法。
2. 20250415v32313變數 “dailyClose” 沒有宣告。

下面為程式碼~~~

Image Not Found

很幸運的,上面兩個錯誤修正後,編譯就成功了

Image Not Found

3.3 儘量採用內建函數

編譯成功後,想說丟到指標應該就能畫出來了吧,果然,事情哪有這麼簡單,出來的壓力支撐數值都為0

Image Not Found

像這種錯誤,通常就是計算的邏輯上有問題,而你如果有常常在用量化交易實驗室AI,應該會發現一個狀況,就是AI很喜歡自己寫計算式,不愛用XQ內建的函數來處理,自己寫沒問題,但出錯要debug對較不同程式的人就是個很頭痛的事了

如下方這段程式碼,看不懂程式碼,也可以看備註的說明,是在每天繼續收盤價,看到這個,只要你有寫過XS程式碼,應該馬上會有個疑問,為何要寫的這麼複雜,XS要抓到不同天的收盤價,不就是用中括號加上距離現在幾根K棒就可以了嗎? 如想要取得兩天前的收盤價,就用close[2]或getfield(“close”,”D”)

Image Not Found

還有下面這段程式碼,看備註是要取得最近一段時間的最高點跟次高點,以及最低點跟次低點,此時可以先想想,XS的內建函數是不是就有可能做到呢?

Image Not Found

想要知道有沒有內建可用的,有幾種方法

1. 可以試試查看函數列表,但這還是最好對函數有點熟悉的人會比較好找

2.直接問問AI有沒有啥的函數可以用,如我問XQ有什麼內建函數可以找出一段數列中第n個最高值,AI就很聰明的告訴我有NthHighest這個函數可以用,不過,AI有時候也會耍笨,這個時候就要用第三個方法了。

Image Not Found

3. 第三個方式是大家最熟悉的,請出谷哥大神搜一搜,我下的搜尋指令是”XQ 找最高點跟次高點”,從搜尋結果中,我們就可以看到相關的討論或是函數說明,進去仔細看下,就可以確定是要用nthhighest這個函數了

Image Not Found

3.4 用內建函數替代原本的計算式

經過上面確認有內建函數可以用之後,就可以讓AI幫忙來改寫了,收盤價問題跟Nthhighest函數的prompt如下

Image Not Found

Image Not Found

最終改寫出如下的程式碼,從原本70多行的程式碼縮減到14行,且程式碼也乾淨許多

Image Not Found

3.5 手動調整錯誤

程式寫到這,應該沒啥錯誤了,但眼尖的你,可能會發現還是有點問題,如Nthhighest是需要三個參數的,但程式碼只有兩個,還有就是如果設定Settotalbar,在指標上就不會畫太長,而這點小錯誤,我大概就是手動自己修正了,修改如下

input: N(126, "近N日 (交易日) 數");
var: H1(0), H2(0), L1(0), L2(0);

//SetTotalBar(N);

H1 = NthHighest(1, GetField("收盤價"),N);
H2 = NthHighest(2, GetField("收盤價"),N);
L1 = NthLowest(1, GetField("收盤價"),N);
L2 = NthLowest(2, GetField("收盤價"),N);

Plot1(H1, "壓力 H1");
Plot2(H2, "壓力 H2");
Plot3(L1, "支撐 L1");
Plot4(L2, "支撐 L2");

4. 最終結果呈現

把指標放到主圖上,就能正確顯示網友需要的高低點的連線了~~

Image Not Found

5. 總結

以上就是整個Debug的過程,給大家參考,不過,每個問題的解決方式都不一樣,可以把我上面的方式交互運用,應該能幫助您更好的運用AI,另外,真的要說下,如果你想要用AI撰寫XS程式碼,建議還是要學習XS基礎,這樣會讓你用的更順手,這個XQ推出的XS實戰七門課,就看看吧。

最後,如果你對本文用的AI有興趣,可以到量化交易實驗室註冊下帳號,可以免費試用,試用後覺得不錯,可以付費,或是訂閱XQ的年方案,A+策略網有合作促銷,可以免費兌換量化交易實驗室的AI使用喔

6. 程式碼

下面提供原本跟修正後的程式碼,供大家練習與比較

6.1 原本程式碼

以下是原本問題的程式碼,大家可以用我上面的方式試試,看能否改出來

input: N(126, "近N日 (交易日) 數");
var: 
    i(0), dayCount(0),
    nowClose(0),
    diff(0),
    minHigh1(999999), minHigh2(999999),
    minLow1(999999), minLow2(999999),
    H1(0), H2(0), L1(0), L2(0),
    lastDate(0);

// 建立用來儲存每日收盤價的陣列
array: dailyClose ;

// 只在每天最後一根K棒(13:30)記錄收盤價
if Date <> lastDate and Time = 1330 then begin
    lastDate = Date;
    
    // 若已超過 N 日,將最舊的移除
    if dayCount < N then
        dayCount = dayCount + 1
    else begin
        for i = 0 to N - 2 begin
            dailyClose[i] = dailyClose[i + 1];
        end;
    end;

    // 存入當天的收盤價
    dailyClose[dayCount - 1] = Close;
end;

// 開始計算最接近現在價格的兩個高點與低點
nowClose = Close;

minHigh1 = 999999; minHigh2 = 999999;
minLow1 = 999999; minLow2 = 999999;
H1 = 0; H2 = 0; L1 = 0; L2 = 0;

for i = 0 to dayCount - 1 begin
    diff = AbsValue(dailyClose[i] - nowClose);
    
    // 高點邏輯:找比當前價高的最接近的兩個價
    if dailyClose[i] >= nowClose then begin
        if diff < minHigh1 then begin
            minHigh2 = minHigh1;
            H2 = H1;
            minHigh1 = diff;
            H1 = dailyClose[i];
        end
        else if diff < minHigh2 then begin
            minHigh2 = diff;
            H2 = dailyClose[i];
        end;
    end;
    
    // 低點邏輯:找比當前價低的最接近的兩個價
    if dailyClose[i] <= nowClose then begin
        if diff < minLow1 then begin
            minLow2 = minLow1;
            L2 = L1;
            minLow1 = diff;
            L1 = dailyClose[i];
        end
        else if diff < minLow2 then begin
            minLow2 = diff;
            L2 = dailyClose[i];
        end;
    end;
end;

// 畫出支撐與壓力線
Plot1(H1, "壓力 H1");
Plot2(H2, "壓力 H2");
Plot3(L1, "支撐 L1");
Plot4(L2, "支撐 L2");

6.2 最終程式碼

以下為最終完成的程式碼

input: N(126, "近N日 (交易日) 數");
var: H1(0), H2(0), L1(0), L2(0);

//SetTotalBar(N);

H1 = NthHighest(1, GetField("收盤價"),N);
H2 = NthHighest(2, GetField("收盤價"),N);
L1 = NthLowest(1, GetField("收盤價"),N);
L2 = NthLowest(2, GetField("收盤價"),N);

Plot1(H1, "壓力 H1");
Plot2(H2, "壓力 H2");
Plot3(L1, "支撐 L1");
Plot4(L2, "支撐 L2");

2Shares


發佈留言

相關文章

[AI] 定期定額投資績效計算頁面

定期定額投資的績效表現在XQ上並不容易回測,本文將會介紹我如何運用量化交易實驗室的AI,在短時間內就寫出一個可以計算定期定投入績效的XQ看盤頁面。

[VIP] 投資節目老師報明牌行不行

如果還沒看到前一篇的文章,可以先閱讀下,這篇主要是說明頁面我做了那些調整,跟我觀察到的心得分享,希望對大家有幫助。

投資節目老師報明牌行不行

前幾天在搜薄碩士論文的時候,看到一篇有趣的研究,研究標題是-投資理財節目異常推介有價證券與投資人行為及報酬率檢視-以上櫃公司為例,相信很多人都會跟我一樣想要知道老師報的明牌到底有沒有用吧,結論是大部分情況是有用,不過研究只有一年,到底現在還能不能用呢?用了個頁面讓大家自己研究研究

[VIP] XQ自動交易不採坑: 交易進場日跟選股一致了嗎? (月、季、年資料)

上一篇跟大家分享了把日資料選股條件寫成自動交易腳本的正確方式,這篇文章將要繼續來分享月、季、年資料選股條件在自動交易內的正確撰寫方式。

XQ自動交易不採坑: 交易進場日跟選股一致了嗎? (日資料)

在新版XQ支援自動交易可以直接取得財報資料後,策略終於可以不用分開寫在選股與交易兩個模組裡面了,這大幅提升了策略開發的速度與後續維護的方便性。不過,當把選股條件寫入自動交易時,會遇到不同頻率的資料、還有些資料是在盤後才更新,取錯期數,很有可能發生選股與交易回測時,進場都是一致的,但一到實單就出現落差,本篇文章就是要來測試不同寫法對於進場日的影響,並找出正確的寫法,讓選股與交易不管是回測還是實單,都能保持一致的進場時機。

XQ自動交易不採坑: 進出場價的設定

自動交易不採坑系列,主要在分享開發自動交易策略時需要注意的事情,避免開發出回測好看,但與實際交易落差很大的策略來。而本篇文章將會討論setposition的用法,很基礎但超級重要,一定要了解。

XQ當沖回測設定: 用開盤價進場

XQ的自動交易回測,由於並非使用tick數據來回測,加上還有回測頻率、模擬逐筆、觸價即判斷成交、讓價幾檔等設定,讓許多人都搞不清楚,這些選項對回測進出場價格到底有何的影響,也常常會抱怨回測與實際下單有很大落差,本系列文章,將測試各種設定,讓使用者能更清楚各種設定相互間的關係,找出最適合自己的回測方式,本篇將來測試開盤價進場的設定,告訴你怎樣設定才能用開盤價進場。

[VIP] Finlab價格意圖因子策略2-策略優化

前一篇的價格意圖因子文章,我們採用了跟Finlab一樣,用排名+每季固定時間換股的方式來開發策略,而在這篇文章中,我們調整了價格因子的使用方式,沒想到績效更好。

Finlab價格意圖因子策略1-原始策略回測

Finlab的價格意圖因子一文提到,其中提到股價穩定上漲的股票,有可能是公司或主力有意為之,而這樣的股票,未來繼續上漲的可能性也較高,而Finlab的回測也證明了這樣的策略是可以打敗大盤的,而本文嘗試將Finlab用到的條件,扁成XQ策略,看看能否得到相同的結果。

XQ版RS相對強弱PR指標

有參加11/24的XQ周末特訓班的朋友,在聽到尼克萊大大分享用RS相對強弱的PR值找強勢股之後,應該都超有興趣想要嘗試的吧,雖然尼克萊大大說XQ寫不出來,不過,有著程式魂的我們怎麼可能放棄呢? 最終靠著google大神,在XS討論區找到有高手已經寫出來了,就很不要臉的拿來修改成指標了。

[VIP] 週三選擇權樂透這樣買,報酬好像還不錯

週三選擇權結算時,很多人都會小買一下,試試看會不會遇到大行情,賺個幾十倍甚至上百倍,雖然這樣的事情真的是發生過,但賺錢機率真的太小了,要讓人一直持續投入真的不符合人性,而本篇的樂透策略。就是運用回測的方式,找出較符合人性能持續賺錢的交易方式,而換算每次平均報酬,大約能達到40%,其實已經非常驚人了

[積木-VIP] 重視研發公司股價跌破淨值

一間願意投入研發且財報沒有虧損的公司,當股價跌破淨值,到底是個撿便宜的機會還是一個投機的行為呢? 本文透過回測證明,這樣個公司,股價淨值比降低到一個程度後,會是一個好的進場時機,而且短期內就能獲利。

[技巧-VIP] 運用選股策略報價組合研究當沖

台灣的上市櫃股票加起來超過1800檔,如果想要做當沖,事前篩選隔天可能要操作的標的變的非常重要,除了可以減少當天觸發一堆無用的標的外,也可在事前先做研究,隔天驗證自己的研判是否正確,而這篇文章,要來分享一個方式,幫助你在盤中更方便觀察選出的標的,更可以做到盤中調整條件後即時看到新挑選出的標的。

[指標] 累積成交量比指標(股票版)

成交量比指標主要是以當下的累績成交量,與過去幾天同一時間的成交量均量做相比,用來判斷今日該股成交量是放大還是縮小,成交量放的越大,該股今日動能越高,越可能出現行情,對於投資者來說,這樣的商品會是最適合拿來操作當沖的標的

[積木-VIP] 股東人數創低策略

當某檔股票的股東人數持續減少時,可能反映出他們對該公司的未來前景不看好。然而,這種悲觀情緒往往會導致股價下跌,使得股票成為更具吸引力的買入選擇,另一方面,股東人數減少也意味著籌碼集中,反而有助於穩定股價,甚至上漲

連續漲停一字鎖

今天開發的策略想找的情境是「第一次發生連續三根K棒…

[阿爾發30] 有超額報酬的好公司

怎樣的公司可以出現超額報酬,XQ的阿爾發系列30,就是在探討這個問題,原文從獲利穩定的公司中尋找,除了加入財務因子外,比較重要的是加入了時機的條件,當週線突破月線時,勝率和收益曲線都有明顯改善

回測打敗大盤的策略真的執行得了嗎?

通過XQ選股中心開發策略的時候,由於報酬率績效曲線圖內建就能對比0050,許多人會把報酬率拿去跟0050對比,認為拉長時間透過報酬率曲線跟大盤對比,能客觀反應執行策略能獲得的報酬,然後找到一組能打敗0050績效圖的策略就認為自己能打敗大盤,然後很開心地認為自己很厲害,找到未來的財富密碼,但真的是這樣嗎?

[阿爾發29] 短線長線都適合的雞蛋水餃股策略

XQ的阿爾發系列29,主要是在低價股中挖寶,原文以爆量剛起漲當作是股價發動的主要條件,而在我們的回測中則是發現季營業收入淨額的增加,在這個策略,也扮演了一個非常重要的角色條件,當營收淨額增加比率較高的時候,股價在盤勢不佳時,下跌有限,不只短線獲利機會高,長線獲利機會更高。

[VIP] 貓老大的小積木.01 – PlotK,不止能畫K棒?

XQ在2024/09/05釋出了更新版 7.14.01 / 3.14.01,此版本除了有全新的定時洗價功能,還有一項敲碗已久的自訂K棒功能,終於可以自訂K棒的顏色,而且還能透過XS自行畫K棒

最近發文

加入我們

Categories

最新留言