做网站界面尺寸,wordpress站点赏析,做图软件下载官方网站,wordpress菜单栏优化声明#xff1a;股市有风险#xff0c;投资需谨慎#xff01;本人没有系统学过金融知识#xff0c;对股票有敬畏之心没有踏入其大门#xff0c;今天用另外一种方法模拟炒股#xff0c;后面的模拟的实战全部用同样的数据#xff0c;最后比较哪种方法赚的钱多。
海龟交易…声明股市有风险投资需谨慎本人没有系统学过金融知识对股票有敬畏之心没有踏入其大门今天用另外一种方法模拟炒股后面的模拟的实战全部用同样的数据最后比较哪种方法赚的钱多。
海龟交易策略Turtle Trading
概念
海龟交易策略是一种经典的量化交易策略由美国交易员理查德·丹尼斯Richard Dennis在20世纪80年代开发。该策略使用唐安奇通道Donchian channel来跟踪趋势产生买卖信号利用ATR真实波幅均值分批加仓或者减仓并且动态进行止盈和止损。唐奇安通道由周期内的最高价和最低价来显示市场价格的波动性当价格冲破该通道的上轨道时就是可能的买入信号反之冲破下轨时就是可能的卖出信号。
风控
海龟交易策略包括了仓位的基本单位N的定义这个单位确保了预期价值波动与总净资产的1%对应从而控制风险。此外策略还涵盖了入场和止损规则一旦确定了市场的趋势方向海龟交易法采取突破策略进行入场并设定严格的止损规则一旦市场反向突破止损位就会平仓离场以限制亏损。
优势
海龟交易策略的优势在于其基于趋势跟随采用趋势跟踪策略充分利用市场趋势的力量并且具有严格的风险管理设定了明确的止损规则。
挑战
需要注意的是这种策略需要交易者具备耐心和纪律因为它可能需要持有较长的时间并且在市场出现短期反弹或调整时也不能轻易离场。
读入数据
数据依旧和前几篇量化交易数据一致
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams [font.sans-serif] SimHei #显示中文
plt.rcParams [axes.unicode_minus]False #显示负号
zgpa pd.read_csv(history_k_data.csv)
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()新建一个数据表date列和原表一致
high列为唐奇安通道的上沿前5天股价的最高点。low列为唐奇安通道的下沿过去5天股价的最低点。buy列当股价突破上沿时发出买入信号True。sell列当股价突破下沿时发出卖出信号True。
#初始的订单状态为0
turtle[orders]0
#初始的仓位为0
position 0
#设置循环遍历turtle数据表
for k in range(len(turtle)):#当买入信号为True且仓位为0时下单买入1手if turtle.buy.iloc[k] and position 0:#修改对应的orders值为1turtle.orders.values[k] 1#仓位也增加1手position 1#而当卖出信号为True且有持仓时卖出1手elif turtle.sell.iloc[k] and position 0:#orders的值修改为-1turtle.orders.values[k] -1#仓位相应清零position 0
#检查是否成功
turtle.tail(15)显示表格的后15行 上表中orders列为初始订单状态初始值为0. 设置初始的仓位为0并赋值给变量position。 上面代码写了一个循环遍历上表每一行当buy列买入信号为True时orders列对应行赋值1position仓位加1当sell列卖出信号为True且有持仓时卖出1手position仓位清零。
数据可视化
#创建10*5的画布
plt.figure(figsize(10,5))
#绘制股价的折线图
plt.plot(zgpa[close],lw2)
#绘制唐奇安通道上沿
plt.plot(turtle[high],lw2, ls--,cr)
#绘制唐奇安通道下沿
plt.plot(turtle[low],lw2,ls--,cg)
#标出买入订单用正三角标记
plt.scatter(turtle.loc[turtle.orders1].index,zgpa[close][turtle.orders1],marker^,s80,colorr,labelBuy)
#标出卖出订单用倒三角标记
plt.scatter(turtle.loc[turtle.orders-1].index,zgpa[close][turtle.orders-1],markerv,s80,colorg,labelSell)
#添加网格、图注并显示
plt.legend()
plt.xticks([0,12,24,36,48,60,72,84,96,108])
plt.grid()
plt.show()上图绘制出了唐奇安通道的上下沿其中红色三角形标记买入信号绿色三角形标记卖出信号。
#再次给小瓦2万块初始资金
initial_cash 20000
#创建新的数据表序号和turtle数据表一致
positions pd.DataFrame(indexturtle.index).fillna(0.0)
#每次交易为1手即100股仓位即买单和卖单的累积加和
positions[stock] 100 * turtle[orders].cumsum()
#创建投资组合数据表
portfolio positions.multiply(zgpa[close], axis0)
#持仓市值为持仓股票数乘以股价
portfolio[holding_values] (positions.multiply(zgpa[close], axis0))
#计算出仓位的变化
#剩余的现金是初始资金减去仓位变化产生的现金流累计加和
portfolio[cash] initial_cash - (positions.diff().multiply(zgpa[close], axis0)).cumsum()
#总资产即为持仓股票市值加剩余现金
portfolio[total] portfolio[cash] portfolio[holding_values]
portfolio.tail(13)显示后13行数据开始进行回测炒股初始资金一如既往的20000元。 stock列为仓位即买单和卖单的累加和每次交易为1手即100股。 holding_values列为持仓市值为持仓股票数乘以股价。 cash列为剩余的现金由初始资金减去仓位变化产生的现金流累加和。 total列为总资产即为持仓股票市值加剩余现金。 可以看到我发了3篇量化交易的实战案例炒股还没有亏过本本次赚了378元。再次声明我不懂股票只是运用了量化交易策略进行模拟炒股。
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,60,72,84,96,108])
plt.show()数据可视化 创作不易点赞、关注、评论是我创作的动力