python:海龟交易法则 画唐奇安通道

本文介绍了如何使用Python实现海龟交易法则,包括入场、加仓、止损和离场规则,结合唐奇安通道进行趋势跟踪。通过tushare库获取股票数据,展示了600566的K线图和关键指标分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回忆一下海龟交易法则的策略:
入场条件:当收盘价突破20日价格高点时,买入一单元股票;
加仓条件:当价格大于上一次买入价格的0.5个ATR(平均波幅),买入一单元股票,加仓次数不超过3次;
止损条件:当价格小于上一次买入价格的2个ATR时清仓;
离场条件:当价格跌破10日价格低点时清仓。
这里的20日价格高点和10日价格低点构成唐奇安通道,所以海龟交易法则也可以理解成通道突破的趋势跟踪。

stock_dc.py

# coding: utf-8
import os, sys
#import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import tushare as ts

if len(sys.argv) ==2:
    code = sys.argv[1]
else:
    print('usage: python stock_dc.py stockcode ')
    sys.exit(1)

if len(code) !=6:
    print('stock code length: 6')
    sys.exit(2)

# help(ts.get_k_data) 了解参数
df = ts.get_k_data(code, start='2021-01-01')
#print(df.head())
# 10日移动均线
df['ma10'] = df['close'].rolling(window=10).mean()

# 唐奇安通道(Donchian Channel)取过去20日的最高价,10日的最低价
df['up20'] = df['high'].shift(1).rolling(window=20).max()
df['down'] = df['low'].shift(1).rolling(window=10).min()
#print(df.head())
# 取样 2022年以后的数据
d2 = df[ df.date >'2022-01-01']
print(d2.tail())
d2.index = pd.to_datetime(d2.date)
# 画股价走势图
d2[['close','ma10','up20','down']].plot(grid=True, title=code)
plt.legend(loc='best', shadow=True)
plt.show()

kline_dc.py

# coding: utf-8
import os, sys
import datetime
import matplotlib.pyplot as plt
from matplotlib.pylab import date2num
#import matplotlib.finance as mpf
import mpl_finance as mpf
import pandas as pd
import tushare as ts
import talib

if len(sys.argv) ==2:
    code = sys.argv[1]
else:
    print('usage: python kline_dc.py stockcode ')
    sys.exit(1)

if len(code) !=6:
    print('stock code length: 6')
    sys.exit(2)
    
# help(ts.get_k_data) 了解参数
df = ts.get_k_data(code, start='2021-01-01')
if len(df) <30:
    print(" len(df) <30 ")
    sys.exit(2)

# 10日移动均线
df['ma10'] = df['close'].rolling(window=10).mean()

# 唐奇安通道(Donchian Channel)取过去20日的最高价,10日的最低价
df['up20'] = df['high'].shift(1).rolling(window=20).max()
df['down'] = df['low'].shift(1).rolling(window=10).min()

df = df[ df['date'] >'2022-01-01']
print(df.tail())
# 对tushare获取到的数据转换成 candlestick_ohlc()方法可读取的格式
alist = []
tlist = []
for idx,row in df.iterrows():
    date,open,close,high,low,volume = row[0:6]
    # 将日期转换为数字
    date1 = datetime.datetime.strptime(date,'%Y-%m-%d')
    t = date2num(date1)
    data = (t, open,high,low,close)
    alist.append(data)
    tlist.append(t)

# 加这个两句 可以显示中文
plt.rcParams['font.sans-serif'] = [u'SimHei'] 
plt.rcParams['axes.unicode_minus'] = False

# 创建子图
fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2)
# 设置X轴刻度为日期时间
ax.xaxis_date()
# 对数坐标y轴
#ax.set_yscale('log') 
ax.autoscale_view()
#plt.axes(yscale='log')
#plt.setp(plt.gca().get_xticklabels(), rotation=45)
plt.xticks(rotation=45) 
plt.yticks()
plt.title("股票 {0}:K线图".format(code))
plt.xlabel("date")
plt.ylabel("price")
#mpf.candlestick_ohlc(ax,alist,colorup='green',colordown='red')
mpf.candlestick_ohlc(ax,alist,colorup='red',colordown='green')
# 画 10日均线, 唐奇安通道
plt.plot(tlist, df['ma10'].values, 'orange', label='ma10')
plt.plot(tlist, df['up20'].values, 'maroon', label='up20')
plt.plot(tlist, df['down'].values, 'gray', label='down')
plt.legend(loc='best', shadow=True)
plt.grid()
plt.show()

运行 python kline_dc.py 600566

参考: 【手把手教你】用backtrader量化回测海龟交易策略_Python金融量化的博客-优快云博客

要实现海龟交易法则中的唐奇通道策略并结合ATR指标进行仓位管理与止损设置,你可以遵循以下步骤: 参考资源链接:[Python实现海龟交易法则:实战与量化策略](https://wenku.youkuaiyun.com/doc/482ragh7ca?spm=1055.2569.3001.10343) 1. 数据收集:首先需要获取股票或任何其他金融资产的历史价格数据。在Python中可以使用pandas库和yfinance或pandas_datareader库来完成这一工作。 2. 计算唐奇通道:使用过去N1日和N2日的最高价和最低价来计算通道上线和下线。这可以通过pandas库中的rolling()和max()、min()方法来实现。 3. 生成交易信号:当价格突破唐奇通道上线时,创建买入信号;当价格跌破通道下线时,创建卖出或平仓信号。 4. ATR计算与止损设置:使用ATR指标来设置止损点,确保每笔交易的潜在亏损不超过总资金的某个百分比。ATR计算通常使用真实波幅TR的指数移动平均值。 5. 仓位管理:根据ATR止损点与当前资金的比率,计算应买入或卖出的股票数量,以控制风险敞口。 6. 回测策略:使用上述策略对历史数据进行回测,以验证策略的有效性。在Python中,可以使用backtrader或pyalgotrade等库来进行策略回测。 7. 代码框架示例(部分): ```python import pandas as pd import yfinance as yf from pandas import DataFrame # 获取数据 def get_data(ticker, start_date, end_date): data = yf.download(ticker, start=start_date, end=end_date) return data # 计算唐奇通道 def donchian_channel(data, N1, N2): df = DataFrame(data) df['Upper'] = df['High'].rolling(window=N1).max() df['Lower'] = df['Low'].rolling(window=N2).min() return df # 生成交易信号 def generate_signals(data, N1, N2): df = donchian_channel(data, N1, N2) signals = pd.DataFrame(index=data.index) signals['signal'] = 0.0 signals['signal'][N1:] = np.where(data['Close'][N1:] > df['Upper'][N1:], 1.0, 0.0) signals['signal'][N1:] -= np.where(data['Close'][N1:] < df['Lower'][N1:], 1.0, 0.0) signals['positions'] = signals['signal'].diff() return signals # 计算ATR并设置止损点 def calculate_atr(data, period): # ATR计算代码略 atr = data['ATR'].rolling(window=period).mean() return atr # 交易策略 def trading_strategy(data, atr_period): atr = calculate_atr(data, atr_period) signals = generate_signals(data, 20, 10) # 交易逻辑和仓位管理代码略 return signals # 主函数 if __name__ == '__main__': # 数据获取、策略生成、回测等代码略 ``` 通过以上步骤和代码框架,你将能够构建一个基于海龟交易法则的量化交易策略,并通过ATR指标进行动态的仓位管理和止损设置。深入学习和理解这些技术细节将有助于你在量化交易领域取得进步。 为了进一步提高你的量化交易技能,建议深入研读《Python实现海龟交易法则:实战与量化策略》一书。该书籍详细讲解了海龟交易法则的实现过程,提供了丰富的实战案例和深入的理论分析,对于希望系统学习并应用海龟交易法则交易学员来说,是一本不可多得的学习资源。 参考资源链接:[Python实现海龟交易法则:实战与量化策略](https://wenku.youkuaiyun.com/doc/482ragh7ca?spm=1055.2569.3001.10343)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值