什么是ATR和在聚宽量化平台如何计算ATR

海龟们使用两种资金管理方法。首先,我们把头寸分成一个个小块。这样,即使一笔交易赔了钱,我们损失的也只是一个头寸的一部分。里奇和比尔把这些小块称作头寸单位。其次,我们使用里奇和比尔发明的一种创新性的头寸规模决定方法。这种方法以市场的每日上下波动为基础,而波动幅度是以不变美元价衡量的。他们会为每一个市场计算出一个特定的合约数量,目的是让所有市场的绝对波动幅度大致相等。里奇和比尔把他们的波动性指标称为N,尽管现在的人更习惯称它为真实波动幅度均值(average true range,ATR)。

在量化投资平台聚宽上面,可以用下面的代码来计算:

# 本文用于测算ATR,ATR是用于测算波动率的重要指标,其定义为:
# 1、昨日收盘价-当日最高价
# 2、昨日收盘价-当日最低价
# 3、当日最高价-当日最低价
# 三者的最大值
import pandas as pd

#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)
#设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',100)

def get_ATR(stockname, begindate, enddate):
    # 获取行情数据
    df_stockdata = get_price(stockname, start_date=begindate, end_date=enddate, frequency='daily')
    df_stockdata = df_stockdata.reset_index()
    df_stockdata.rename(columns={'index':'stockdate'}, inplace=True)
#     print(df_stockdata)
    if type(df_stockdata) == int:
        print(stockname, '在这段时间内,没有数据!')
        return -1
    # 数据清理,首先要删掉空格行
    df_stockdata = df_stockdata.replace(0, np.nan)
    df_stockdata = df_stockdata.dropna()
    df_stockdata = df_stockdata.reset_index(drop=True)
    # 获取昨日收盘价
    df_yesterday_close = df_stockdata.loc[0:len(df_stockdata) - 2, 'close']
    df_yesterday_close.index = df_yesterday_close.index + 1
    df_yesterday_close.rename('yesterday_Close', inplace=True)  # 更新Series的名字,一定要加 inplace=True,否则改不过来
    # print(type(df_yesterday_close))
    df_stockdata = pd.concat([df_stockdata, df_yesterday_close], axis=1)
    df_stockdata = df_stockdata.dropna(axis=0)  # 删掉空值数据
    df_stockdata = df_stockdata.reset_index(drop=True)
    df_stockdata['ATR_3'] = (df_stockdata['high'] - df_stockdata['low'])  # 当日最高价-当日最低价
    df_stockdata['ATR_2'] = abs(df_stockdata['yesterday_Close'] - df_stockdata['low'])  # 昨日收盘价-当日最低价
    df_stockdata['ATR_1'] = abs(df_stockdata['yesterday_Close'] - df_stockdata['high'])  # 昨日收盘价-当日最低价
    # 重新构建一个临时DataFrame,用于取最大值
    df_temp_atr = df_stockdata[['ATR_3', 'ATR_2', 'ATR_1']]
    df_atr = df_temp_atr.max(axis=1)
    df_atr.rename('ATR', inplace=True)    # 重命名
    
    df_stockdata = pd.concat([df_stockdata, df_atr], axis=1)
    return df_stockdata

get_ATR('300144.XSHE', '2022-02-01', '2022-02-18')

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注