参考书目:深入浅出Python量化交易实战


海龟策略也是经典中的经典。其核心要点是:在股价超过过去的N天交易日的最高点时是买入信号,跌破过去的N天交易日的最低点时是卖出信号。最高点和最低点的通道被称为唐奇安通道。

这也是很多交易者会使用的策略,本文简化计算,下面进行Python实现和验证回测。


获取数据和生成交易信号

#导入必要的库
import tushare as ts
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

下载平安银行数据

#指定下载股票的日期范围
start_date = '2020-01-01'
end_date = '2020-03-20'
#使用ts获取数据
#将时间范围作为参数传入
zgpa = ts.get_k_data('601318',start_date, end_date)
zgpa = zgpa.set_index('date')
#检查是否下载成功
zgpa.head()

海龟策略的交易信号

#创建一个名为turtle的数据表,使用原始数据表的日期序号
turtle = pd.DataFrame(index = zgpa.index)
#设置唐奇安通道的上沿为前5天股价的最高点
turtle['high'] = zgpa['close'].shift(1).rolling(5).max()
#设置唐奇安通道的下沿为过去5天的最低点
turtle['low'] = zgpa['close'].shift(1).rolling(5).min()
#当股价突破上沿时,发出买入信号
turtle['buy'] = zgpa['close'] > turtle['high']
#当股价突破下沿时,发出卖出信号
turtle['sell'] = zgpa['close'] < turtle['low']
#检查信号创建情况
turtle.tail()

生成两个布尔序列,不能直接代表买入和卖出,因为要卖出首选i得买入。还要进行一下条件判断构建交易信号。

#初始的订单状态为0
turtle['orders']=0
#初始的仓位为0
position = 0
#设置循环,遍历turtle数据表
for k in range(len(turtle)):#当买入信号为True且仓位为0时下单买入1手if turtle.buy[k] and position ==0:#修改对应的orders值为1turtle.orders.values[k] = 1#仓位也增加1手position = 1#而当卖出信号为True且有持仓时买出1手elif turtle.sell[k] and position > 0:#orders的值修改为-1turtle.orders.values[k] = -1#仓位相应清零position = 0
#检查是否成功
turtle.tail(15)

画图查看买入和卖出的点

#创建10*5的画布
plt.figure(figsize=(10,5))
#绘制股价的折线图
plt.plot(zgpa['close'],lw=2)
#绘制唐奇安通道上沿
plt.plot(turtle['high'],lw=2, ls='--',c='r')
#绘制唐奇安通道下沿
plt.plot(turtle['low'],lw=2,ls='--',c='g')
#标出买入订单,用正三角标记
plt.scatter(turtle.loc[turtle.orders==1].index,zgpa['close'][turtle.orders==1],marker='^',s=80,color='r',label='Buy')
#标出卖出订单,用倒三角标记
plt.scatter(turtle.loc[turtle.orders==-1].index,zgpa['close'][turtle.orders==-1],marker='v',s=80,color='g',label='Sell')
#添加网格、图注并显示
plt.legend()
plt.xticks([0,12,24,36,48])
plt.grid()
plt.show()

20000的初始资金进行交易;计算每一天的市值和账户余额变化

#再次给小瓦2万块初始资金
initial_cash = 20000
#创建新的数据表,序号和turtle数据表一致
positions = pd.DataFrame(index=turtle.index).fillna(0.0)
#每次交易为1手,即100股,仓位即买单和卖单的累积加和
positions['stock'] = 100 * turtle['orders'].cumsum()
#创建投资组合数据表
portfolio = positions.multiply(zgpa['close'], axis=0)
#持仓市值为持仓股票数乘以股价
portfolio['holding_values'] = (positions.multiply(zgpa['close'], axis=0))
#计算出仓位的变化
#剩余的现金是初始资金减去仓位变化产生的现金流累计加和
portfolio['cash'] = initial_cash - (positions.diff().multiply(zgpa['close'], axis=0)).cumsum()
#总资产即为持仓股票市值加剩余现金
portfolio['total'] = portfolio['cash'] + portfolio['holding_values']
portfolio.tail(13)

核心思想也是使用股票仓位的变化的值乘上相应的股价在累计求和就是现金流的变化。

画图查看账户变化

plt.figure(figsize=(10,5))
plt.plot(portfolio['total'])
plt.plot(portfolio['holding_values'],'--')
plt.grid()
plt.legend()
plt.xticks([0,12,24,36,48])
plt.show()

比双均线策略要好一点。因为整体这段时间股价是在一直下跌的,所以亏得少一点就算得上很不错的策略了。

Python量化交易03——海龟策略相关推荐

  1. 4、Python量化交易-双均线策略

    目录 一.数据准备 二.5日均线和30日均线 1 - 均线的概念 2 - 计算5日均线与30日均线 3 - 画出MA5和MA30 三.金叉和死叉 1 - 金叉和死叉概念 2 - 分析所有金叉日期和死叉 ...

  2. python量化交易--因子选股策略

    Fama-French三因子选股策略,三因子分别为  市场因子(股指).市值因子.账面市值比因子 三因子模型的具体步骤: 1.对股票按照市值和账面市值比分组,共计六组,市值按大小市值各50%分,账面市 ...

  3. python量化交易--择时策略

    1.在banban网爬取所有A股的股票名称和代码. 观察板板网站的股票,将在深圳上市和上海上市的A股信息爬取并保存到本地文件 2.传入股票代码,利用tushare api提取股票的所有历史数据,对股票 ...

  4. 6、Python量化交易-单均线策略升级1:T+0限制

    目录 前言 T+0限制实现思路 一.调整买卖比例并统计pnl 1 - 在main中添加统计pnl 2 - 调整买入比例0.98,卖出比例1.02 3 - 获取pnl值 二.策略添加T+0限制 1 - ...

  5. 《深入浅出Python量化交易实战》:散户也能学会的数字化交易策略

    前言 您可能不知道,许多专业的交易机构已经采用设定程序完成自动化交易,通过机器语言,解密盘面的走势,从而实现持续盈利的目的. (文末送读者福利) 这并非什么秘密,他们正是借助了这样的数字化工具进行操作 ...

  6. python量化交易策略实例_Python进阶量化交易场外篇3——最大回撤评价策略风险...

    新年伊始,很荣幸笔者的<教你用 Python 进阶量化交易>专栏在慕课专栏板块上线了,欢迎大家订阅!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外会陆续推出一些手记来辅助同学们学习 ...

  7. Python量化交易02——双均线策略(移动平均线)

    参考书目:深入浅出Python量化交易实战 本次带来最经典的交易策略,双均线策略的构建和其回测方法. 双均线一般采用5天均值和10天均值,如果5日均线上穿突破了10日均线,说明股价在最近的涨势很猛,买 ...

  8. Python量化交易04——基于机器学习的交易策略

    参考书目:深入浅出Python量化交易实战 学量化肯定要用的上机器学习这种强大的预测技术.本次使用机器学习构建一些简单的预测进行量化交易,使用Python进行回测. 获取数据 import panda ...

  9. 使用python量化交易接口有哪些分析指标和策略?

    量化交易有哪些指标可以用于分析呢?主要有技术面和基本面可以用于分析! 来看一下技术面和基本面有什么区别? 技术面更关注具体的价格,比如每天的开盘价.收盘价.以及和开盘价/收盘价/最低价/最高价相关的K ...

最新文章

  1. Ardino基础教程 13_温度传感器
  2. 人体姿态估计 自顶向下与自底向上
  3. 英语笔记-20151209
  4. 各大厂抢招WPF,小米这回是下了血本啊...
  5. 对属性可以赋值的位置
  6. 全栈程序员这个月写了啥代码?
  7. 听我讲完GET、POST原理,面试官给我倒了杯卡布奇诺
  8. shell 执行脚本
  9. 组策略之统一修改域中计算机的本地管理员账户和密码和受限制组
  10. linux Rootkit检查
  11. TOGAF架构学习总结
  12. 信息类产品检测培训讲义-EN55022
  13. android 条形码 两边空白,几个条形码的问题
  14. 【AI隐私保护.论文笔记】CrypTFlow2: Practical 2-Party Secure Inference,CrypTFlow2:实用的安全两方推理
  15. 用 Python 播放多声轨 MIDI 文件音乐
  16. 【Pytorch的优化器总结归纳】
  17. 【LeetCode】跳跃游戏Ⅰ~Ⅵ(我真的跳晕了@_@)
  18. iPhone 13维修换屏问题:芯片决定面容ID“生死”
  19. POE受电设备(PD)电路工作原理
  20. 2D激光雷达:使用MindStudio进行MindX SDK任务开发

热门文章

  1. 宽带运营商大数据和机器学习支出将突破500亿美元
  2. 苹果蓝牙耳机 android,新款AirPods使用之安卓和Mac
  3. 操作系统——进程之处理机调度
  4. (转)关于数学建模竞赛的一点思考、总结和建议
  5. MATLAB软件(matlab7.0官方下载)V7.0官方版
  6. 零刻EQ12系列迷你主机英特尔N100首发 搭配DDR5内存双2.5G网口
  7. 电脑桌面的计算机双击打不开,双击我的电脑打不开怎么办【图文】
  8. html隐藏input边框线,html中去掉文本框(input type=text)的边框或只显示下边框
  9. 『ORACLE』安装oracle(11g)
  10. 夜神模拟器:新建android模拟器并安装apk文件