複製 AI 程式碼到 TradingView,結果一片紅?
許多人的流程相似:口述「幫我寫一個 EMA 金叉提醒」,模型秒給 Pine Script,貼上儲存後底部紅字。更尷尬的是修好語法後:訊號位置不對、快訊不出現、Strategy Tester 沒交易,或重新整理後標記漂移。
這很常見:問題往往不單是語法,而是版本、指令碼型別與交易語義疊在一起。Pine Editor 側的官方說明也會把編譯錯誤、執行時錯誤與警告分層——能不能儲存、能不能跑、跑出來是否合理,從來不是同一道題。
排錯原則:不要一次讓 AI 重寫全部程式碼
看到報錯如果只喊「修好它」,最容易得到:紅字少了,但邏輯也換了。
更穩妥的順序:
- 先確認 Pine Script 版本。
- 確認是 indicator 還是 strategy。
- 逐條清 Pine Editor 的報錯。
- 編譯透過後,再審圖表語義。
- 再看提醒 / Strategy Tester。
- 最後處理重繪、資料來源、週期與實盤表現。
官方列出宣告函式涵蓋 indicator()、strategy()、library();型別不同,
能力邊界與編譯約束完全不同——排錯前先搞清楚模型到底給了你哪一類。
常見錯誤一:Pine Script 版本混用
表現:
Could not find function or function reference/Undeclared identifier;The script must contain one declaration statement(若宣告被破壞也可能連帶出現);- 首部寫
//@version=5卻夾雜 v6 寫法,或要你 v6 卻仍見study()。
原因:版本間語法與相容性不同;AI 常會拼接舊教程。官方已推出 v6及遷移指引,指明存在不向後相容變更,不能想當然只改版本號。
修復思路:寫死單一版本並讓 AI只做遷移,勿改語義。示例:
請把這段程式碼統一轉換為 Pine Script v6。
要求:
1. 第一行使用 //@version=6。
2. 指標使用 indicator(),不要使用 study()。
3. 不要混用 v4、v5 舊語法。
4. 保持原始訊號邏輯不變,只修復版本和語法問題。
常見錯誤二:缺少或寫錯指令碼宣告
表現:
The script must contain one declaration statement- 同檔案裡
indicator(...)與strategy(...)並存。
原因:宣告強制性地告訴編譯器指令碼型別;AI 偶爾會輸出「半截片段」,或誤以為可以雙宣告。
修復:
- 只畫圖/提醒:
indicator("My Indicator", overlay=true) - 要回測訂單:
strategy("My Strategy", overlay=true)
不要雙宣告;也不要把編輯器外的片段當成完整指令碼。
常見錯誤三:indicator 和 strategy 混用
表現:
indicator()裡出現strategy.entry()/strategy.close();或- 叫模型寫策略卻只有
indicator(),Strategy Tester 始終空白。
原因:指標不負責 broker emulator 回測鏈路;策略才模擬成交。螢幕上貼 BUY/SELL ≠ 可回測策略。
修復:
- 純提醒指標:刪掉任何
strategy.*,保留plot/plotshape/alertcondition。 - 要回測:改
strategy()並用訂單函式表達進退規則,並明示「僅模擬」。
常見錯誤四:函式不存在或名稱空間寫錯
表現:找不到 'ema'、'rsi',或 crossover 未定義等。
原因:現代 Pine 大量使用 ta.*:ta.ema()、ta.rsi()、ta.crossover()。
fast = ta.ema(close, 20)
slow = ta.ema(close, 50)
bull = ta.crossover(fast, slow)
bear = ta.crossunder(fast, slow)
給 AI:禁止使用臆造函式;全面核對名稱空間。
常見錯誤五:輸入引數寫法錯誤
表現:Cannot call input.int with argument...、simple 期望值卻塞進 series,或改了引數面板卻無反應。
fastLen = input.int(20, "Fast EMA Length", minval=1)
slowLen = input.int(50, "Slow EMA Length", minval=1)
fast = ta.ema(close, fastLen)
常見錯誤六:型別不匹配(series / simple / bool)
表現:An argument of 'series ...' ... but 'simple ...' expected、或在區域性 if 分支裡不能直接 plot。
修復:讓 AI明示型別歸因;需要展示時先在全域性算條件變數,再在頂層 plotshape/plot。
常見錯誤七:換行、縮排與括號
表現:end of line without line continuation、Mismatched input...
signal = (
close > emaFast and rsiVal > 50
)
常見錯誤八:歷史引用越界或陣列越界
表現:載入圖表後報錯指令碼停止:Index is out of bounds、緩衝區不足、執行時異常。
if array.size(myArr) > 0
v = array.get(myArr, 0)
enoughBars = bar_index > 50
signal = enoughBars and close > close[50]
常見錯誤九:request.security() 使用不當
表現:歷史上的訊號「神準」,實盤或重新整理後亂跳;更高週期好像在較低週期提早出現。
請檢查 request.security() 是否可能導致重繪:
1)請求哪一週期?
2)是否使用已確認條形?
3)禁止未來函式;若不能保證非重繪,請明確風險提示。
新手:先單週期寫好,多週期拆分獨立驗證。
常見錯誤十:忽略重繪
表現:無紅錯,但盤中現、收盤逝;重新整理條形後標記漂移。
rawSignal = ta.crossover(fastMa, slowMa)
signal = rawSignal and barstate.isconfirmed
謹記:barstate.isconfirmed能減少某些實時抖動並不等於消滅所有 repaint。
常見錯誤十一:alertcondition / alert 與預期不符
表現:UI 下拉找不到對應條件/觸發過密/改了指令碼舊快訊仍跑舊語義。
alertcondition(bullSignal, title="Bull Signal", message="Up on {{ticker}}")
alertcondition(bearSignal, title="Bear Signal", message="Down on {{ticker}}")
常見錯誤十二:策略能跑,但回測結果不可信
表現:曲線順滑神奇、勝率誇張、換手極端、換一個品種即刻失效。
| 檢查項 | 為什麼重要 |
|---|---|
| 入場條件清晰嗎? | 避免模糊「感覺型」判定。 |
| 出場 / 反手規則完整嗎? | 許多 AI 策略只會進場。 |
| 費率與滑點 | 未設易被短線幻象放大淨利。 |
| 重繪與未來資料 | 歷史欄可能「過於完美」。 |
| 跨品種/跨週期複核 | 識破單市場行情段過擬合。 |
| 實盤小樣本目測 | 校正執行與延遲體感。 |
Pine Script v5 與 v6:AI 特別容易寫亂的點
| 問題 | 舊/混用 | 更推薦寫法 |
|---|---|---|
| 宣告 | study() | indicator() |
| 指標+下單 | 混寫 | 二選一,拆階段驗證 |
| 技術函式 | ema()/rsi() | ta.* 字首 |
| 引數 | 硬編碼 magic number | input.* |
| 跨週期 | 不透明 security | 明示確認語義與 repaint 邊界 |
| 觸發時機 | 盤中即 firing | 必要時 barstate.isconfirmed |
給 AI 的修復提示詞模板(可直接複製)
請幫我修復下面這段 TradingView Pine Script。
要求:
1. 使用 Pine Script v6。
2. 不要重寫成另一套策略,只修復報錯和明顯語法問題。
3. 如果必須改變邏輯,請先說明原因。
4. 先判斷這是 indicator 還是 strategy;如果混用了,請指出並修正。
5. 檢查是否有 v4/v5/v6 版本混用。
6. 檢查是否有不存在的函式、錯誤名稱空間、型別不匹配、區域性作用域錯誤。
7. 檢查是否可能重繪,尤其是 request.security()、未收盤 K 線和未來資料問題。
8. 如果是 strategy,請提醒我回測結果不能直接代表實盤,並列出需要檢查的手續費、滑點、週期和資料來源。
9. 輸出完整可複製程式碼。
10. 最後用「修改點清單」說明你改了什麼。
TradingView 報錯資訊:
[貼上 Pine Editor 的完整紅色報錯]
原始程式碼:
[貼上完整 Pine Script]
推薦的人工檢查流程
- Pine Editor 零紅字。
- 宣告匹配用途。
- 肉眼校對圖表語義。
- 多週期回放。
- 多品種回放。
- 盯實時條形。
- 建立快訊走一遍 Condition 下拉。
- strategy:審計 Tester 費率、倉位、資料來源與過擬合。
總結:AI 不是問題本身,缺的是分層驗證
報錯多來自需求含糊 + 參考資料年代不一 + 不同型別指令碼硬性約束被忽略——穩住流程比什麼都重要:版本 → 指令碼型別 → 編譯 → 圖表 → 快訊 → 回測可信度,逐級遞進。若需最新語法釋義,請參閱 TradingView Pine 官方手冊。
FAQ:AI 寫 Pine Script 報錯常見問題
AI 寫的 Pine Script 報錯,是不是說明程式碼完全不能用?
不一定;先分辨是語法層還是邏輯/執行層。官方亦把編譯、執行與警告分層處理。
應該讓 AI 寫 v5 還是 v6?
新稿可優先 v6,但全篇 API 必須一致;遷移不止改首行版本號。
為何指標畫得出來,Tester 卻無交易?
很可能仍是 indicator;需 strategy 並由 broker emulator 承接模擬成交。
無報錯,訊號重新整理卻消失?
多考慮 repaint、未收盤價與 request.security(),以及條形從實時變更為歷史時對確認值的保留差異。
回測漂亮,能直接實盤嗎?
不建議:策略可執行不等於未來有效;需交叉檢驗成本、樣本、圖表型別、重繪與過擬合,並配合現實觀察。