尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Vibe-Trading 策略跨平台导出实战:Pine Script v6、TDX 公式与 MQL5 全平台翻译指南

Vibe-Trading 策略跨平台导出实战:Pine Script v6、TDX 公式与 MQL5 全平台翻译指南 Vibe-Trading 策略跨平台导出实战Pine Script v6、TDX 公式与 MQL5 全平台翻译指南【免费下载链接】Vibe-TradingVibe-Trading: Your Personal Trading Agent项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-TradingVibe-Trading 提供了pine-script技能可将回测中训练出的 Python 策略一次性翻译并导出为国际图表平台TradingView、中国股票软件通达信 / 同花顺 / 东方财富以及外汇 / CFD 平台MetaTrader 5三类平台的指标代码统一写入运行目录下的artifacts/strategy.pine。读完本文你将掌握从回测运行目录提取策略、按照平台语法表完成代码翻译、以及遵循输出格式与质量清单生成可复制、可运行代码的完整流程。说明本文以 agent/src/skills/pine-script/SKILL.md 为骨架展开仓库源码与测试用于佐证实际调用链路文中所有语法表、模板与规则均来源于该技能文档。技能定位与运行机制pine-script是 Vibe-Trading Agent 技能体系中的一个tool类别技能其 frontmatter 中的描述为将回测策略导出为各大主流交易平台的指标 / 策略代码——TradingView、通达信、同花顺、东方财富、MT5。从源码结构看技能加载由 SkillsLoader 实现系统提示词只注入一行摘要get_descriptions完整文档由load_skill工具按需读取get_content并且 split_sections 会按标题结构将长文档切成小节、逐段返回给 Agent避免一次工具调用吞下整篇文档。该技能对应目录为agent/src/skills/pine-script/其中只有一份SKILL.md。该技能在仓库中有完整的端到端支撑CLI 查看cmd_pine 读取RUNS_DIR/run_id/artifacts/strategy.pine并以语法高亮打印提示语为“Ask the agent: export this strategy to Pine Script”说明导出动作由用户向 Agent 发起自然语言请求触发HTTP APIGET /runs/{run_id}/pine返回{exists, content}由前端调用前端展示PineScriptViewer 以模态窗口展示strategy.pine内容支持一键复制安全约束test_security_auth_api.py 验证了该 API 对路径穿越与 URL 编码换行的防护。这意味着策略一旦导出就同时存在于回测运行目录、CLI、REST API 与前端聊天界面四条链路中均可被检视与复制。导出产物结构一个文件、三种平台无论用户从回测导出还是从描述直接生成最终产物都是运行目录下名为artifacts/strategy.pine的单个文件按固定分隔结构依次包含三大区块 TRADINGVIEW — Pine Script v6 Paste into: Pine Editor → New blank indicator → Add to Chart [Pine Script code here] 通达信 / 同花顺 / 东方财富 (TDX Formula) Paste into: 功能 → 公式管理器 → 新建指标公式 [TDX formula code here] MT5 — MQL5 Save as: .mq5 file → MetaEditor → Compile → Navigator → Attach to Chart [MQL5 code here]支持平台与语言对应关系固定为三组且每次导出必须全部生成不允许只产出一类分组平台语言国际图表TradingViewPine Script v6中国股票通达信 / 同花顺 / 东方财富TDX Formula外汇 / CFDMetaTrader 5MQL5每个区块头部都必须带有该平台的粘贴 / 保存指引方便用户直接把代码搬运到对应软件中。两种工作流从回测导出load_skill(pine-script)—— 读取本指南read_file(config.json)—— 了解标的、日期区间与策略参数read_file(code/signal_engine.py)—— 阅读 Python 策略逻辑。signal_engine.py是回测运行目录code/下的标准产物见 cmd_code 与 runs_routes.py 的 code 读取翻译—— 依据下文各平台参考表把策略翻译到全部三类平台write_file(artifacts/strategy.pine)—— 保存合并输出在代码块中返回代码并附每个平台的使用说明。从描述直接生成load_skill(pine-script)—— 读取本指南根据用户描述为所有平台编写指标 / 策略代码write_file(artifacts/strategy.pine)—— 保存合并输出返回代码及使用说明。TradingView 平台Pine Script v6 模板与翻译表标准模板// This strategy was generated by Vibe-Trading // Paste into TradingView Pine Editor → Add to Chart //version6 strategy(Strategy Name, overlaytrue, default_qty_typestrategy.percent_of_equity, default_qty_value100, commission_typestrategy.commission.percent, commission_value0.1, initial_capital1000000) // // INPUTS // // [Group inputs logically with input.int(), input.float(), input.string()] // // CALCULATIONS // // [Core indicator calculations] // // CONDITIONS // longCondition false shortCondition false exitLongCondition false exitShortCondition false // // STRATEGY EXECUTION // if longCondition strategy.entry(Long, strategy.long) if shortCondition strategy.entry(Short, strategy.short) if exitLongCondition strategy.close(Long) if exitShortCondition strategy.close(Short) // // PLOTS // // [Visual overlays: moving averages, bands, signals] // // ALERTS // alertcondition(longCondition, titleLong Signal, messageLong entry signal triggered) alertcondition(shortCondition, titleShort Signal, messageShort entry signal triggered)模板的关键设计条件与执行分离CONDITIONS区块只计算布尔条件STRATEGY EXECUTION区块统一调用strategy.entry/strategy.close并预留INPUTS参数化、PLOTS可视化覆盖层与ALERTS提醒三个扩展区。Python → Pine Script 指标映射Python (pandas/numpy)Pine Script v6df[close].rolling(n).mean()ta.sma(close, n)df[close].ewm(spann).mean()ta.ema(close, n)ta.RSI(df[close], n)或手写 RSIta.rsi(close, n)ta.MACD(df[close])[macdLine, signalLine, hist] ta.macd(close, 12, 26, 9)df[close].rolling(n).std()ta.stdev(close, n)df[high].rolling(n).max()ta.highest(high, n)df[low].rolling(n).min()ta.lowest(low, n)df[close].pct_change(fill_methodNone)(close - close[1]) / close[1]df[volume].rolling(n).mean()ta.sma(volume, n)df[close] df[close].shift(1)close close[1]Bollinger Bands[mid, upper, lower] ta.bb(close, length, mult)ATRta.atr(length)ADXta.adx(high, low, close, length)Stochasticta.stoch(close, high, low, length, smoothK, smoothD)CCIta.cci(close, length)Williams %Rta.wpr(length)MFIta.mfi(close, length)OBVta.obvVWAPta.vwap数据引用映射PythonPine Script v6df[open]opendf[high]highdf[low]lowdf[close]closedf[volume]volumedf.index(datetime)timedf[close].shift(n)close[n]信号逻辑映射Python PatternPine Script v6(fast slow) (fast.shift(1) slow.shift(1))ta.crossover(fast, slow)(fast slow) (fast.shift(1) slow.shift(1))ta.crossunder(fast, slow)signal.where(condition, 0)condition ? value : 0np.where(cond, val_true, val_false)cond ? val_true : val_falsesignal.clip(-1, 1)math.max(-1, math.min(1, signal))signal.fillna(0)nz(signal, 0)pd.isna(value)na(value)仓位管理映射Python PatternPine Script v6Equal weight 1/Nstrategy.percent_of_equity配合default_qty_value 100/Nsignal1.0 时满仓default_qty_typestrategy.percent_of_equity, default_qty_value100signal0.5 时半仓strategy.entry(..., qtystrategy.equity * 0.5 / close)止损strategy.exit(Exit, stopentryPrice * (1 - stopPct))止盈strategy.exit(Exit, limitentryPrice * (1 tpPct))语法规则关键版本声明必须是第一行//version6三元运算符必须单行text condition ? a : b续行缩进续行必须比起始行缩进更多局部作用域禁止plot()if/for/函数内——改用plot(condition ? value : na)var跨 K 线保持持久状态普通赋值每根 K 线重新计算避免未来函数repainting使用barstate.isconfirmed、lookaheadbarmerge.lookahead_off内置限制最多回看 500 根 K 线、500 次 plot 调用、每根 K 线 64 次入场 / 出场、40 次request.security()。中国股票平台TDX 公式模板与翻译表通达信、同花顺、东方财富三者共享 95% 以上相同的公式语法技能要求只写一份、三平台通用。标准模板{Vibe-Trading 策略导出} {策略名称: XXX} {——————— 参数 ———————} N:14; M:6; {——————— 指标计算 ———————} RSI_VAL:RSI(CLOSE,N); MA_FAST:MA(CLOSE,5); MA_SLOW:MA(CLOSE,20); {——————— 买卖信号 ———————} BUY:CROSS(MA_FAST,MA_SLOW) AND RSI_VAL40,COLORRED; SELL:CROSS(MA_SLOW,MA_FAST) AND RSI_VAL60,COLORGREEN; DRAWTEXT(BUY,LOW,B),COLORYELLOW; DRAWTEXT(SELL,HIGH,S),COLORWHITE;模板通过参数区N:14; M:6;、指标计算区、买卖信号区的三段式布局把可调参数、中间计算与输出信号分层便于用户在公式管理器中直接改参数。Python → TDX 映射PythonTDX Formuladf[close].rolling(n).mean()MA(CLOSE,N)df[close].ewm(spann).mean()EMA(CLOSE,N)RSIRSI(CLOSE,N)返回 0-100MACDMACD.DIF、MACD.DEA、MACD.MACD或手写DIF:EMA(CLOSE,12)-EMA(CLOSE,26); DEA:EMA(DIF,9); MACD:(DIF-DEA)*2;Bollinger BandsBOLL(N,M)→BOLL.UPPER、BOLL.MID、BOLL.LOWER或手写ATRATR:MA(MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1))),N);df[close].shift(n)REF(CLOSE,N)df[high].rolling(n).max()HHV(HIGH,N)df[low].rolling(n).min()LLV(LOW,N)crossover(fast, slow)CROSS(FAST,SLOW)crossunder(fast, slow)CROSS(SLOW,FAST)df[volume]VOLabs(x)ABS(X)max(a,b)MAX(A,B)min(a,b)MIN(A,B)conditionalIF(COND,A,B)df[close].pct_change(fill_methodNone)(CLOSE-REF(CLOSE,1))/REF(CLOSE,1)N 根内计数 trueCOUNT(COND,N)N 根内求和SUM(X,N)N 根内标准差STD(CLOSE,N)斜率 / 线性回归SLOPE(CLOSE,N)语法规则赋值符中间变量用:输出绘图线用:注释使用花括号{comment}而非//分号每句以;结尾可省略但建议保留颜色COLORRED、COLORGREEN、COLORYELLOW、COLORWHITE、COLORBLUE、COLORCYAN、COLORMAGENTA线型LINETHICK2、POINTDOT、STICK、VOLSTICK文字标注DRAWTEXT(COND, PRICE, TEXT), COLOR;图标标注DRAWICON(COND, PRICE, ICON_ID);所有函数与变量名一律大写无循环、无数组—— 一切按 K 线逐根向量化计算公式长度上限约 10,000 字符 / 公式。三平台差异对照特性通达信同花顺东方财富MACD 内置MACD(12,26,9)MACD(12,26,9)相同StochasticKDJ(N,M1,M2)相同相同自定义颜色COLORRRGGBBCOLORRRGGBB支持有限策略回测仅条件选股仅条件选股仅条件选股为最大兼容性应避免平台专属扩展坚持使用核心函数同时需注意三平台的“回测”能力都局限于条件选股动态仓位控制无法在指标公式中表达。MetaTrader 5 平台MQL5 模板与翻译表标准模板自定义指标//------------------------------------------------------------------ //| Generated by Vibe-Trading | //------------------------------------------------------------------ #property copyright Vibe-Trading #property indicator_chart_window // or indicator_separate_window #property indicator_buffers 2 #property indicator_plots 2 #property indicator_color1 clrDodgerBlue #property indicator_color2 clrRed input int InpPeriod 14; // Period double BuyBuffer[]; double SellBuffer[]; int OnInit() { SetIndexBuffer(0, BuyBuffer, INDICATOR_DATA); SetIndexBuffer(1, SellBuffer, INDICATOR_DATA); PlotIndexSetInteger(0, PLOT_ARROW, 233); // up arrow PlotIndexSetInteger(1, PLOT_ARROW, 234); // down arrow PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_ARROW); PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_ARROW); return(INIT_SUCCEEDED); } int OnCalculate(const int rates_total, const int prev_calculated, const datetime time[], const double open[], const double high[], const double low[], const double close[], const long tick_volume[], const long volume[], const int spread[]) { int start MathMax(prev_calculated - 1, InpPeriod); for(int i start; i rates_total; i) { BuyBuffer[i] EMPTY_VALUE; SellBuffer[i] EMPTY_VALUE; // YOUR LOGIC HERE // Example: if(buyCondition) BuyBuffer[i] low[i]; // if(sellCondition) SellBuffer[i] high[i]; } return(rates_total); }模板使用双缓冲区 DRAW_ARROW方式把买卖信号绘制为上下箭头233 / 234并通过MathMax(prev_calculated - 1, InpPeriod)控制从周期暖机之后才开始计算保证指标在初始 K 线上不产生无效信号。Python → MQL5 映射PythonMQL5df[close].rolling(n).mean()iMA(_Symbol, PERIOD_CURRENT, n, 0, MODE_SMA, PRICE_CLOSE)或手动循环EMAiMA(..., MODE_EMA, ...)RSIiRSI(_Symbol, PERIOD_CURRENT, n, PRICE_CLOSE)MACDiMACD(_Symbol, PERIOD_CURRENT, 12, 26, 9, PRICE_CLOSE)BollingeriBands(_Symbol, PERIOD_CURRENT, n, 0, mult, PRICE_CLOSE)ATRiATR(_Symbol, PERIOD_CURRENT, n)StochasticiStochastic(_Symbol, PERIOD_CURRENT, K, D, slowing, MODE_SMA, STO_LOWHIGH)df[close].shift(n)close[i-n]在 OnCalculate 循环内crossoverbuf[i] ref[i] buf[i-1] ref[i-1]语法规则指标句柄iMA()等须在OnInit()中创建用CopyBuffer()取数值缓冲区方向MQL5 缓冲区默认索引 0 为最旧数据可用ArraySetAsSeries()反转EMPTY_VALUE箭头图“无信号”位置使用该值指标 vs EA导出一律生成指标.mq5而非智能交易系统EA以匹配“指标导出”的目的句柄式 APIMQL5 采用句柄机制 ——OnInit创建、OnCalculate读取。交易代码与平台符号映射生成代码时需把 Vibe-Trading 的内部标的代码映射为各平台符号Vibe-TradingTradingView通达信/同花顺MT5000001.SZSZSE:000001000001N/A600519.SHSSE:600519600519N/AAAPL.USNASDAQ:AAPLN/AAAPLBTC-USDTBINANCE:BTCUSDTN/ABTCUSD重要说明绝大多数指标代码与具体标的无关——用户会把代码套到当前打开的任意图表上。因此原标的只需以注释形式标注“仅供参照”。翻译限制与透明性当 Python 策略使用了无法直接翻译的特性时必须明确标注不能静默忽略Python 特性平台限制ML 模型sklearn 等全部平台 —— 标注“需手动实现”自定义 pandas 运算TDX —— 仅限内置函数多周期逻辑TDX —— 无原生多周期Pine/MQL5 支持动态仓位TDX —— 仅指标无仓位控制外部数据API 调用全部平台 —— 指标离线运行仅基于图表数据在输出代码的顶部注释块中必须列出所有未能翻译的特性这是该技能“透明性”要求的硬性规定。输出前质量清单技能文档要求每次输出前逐项核验三个平台区块全部包含Pine Script、TDX、MQL5每个平台区块都有规范的标题头与使用说明Pine Script//version6为第一行、局部作用域无plot()、三元运算符单行TDX函数全大写、中间变量用:、输出线用:、注释用{...}MQL5使用句柄式 API、无信号用EMPTY_VALUE各平台入场 / 出场条件与 Python 信号逻辑语义一致无法翻译的特性在各区块顶部明确记录注释头标注原始 Vibe-Trading 的run_id与标的这八项检查同时约束了“语义等价”与“平台语法合法”两个维度前四项保证代码在各自平台可编译可运行后四项保证导出的代码与原回测策略在信号含义上保持一致。从产物到使用仓库中的完整链路导出的artifacts/strategy.pine并不只是给 Agent 的中间产物它在仓库中拥有完整的使用链路CLI 直读在agent目录下执行对应命令见 cmd_pine即可语法高亮打印整个策略文件并提示“复制粘贴到 TradingView Pine Editor 后 Add to Chart”REST APIGET /runs/{run_id}/pine以 JSON 形式返回文件内容与存在标志供任意 HTTP 客户端集成前端聊天窗口PineScriptViewer 在聊天界面以模态框展示代码提供“复制”按钮与一个跳转到 Pine Script 官方文档的外链安全设计上述 API 通过_host_validate_path_param校验run_idtest_security_auth_api.py 专门验证了路径穿越/runs/foo.bar/pine与 URL 编码换行/runs/foo%0A/pine均被拒绝防止通过run_id读取任意文件。也就是说策略导出的终点是“一份可以被人类复制到任意图表软件中的代码”而 Vibe-Trading 只负责翻译的正确性与可追溯性注释头保留run_id便于回溯到对应回测。常见误区与实战建议不要把 TDX 的//当注释通达信系公式注释必须用{}这是跨平台粘贴后最常见的报错来源Pine Script 的plot()只能在全局作用域若需条件绘图统一写成plot(condition ? value : na)三平台“同时导出”是强约束缺任何一个平台区块都视为不合格输出检查清单第 1 项专门约束这一点先读signal_engine.py再动手翻译从回测导出时第 3 步阅读 Python 策略逻辑是保证语义等价的前提跨平台翻译的根因在于“同一份信号逻辑”而非“同一份代码”无法翻译就明说ML 模型、外部数据等特性各平台都不支持宁可标注“需手动实现”也不要用近似代码冒充这是技能文档 Limitation 章节的核心要求。综合来看pine-script技能的价值在于把 Vibe-Trading 的回测能力延伸到真实交易软件生态回测中验证过的策略逻辑可以在一份导出文件内同时落到 TradingView、通达信 / 同花顺 / 东方财富与 MetaTrader 5 三个完全不同语法体系的平台上并通过run_id注释保持与原始回测的可追溯性。【免费下载链接】Vibe-TradingVibe-Trading: Your Personal Trading Agent项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表