一、 参与背景:为何加入PandaAI种子用户计划
当我看到PandaAI发布的"仿真实盘种子用户招募"计划时,立刻被其中"定义量化新工具"的愿景所吸引。与普通产品内测不同,这次招募明确提出寻找"战友"而非单纯"用户",强调与真正沉心做策略、懂交易的实践者共同打磨下一代量化工具。这种共创模式让我对PandaAI团队的专业态度产生信任,于是毫不犹豫地提交了申请。
作为有一定量化交易经验的参与者,我特别看重计划中提到的几大专属权益:5000+初始算力包可无门槛支持策略回测和仿真实盘交易;产品共建者身份能让建议直达产品核心团队;还有与产品团队、资深策略开发者同群交流的机会。这些权益不仅实用,更体现出PandaAI团队希望与用户共同成长的诚意。
二、 体验全流程记录:从零到一的进阶
(一)仿真账户开通流程
注册环节只需点击就可以开通。但必须吐槽的是,开户入口相当难找,这可能是因为产品还处于测试阶段,界面布局还在优化中。
小贴士:主页点击超级图表-实盘-账户管理,按照要求点击就可以开通仿真账户了
(二)首个期货品种策略的构建过程
在完成仿真账户开户后,目前仿真账户还只支持期货,我开始了第一个期货品种策略的构建工作。这一过程主要包括以下几个环节:
- 策略代码实现
PandaAI平台提供了策略编写界面,支持Python语言。对于不熟悉编程的用户,系统也提供了部分可视化配置选项,降低了策略实现的门槛。
大家要注意的是目前回测和仿真的代码并不完全一致,还有待进一步优化之中。
我目前的仿真代码如下供大家参考,感谢平台老师的支持:
{“format_version”:“V1.0”,“name”:“期货仿真_M”,“description”:"",“litegraph”:{“id”:“00000000-0000-0000-0000-000000000000”,“revision”:0,“last_node_id”:1,“last_link_id”:0,“nodes”:[{“id”:1,“type”:“CodeControl”,“pos”:[810,144],“size”:[210,63],“flags”:{“uuid”:“2d5dbf94-92ab-4133-87bc-300de7b796eb”,“plugin_source”:“official”},“order”:0,“mode”:0,“inputs”:[{“locked”:false,“name”:“策略代码”,“type”:“string”,“widget”:{“name”:“策略代码”},“boundingRect”:[-10010,-10010,15,20],“pos”:[10,36],“link”:null,“hide”:true,“fieldName”:“code”}],“outputs”:[{“locked”:false,“name”:“策略代码”,“type”:“string”,“boundingRect”:[1001,148,20,20],“links”:null,“hide”:false,“fieldName”:“code”}],“title”:“Python代码输入”,“properties”:{“策略代码”:“from datetime import datetime\nimport panda_quant\nfrom panda_backtest.api.future_api import *\nfrom panda_trading.trading_common.api.api import target_future_group_order, buy_open, sell_open, buy_close, sell_close\nfrom panda_trading import SRLogger\nimport numpy as np\nimport pandas as pd\n\n# 全部合约列表\nSYMBOLS = [\n “AU2602.SHF”\n]\n\ndef initialize(context):\n SRLogger.info(“initialize”)\n SRLogger.info('context.now: ’ + str(context.now))\n # 获取当前分钟对应的下单合约索引\n now = datetime.now()\n print(‘时间’, now)\n\ndef before_trading(context):\n SRLogger.info(“before_trading”)\n\ndef handle_data(context, data):\n SRLogger.info(“handle_data”)\n account = context.run_info.future_account\n\n # 获取当前分钟对应的下单合约索引\n now = datetime.now()\n print(‘时间’, now)\n idx = now.minute % len(SYMBOLS)\n symbol = SYMBOLS[idx]\n\n SRLogger.info(f"当前分钟: {now.minute}, 选择合约: {symbol}”)\n\n # 使用上一交易日作为开始日期\n start_date = panda_quant.get_previous_trading_date(datetime.now().strftime(’%Y%m%d’))\n end_date = datetime.now().strftime(’%Y%m%d’)\n\n # 打印入参\n SRLogger.info(f"调用参数: symbol_list={SYMBOLS}, start_date={start_date}, end_date={end_date}, period=‘1m’")\n\n quotation_df = future_api_quotation(symbol_list=[symbol], start_date=start_date, end_date=end_date, period=‘1m’)\n SRLogger.info(quotation_df)\n\n if len(quotation_df) < 20:\n SRLogger.info(f"合约 {symbol} 的数据不足以计算均线")\n return\n\n close_prices = quotation_df[‘close’]\n\n # 计算短期和长期均线\n short_ma = close_prices.rolling(window=5).mean()\n long_ma = close_prices.rolling(window=10).mean()\n\n # 计算布林带上轨、中轨和下轨\n middle_band = close_prices.rolling(window=20).mean()\n std_dev = close_prices.rolling(window=20).std()\n upper_band = middle_band + (std_dev * 2)\n\n # 计算动量因子\n momentum = close_prices.diff(periods=5)\n SRLogger.info(f"动量因子: {momentum.iloc[-1]}")\n print(f"动量因子值({symbol}): {momentum.iloc[-1]}")\n\n # 判断是否价格突破布林带上轨买入\n if close_prices.iloc[-1] > upper_band.iloc[-1]:\n buy_open(account, symbol, 1)\n SRLogger.info(f"价格突破布林带上轨买入 {symbol}")\n\n # 判断金叉和死叉\n elif short_ma.iloc[-1] < long_ma.iloc[-1] and short_ma.iloc[-2] >= long_ma.iloc[-2]:\n # 死叉卖出\n sell_close(account, symbol, 1)\n SRLogger.info(f"死叉卖出 {symbol}")\n\ndef after_trading(context):\n SRLogger.info(“after_trading”)"},“color”:"#232",“bgcolor”:"#353","_fullTitle":“Python代码输入”}],“links”:[],“groups”:[],“config”:{},“extra”:{“ds”:{“scale”:1,“offset”:[-43.51979379472391,181.600604757918]}},“version”:0.4},“nodes”:[{“uuid”:“2d5dbf94-92ab-4133-87bc-300de7b796eb”,“title”:“Python代码输入”,“name”:“CodeControl”,“type”:“CodeControl”,“litegraph_id”:1,“positionX”:810,“positionY”:144,“width”:210,“height”:63,“static_input_data”:{“code”:“from datetime import datetime\nimport panda_quant\nfrom panda_backtest.api.future_api import *\nfrom panda_trading.trading_common.api.api import target_future_group_order, buy_open, sell_open, buy_close, sell_close\nfrom panda_trading import SRLogger\nimport numpy as np\nimport pandas as pd\n\n# 全部合约列表\nSYMBOLS = [\n “AU2602.SHF”\n]\n\ndef initialize(context):\n SRLogger.info(“initialize”)\n SRLogger.info('context.now: ’ + str(context.now))\n # 获取当前分钟对应的下单合约索引\n now = datetime.now()\n print(‘时间’, now)\n\ndef before_trading(context):\n SRLogger.info(“before_trading”)\n\ndef handle_data(context, data):\n SRLogger.info(“handle_data”)\n account = context.run_info.future_account\n\n # 获取当前分钟对应的下单合约索引\n now = datetime.now()\n print(‘时间’, now)\n idx = now.minute % len(SYMBOLS)\n symbol = SYMBOLS[idx]\n\n SRLogger.info(f"当前分钟: {now.minute}, 选择合约: {symbol}”)\n\n # 使用上一交易日作为开始日期\n start_date = panda_quant.get_previous_trading_date(datetime.now().strftime(’%Y%m%d’))\n end_date = datetime.now().strftime(’%Y%m%d’)\n\n # 打印入参\n SRLogger.info(f"调用参数: symbol_list={SYMBOLS}, start_date={start_date}, end_date={end_date}, period=‘1m’")\n\n quotation_df = future_api_quotation(symbol_list=[symbol], start_date=start_date, end_date=end_date, period=‘1m’)\n SRLogger.info(quotation_df)\n\n if len(quotation_df) < 20:\n SRLogger.info(f"合约 {symbol} 的数据不足以计算均线")\n return\n\n close_prices = quotation_df[‘close’]\n\n # 计算短期和长期均线\n short_ma = close_prices.rolling(window=5).mean()\n long_ma = close_prices.rolling(window=10).mean()\n\n # 计算布林带上轨、中轨和下轨\n middle_band = close_prices.rolling(window=20).mean()\n std_dev = close_prices.rolling(window=20).std()\n upper_band = middle_band + (std_dev * 2)\n\n # 计算动量因子\n momentum = close_prices.diff(periods=5)\n SRLogger.info(f"动量因子: {momentum.iloc[-1]}")\n print(f"动量因子值({symbol}): {momentum.iloc[-1]}")\n\n # 判断是否价格突破布林带上轨买入\n if close_prices.iloc[-1] > upper_band.iloc[-1]:\n buy_open(account, symbol, 1)\n SRLogger.info(f"价格突破布林带上轨买入 {symbol}")\n\n # 判断金叉和死叉\n elif short_ma.iloc[-1] < long_ma.iloc[-1] and short_ma.iloc[-2] >= long_ma.iloc[-2]:\n # 死叉卖出\n sell_close(account, symbol, 1)\n SRLogger.info(f"死叉卖出 {symbol}")\n\ndef after_trading(context):\n SRLogger.info(“after_trading”)"},“model_path”:"",“output_db_id”:null}],“links”:[],“id”:“692ea77056b3321c0bbaf8f3”}
2、存入json文件,拖入工作流画布,保存工作流
3、点击实盘,引入前面的工作流,实盘便开始了
暂时还没产生交易信号,大家等我下次的实盘报告吧。
三、 初步使用感受与观察
通过这一阶段的体验,我发现PandaAI作为新产品,PandaAI也有一些特点,可以改进的空间: - 用户体验设计人性化,但可以进一步降低难度
从开户到策略编写的整个流程,PandaAI都考虑到了用户的使用习惯和需求。但界面布局可能还需要进一步优化,让即使是量化交易新手也能较快上手,比如一个简单的双均线策略能不能也做得更可视化。 - 策略开发效率高,算力支持充沛
平台提供的策略开发工具和回测系统大大提高了策略研发的效率。特别是算力包的直接支持,使得即使复杂的策略也能在较短时间内完成回测验证。 - 仿真环境还需进一步丰富细节
仿真实盘环境的数据质量和交易机制都需高度模拟实盘,这种真实性对于策略验证至关重要。目前PandaAI感觉略显简陋,账户资金数等基本信息找了半天居然没找到。 - 策略模板和示例可以更丰富
对于刚入门的用户,更多策略模板和示例会有很大帮助。虽然平台提供了一些基础策略框架,但目前实盘框架和回测框架并不一致,且框架大多数是回测框架,更丰富的案例库以及能直接使用的实盘框架应该能够帮助用户更快掌握策略开发技巧。 - 文档和教育资源可进一步充实
量化交易本身有一定学习曲线,更详细的产品文档和教程能够帮助用户更好地利用平台功能。特别是在高效因子挖掘,风险控制、资金管理等进阶话题上,更多的指导将很有价值。
四、 后续体验计划与期待
目前,我已经完成了仿真账户开户和首个策略的构建与部署,但尚未产生实际交易信号。在接下来的体验中,我计划重点关注以下几个方面:
策略实盘表现:观察策略在仿真实盘环境中的表现,与回测结果进行对比分析,找出可能存在的差异及原因。
参数优化探索:尝试对策略参数进行优化,看看是否能进一步提升策略性能。在这个过程中,我也会特别注意避免过优化问题。
多策略尝试:在熟悉平台基本功能后,我计划尝试更多类型的策略,如均值回归策略、动量策略等,全面评估PandaAI对不同策略类型的支持能力。
产品反馈贡献:作为种子用户,我会认真记录使用过程中的体验感受和优化建议,及时反馈给产品团队,真正发挥"战友"的作用。
通过这一阶段的初步体验,我对PandaAI平台有了基本了解,也对其"让智能交易更贴合实战需求"的目标有了更深认同。期待在接下来的仿真实盘交易中,能够更深入地体验产品的核心功能,也为产品的完善贡献自己的一份力量。
接下来的体验报告将继续记录仿真实盘交易信号出现后的情况,以及对产品更深入的使用感受。对于也想尝试量化交易的朋友,我建议可以从简单的策略开始,逐步深入,这样才能在控制风险的同时享受量化交易带来的乐趣。