一、海龟策略起源与研究现状
1983年,期货大佬理查德·丹尼斯做了一场实验:他招募了23名新手(昵称“海龟”),传授一套趋势跟踪策略,并每人给予100万美元资金。5年后,这群“海龟”中最高盈利达1.72亿美元。
Anderson(2000):在国债期货和小麦市场中应用海龟交易法则,取得了超额收益,并验证了最优资产配置方法的适用性。(Anderson J.A. Taking a peek inside the turtle’s shell[D]. Queensland University ofTechnology, 2000)
John et al.(2004):在美国国债期货、标准普尔500指数期货和黄金期货中进行了大量市场论证,发现海龟交易法则在美国期货市场中能够取得超额收益。他们还对模型进行了优化,进一步提升了收益。(John A, Anderson, Robert W, etc. Maximizing futures returns using fixed fraction assetlocation[J].Applied Financial Economics, 2004, 14(15):156-172)
牛永魁(2013):通过海龟交易法则在沪深300股指期货市场进行回测,发现该策略在中国市场也能取得良好效果,尤其是在加大杠杆后,收益率显著提升。(
牛永魁.基于海龟交易系统的量化交易应用研究[D].河北:河北工业大学,2013)
张玉玲(2018):在牛市和熊市中分别进行回测,发现海龟交易法则在熊市中表现较好,但在牛市中盈利性不足,整体收益未能跑赢大盘。(张玉玲.海龟交易法则在股指期货投资中的有效性研究[D].四川:成都理工大学2018)
Adamu et al.(2010):在伦敦股票市场中对海龟交易法则进行了参数优化,结果显示优化后的系统明显优于随机参数系统。(Adamu K, Phelps S.Coevolution of technical trading rules for high frequencytradingIl]. Proceedings ofthe World Congress on Engineering, 2010:96-101)
郭超(2017):在海龟交易法则基础上加入了适用于震荡行情的子系统,显著提升了收益。(郭超.基于改进海龟交易策略的股指期货程序化交易研究[D].陕西:西安财经学院,2017)
鄢笑玲(2019):通过构建新的模型参数,获得了年化10%以上的收益,超过了股指期货基准收益。(鄢笑玲.基于海龟交易法则的量化策略研究[D]广东:广东财经大学,2019)
二、理论详解
海龟策略的核心理念是捕捉趋势,通过“突破信号”入场,动态加仓,严格止损。
>> 1. 选市场:高流动性是王道
交易高流动性的品种(如期货、外汇),确保能快速进出场,避免滑点损失。
>> 2. 波动率决定仓位
N值:衡量市场波动性,公式为:
N = (前19日N值 × 19 + 当日真实波幅) ÷ 20
其中,真实波幅(TR)取当日最高-最低价、最高-昨收、昨收-最低价中的最大值。
头寸规模:用总资金的1%除以波动风险(N×每点价值),决定每次买入的单位数。
目的:波动越大,仓位越小,控制风险。
>> 3. 入场信号:突破通道
唐奇安通道:
上轨 = 过去20日最高价
下轨 = 过去20日最低价
买入条件:价格突破上轨时入场;若继续上涨0.5N,则加仓。
双重系统:部分资金在突破55日高点时入场,捕捉更长期趋势。
>> 4. 止损与离场
止损:价格比买入价下跌2N时,清仓止损(单笔亏损≤2%)。
止盈离场:价格跌破10日或20日最低价时,平仓锁定利润。
三、策略优缺点:高收益≠躺赢
优点:
✅ 趋势明确时收益爆发性强(年化收益可达30%+)。
✅ 严格仓位管理,避免情绪化交易。
缺点:
❌ 震荡市频繁止损,回撤大(最大回撤超30%)。
❌ 需长期坚持,普通人难以严格执行。
四、案例分析-沪深300回测结果(基于atrader平台)
1.初始化
def init(context):` `# 注册数据` `reg_kdata('day', 1) # 注册日频行情数据` `# 回测细节设置` `set_backtest(initial_cash=1e8, margin_rate=1.0, slide_price=0.0,` `price_loc=1, deal_type=0, limit_type=0)` `# 全局变量定义/参数定义` `context.initial = 1e8 # 初始化设置账户总资金` `context.win = 22 # 计算所需总数据长度,需比进场数据长度大2` `context.system_in = 20 # 系统的进场数据长度` `context.system_out = 10 # 系统的出场数据长度` `context.ATR_N = 20 # ATR的数据长度` `context.add = 0.5 # 加仓参数` `context.stop_loss = 2 # 止损参数` `context.Tlen = len(context.target_list) # 标的数量` `context.record_entryP = np.array(np.zeros(context.Tlen)) # 记录入场点位` `context.future_info = get_future_info(context.target_list) # 获取期货标的基本信息
2.数据获取与计算
def on_data(context):` `# 获取注册数据` `data = get_reg_kdata(reg_idx=context.reg_kdata[0], length=context.win, fill_up=True, df=True)` `if data['close'].isna().any(): # 行情数据若存在nan值,则跳过` `return` `# 仓位数据查询` `long_positions = context.account().positions['volume_long'] # 获取多头仓位数据` `short_positions = context.account().positions['volume_short'] # 获取空头仓位数据` `# 数据计算` `close = data.close.values.reshape(-1, context.win).astype(float) # 获取收盘价,并转为ndarray类型的二维数组` `high = data.high.values.reshape(-1, context.win).astype(float) # 获取最高价,并转为ndarray类型的二维数组` `low = data.low.values.reshape(-1, context.win).astype(float) # 获取最低价,并转为ndarray类型的二维数组
3.逻辑计算
# 逻辑计算``for i in range(context.Tlen):`` ` `# 计算系统进出场唐奇安通道` `system_in_up = max(high[i,-context.system_in-1:-1]) # 系统的进场的上轨` `system_in_down = min(low[i, -context.system_in-1:-1]) # 系统的进场的下轨` `system_out_up = max(high[i,-context.system_out-1:-1]) # 系统的出场的上轨` `system_out_down = min(low[i, -context.system_out-1:-1]) # 系统的出场的下轨`` ` `# ATR计算` `HL = (high[i,-context.ATR_N-1:-1] - low[i,-context.ATR_N-1:-1]) # 当前交易日的最高价与最低价间的波幅` `HC = abs(high[i,-context.ATR_N-1:-1] - close[i,-context.ATR_N-2:-2]) # 前一交易日收盘价与当个交易日最高价间的波幅` `CL = abs(low[i,-context.ATR_N-1:-1] - close[i,-context.ATR_N-2:-2]) # 前一交易日收盘价与当个交易日最低价间的波幅` `TR = np.max([HL,HC,CL],axis = 0) # n日的真实波幅` `ATR = TR.mean() # n日的真实波幅的均值`` ` `# 每次要买入的仓位` `min_move = context.future_info['min_move'][i] # 标的最小变动单位` `Unit = context.initial * 0.01 / ATR / min_move / context.Tlen # 标的每次买入仓位
4.下单交易
# 无持仓—进场``if (long_positions[i] == 0) & (short_positions[i] == 0): # 无持仓` `if close[i,-1] > system_in_up: # 进多单` `order_target_volume(account_idx=0, target_idx=i, target_volume=int(Unit), side=1, order_type=2)` `context.record_entryP[i] = close[i,-1] # 记录进场价格`` ` `elif close[i,-1] < system_in_down: # 进空单` `order_target_volume(account_idx=0, target_idx=i, target_volume=int(Unit), side=2, order_type=2)` `context.record_entryP[i] = close[i, -1] # 记录进场价格
# 持多仓—加仓/出场``elif (long_positions[i] > 0): # 持有多单` `if close[i, -1] > context.record_entryP[i] + context.add * ATR: # 多单加仓` `order_target_volume(account_idx=0, target_idx=i, target_volume=int(Unit), side=1, order_type=2)` `context.record_entryP[i] = close[i, -1] # 记录进场价格`` ` `elif close[i, -1] < system_out_down: # 多单离市` `order_target_volume(account_idx=0, target_idx=i, target_volume=0, side=1, order_type=2)` `context.record_entryP[i] = 0`` ` `elif close[i, -1] < context.record_entryP[i] - context.stop_loss * ATR: # 多单止损` `order_target_volume(account_idx=0, target_idx=i, target_volume=0, side=1, order_type=2)` `context.record_entryP[i] = 0
# 持空仓—加仓/出场``elif (short_positions[i] > 0): # 持有空单` `if close[i,-1] < context.record_entryP[i] - context.add * ATR : # 空单加仓` `order_target_volume(account_idx=0,target_idx=i,target_volume=int(Unit),side=2, order_type=2)` `context.record_entryP[i] = close[i, -1] # 记录进场价格`` ` `elif close[i, -1] > system_out_up: # 空单离市` `order_target_volume(account_idx=0, target_idx=i, target_volume=0, side=2, order_type=2)` `context.record_entryP[i] = 0`` ` `elif close[i,-1] > context.record_entryP[i] + context.stop_loss * ATR: # 空单止损` `order_target_volume(account_idx=0, target_idx=i, target_volume=0, side=2, order_type=2)` `context.record_entryP[i] = 0
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。