'''
策略原理:在下跌过程中,当某一日出现锤子线,意味着当天行情先继续下跌后出现大幅反弹,行情可能由此反转;由此以观察期均线识别趋势下跌,以下跌趋势中出现锤子线作为开仓信号;采用移动止损方式进行止损构建此策略;择时策略:
'''
import numpy as np
import pandas as pd
import tushare as ts
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname='C:/Windows/Fonts/simhei.ttf')# 参数设置
code = 'hs300'         # 股票代码
start = '2018-01-01'   # 回测开始时间
end = '2020-04-24'     # 回测结束时间
body_size = 0.3        # k线实体长度与开盘价之比的 上限,即当日k线涨幅
head_size = 0.5        # k线上影线长度与k线下影线长度之比的 上限
tail_size = 2          # k线下影线长度与k线实体长度之比的 下限
length = 10            # 观察期时间长短
stoplose_trigger = 1   # 止损触发的几倍标准差
# 获取数据
stock = ts.get_k_data(code, start=start, end=end)[['date', 'open', 'close', 'high', 'low']]
# 数据准备
stock['ma'] = stock['close'].rolling(length).mean()
stock['std'] = stock['close'].rolling(length).std()
stock['pct_change'] = stock['close'].pct_change()
stock['yes_ma'] = stock['ma'].shift(1)
stock['yes_std'] = stock['std'].shift(1)
# 判断k线是否为锤子线
stock['head'] = stock['high'] - stock[['open', 'close']].max(axis=1)    # 上影线长度
stock['body'] = abs(stock['open'] - stock['close'])                     # 实体长度
stock['tail'] = stock[['open', 'close']].min(axis=1) - stock['low']     # 下影线长度
stock['head_cond'] = np.where(stock['tail'] == 0, False, stock['head'] / stock['tail'] < head_size)
stock['body_cond'] = np.where(stock['body'] / stock['open'] < body_size, 1, 0)
stock['tail_cond'] = np.where(stock['tail'] == 0, True, stock['tail'] / stock['body'] > tail_size)
stock['hammer'] = stock[['head_cond', 'body_cond', 'tail_cond']].all(axis=1)  # 锤子信号
stock['yes_hammer'] = stock['hammer'].shift(1)  # 昨天的锤子信号
# 交易策略***************************************
signal = 0   # 持仓记录,1代码有仓位,0代表空仓;
# 遍历每一天,前20天数据无效
for i in range(2*length, len(stock)):# 1. 持仓中if signal == 1:stoplose_price = max(stock.loc[i, 'yes_ma'] - stoplose_trigger * stock.loc[i, 'yes_std'],long_open_price - long_open_delta)# 判断是否满足止损if stock.loc[i, 'low'] < stoplose_price:signal = 0# 当天收益计算stock.loc[i,'return'] = min(stock.loc[i, 'open'], stoplose_price) / stock.loc[i, 'open'] - 1stock.loc[i, 'signal'] = -1# 不满足止损条件,继续持仓的收益else:stock.loc[i, 'return'] = stock.loc[i, 'close'] / stock.loc[i-1, 'close'] - 1stock.loc[i, 'signal'] = 1# 2. 开仓触发条件else:# 判断前期是否下降趋势中if stock.loc[i-length, 'ma'] > stock.loc[i, 'ma']:# 判断是否有锤子信号if stock.loc[i, 'yes_hammer']:signal = 1# 开仓价格&标准差long_open_price = stock.loc[i, 'open']long_open_delta = stock.loc[i, 'yes_std']# 当天收益计算stock.loc[i, 'return'] = stock.loc[i, 'close'] / stock.loc[i, 'open'] - 1stock.loc[i, 'signal'] = 2
stock['signal'] = stock['signal'].fillna(0)
# 收益计算
stock['return'] = stock['return'].fillna(0)
stock['stock_return'] = (1 + stock['pct_change']).cumprod()
stock['strategy_return'] = (1 + stock['return']).cumprod()
print(stock)# 画图
stock[['stock_return', 'strategy_return']].plot(figsize=(16,8))
plt.legend(loc=2)
plt.xticks(list(range(len(stock)))[::30], stock['date'][::30], rotation=45)
plt.show()

基于K线形态锤子线的趋势跟踪策略相关推荐

  1. 金融量化-基于K线形态锤子线的趋势跟踪策略

    1.基本原理 1.1 K线部位定义: 实体:某一根K线开盘价和收盘价之间部分; 上影线:某一根K线最高价到实体上端的部分; 下影线:某一根K线最低价到实体下端的部分; 1.2 锤子线定义 实体处于整个 ...

  2. 商品期货CTA策略系列文章 -- 主流量化CTA策略之趋势跟踪策略

    2016年之前,大宗商品市场一直低迷,南华商品指数年涨跌幅在2014年为-16.54%,在2015年为-14.52%,这两年间股票市场不断创造历史新高而整个商品市场却持续下跌,在2015年股市一波&q ...

  3. 趋势跟踪策略在专业量化交易策略中的地位

    Vincent Leiberich:趋势策略简单有效.回撤有时候的确很大,但是抗一抗总能过去了.因此很多专业机构都用趋势跟踪策略.我敢说,国内"只用"趋势跟踪策略的期货私募应该一抓 ...

  4. python:chatGPT 写一个趋势跟踪策略 量化交易程序

    chatGPT:趋势跟踪策略的量化交易程序可能会因语言和框架而异,下面是一个简单的Python代码示例,用于演示如何通过量化编程来实现趋势跟踪策略. 这段代码是一个简单的策略实现,它读取股票数据并计算 ...

  5. 趋势跟踪策略失效了,哈丁和他的元盛该怎么办?

    趋势跟踪策略失效了,哈丁和他的元盛该怎么办? CTA基金网 昨天 东英资管/作者 全球对冲汇/来源 哈丁和他的元盛,该怎么办? 01 /// 最受欢迎的交易策略之一,失败了 大卫•哈丁(David H ...

  6. 83、【backtrader期货策略】一个国债期货的日线趋势跟踪策略

    有读者咨询怎么获取国债期货的数据以及如何用国债期货做一个交易策略,并且指定其中要涉及到移仓换月,交易逻辑和64.[backtrader期货策略]基于macd与ema的趋势跟踪策略(真实回测-2021- ...

  7. 股票个人量化交易接口最常见的趋势跟踪策略

    趋势跟踪策略相对于高频策略和统计套利类的策略来说风险就相对较大了,这是因为该策略风险敞口暴露较多. 我们在市面上常见的比如Smart Beta策略,CTA趋势跟踪策略和股票指数增强都是属于这种风险敞口 ...

  8. 菜鸟de量化之路——(1)趋势跟踪策略

    这是我第一篇博客,也是我的本科毕业课题--开发一个简易的量化系统,包括择时选股模块和回测模块. 所谓的量化系统,是指以数学模型代替人为判断,以程序交易替代人为操作,利用计算机的庞大的计算能力,制定能带 ...

  9. 如何追踪期货趋势跟踪策略的表现

    来源: Chihiro Quantitative Research 作者:刀疤连 趋势跟踪策略,学术上又被称为时间序列动量(time series momentum),在CTA基金中被广泛使用,也是多 ...

最新文章

  1. C语言中的CONST使用
  2. sap scc4 客户端设置
  3. 与ai计算机专业大学排名,全球大学计算机科学与人工智能排名:卡耐基梅隆大学居首...
  4. xilinx芯片管脚使用限制_修复焊接BGA芯片过程
  5. 写了个SQL语句,发到这里留念
  6. 我的conky 配置(拆分版)
  7. 从世界杯看德国,再看国内
  8. http2-frame-WINDOW_UPDATE
  9. 学术墙报模板_对不起,学术墙报太有意思了,不参加不行!
  10. 深入浅出mysql 出版社_深入浅出mysql
  11. 刘宇凡:苍井空靠粉丝经济卖内衣还能持续多久?
  12. We‘re sorry but XX doesn‘t work properly without JavaScript enabled. Please enable it to continue
  13. PHP TP5框架 发送短信验证码
  14. high sierra php,mac os high sierra下搭建php多版本-php5.2+php5.6-nginx
  15. 测试18款听书APP,免费听喜马拉雅上付费音频的办法其实很多
  16. 由浅入深读透vue源码:diff算法
  17. MATLAB画三维动态魔方/旋转魔方/旋转立方体
  18. SpringMVC_初级总结
  19. Job Scheduling简介
  20. 超详细!动画图解「合并 K 个排序链表」

热门文章

  1. memoQ 9.3 | 在Amazon MT中自定义术语
  2. caffe 训练手写字体HWDB1.1trn_gnt.zip HWDB1.1tst_gnt.zip并测试完整超详尽攻略
  3. Datawhale数据分析课程第二章
  4. 【对讲机的那点事】选择对讲机你了解UHF和VHF业余频段的区别吗?
  5. 【English】外企常用口语
  6. RNAseq数据分析--RNA-Seq数据质控
  7. oracle 的setup没反应,win10系统下setup.exe打不开没反应如何解决
  8. 当下热门的短视频同城拓客工具,应该如何着手去做?
  9. K8S使用持久化卷存储到NFS(NAS盘)
  10. 深度解析:信创产业全景图