Flask + Pandas 写了一个 TradingView 回测数据深度分析工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
chacores
V2EX    分享创造

Flask + Pandas 写了一个 TradingView 回测数据深度分析工具

  •  
  •   chacores 3 天前 1075 次点击

    V2EX 的朋友们。

    最近在使用 tradingview ,发现 TradingView 自带的“策略测试器”虽然方便,但导出的报告在很多关键指标上还是不够细致。

    特别是对于股票市场,我需要更关注持仓周期的风险。而且 TV 的报告主要基于“平均值( Mean )”,很容易被几笔极端的运气单误导,我看不到“中位数( Median )”表现,也无法直观评估策略的鲁棒性。

    基于 Flask + Pandas + Pyecharts 撸了一个本地化的深度分析工具,专门用来清洗和分析 TradingView 导出的 CSV 数据。

    拒绝“平均值欺骗”: 原生报告只给平均盈利,加上了中位数盈利。如果平均值远大于中位数,说明策略全靠运气单死撑,实盘风险极大。

    引入蒙特卡洛模拟 (Monte Carlo Simulation) 但是现在是有 bug 的,应该是 csv 文件的局限性导致最后肯定会一样

    MAE vs MFE 交易质量分析: 绘制了最大浮盈 (MFE) 和最大浮亏 (MAE) 的散点图。一眼就能看出是“卖飞了”还是“硬扛单”。

    季节性/周期性效应: 按年份和月份聚合,计算月度回报的加权平均和中位数。

    还有正常每次开仓的间隔,也就是两次仓位之间的中位数时间

    问问论坛里的,有没有做投资的,这样的工具有用吗。 策略我是用社区的指标,用 Gemini 改的,引入 t+1 。然后 webhook 推送给我,我自己还会判断。 买了交易所的实时数据 至少我在 11 月大跌里也盈利了。 谢谢大家

    下面是图片

    1764434680968.png

    3 条回复    2025-11-30 15:52:29 +08:00
    Sawyerhou
        1
    Sawyerhou  
       3 天前 via Android
    中位数几乎不看,看胜率和盈亏比。

    如果盈亏比高,那么收益主要由少量大收益交易贡献;如果胜率高,那么收益主要由大量小收益交易累积得到;如果胜率、盈亏比都低,那这个策略是亏钱的无效策略。

    平均收益是每笔交易的期望收益,可以跟交易成本比较,有实际含义;中位数收益是纯统计数据,实际交易中无法使用,没有实际含义。

    收益由少量大收益交易贡献,不代表是运气,只是策略的特点,就像做打板的,就是三年不开张,开张吃三年。不是胜率高的策略比盈亏比高的策略好,这就是为什么平均收益更常用,只要赚钱的策略就是好策略,钱怎么赚来的并不重要。

    建议先把已有的指标研究透,含义是什么,怎么用的,然后再新增自己的指标。
    labubu
        2
    labubu  
       3 天前
    这个是最好的股票组合回测网站了: https://www.portfoliovisualizer.com/backtest-portfolio#analysisResults
    dominic0312
        3
    dominic0312  
       3 天前
    我的经验是,主观手动交易有一定的经验再来做自动化才行,把自动化交易作为辅助手段和次要仓位, 要不然会陷入无限回测的陷阱中; 当然如果你的工作就是无限回测当我没说。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2984 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 13:19 PVG 21:19 LAX 05:19 JFK 08:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86