成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用Python進行交易策略和投資組合分析

開發 前端
我們將在本文中衡量交易策略的表現。并將開發一個簡單的動量交易策略,它將使用四種資產類別:債券、股票和房地產。這些資產類別的相關性很低,這使得它們成為了極佳的風險平衡選擇。

我們將在本文中衡量交易策略的表現。并將開發一個簡單的動量交易策略,它將使用四種資產類別:債券、股票和房地產。這些資產類別的相關性很低,這使得它們成為了極佳的風險平衡選擇。

動量交易策略

這個策略是基于動量的的,因為交易者和投資者早就意識到動量的影響,這可以在廣泛的市場和時間框架中看到。所以我們稱之為動量策略。趨勢跟蹤或時間序列動量 (TSM) 是在單一工具上使用這些策略的另一個名稱。我們將創建一個基本的動量策略并在 TCS 上對其進行測試以查看其性能。

TSM策略分析

首先,我們將導入一些庫

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import yfinance as yf
import ffn
%matplotlib inline

我們構建基本的動量策略函數TSMStrategy。函數將通過時間序列的對數回報、感興趣的時間段以及是否允許做空的布爾變量的布爾變量來返回預期表現。

def TSMStrategy(returns, period=1, shorts=False):
if shorts:
position = returns.rolling(period).mean().map(
lambda x: -1 if x <= 0 else 1)
else:
position = returns.rolling(period).mean().map(
lambda x: 0 if x <= 0 else 1)
performance = position.shift(1) * returns
return performance
ticker = 'TCS'
yftcs = yf.Ticker(ticker)
data = yftcs.history(start='2005-01-01', end='2021-12-31')
returns = np.log(data['Close'] / data['Close'].shift(1)).dropna()
performance = TSMStrategy(returns, period=1, shorts=False).dropna()
years = (performance.index.max() - performance.index.min()).days / 365
perf_cum = np.exp(performance.cumsum())
tot = perf_cum[-1] - 1
ann = perf_cum[-1] ** (1 / years) - 1
vol = performance.std() * np.sqrt(252)
rfr = 0.02
sharpe = (ann - rfr) / vol
print(f"1-day TSM Strategy yields:" +
f"\n\t{tot*100:.2f}% total returns" +
f"\n\t{ann*100:.2f}% annual returns" +
f"\n\t{sharpe:.2f} Sharpe Ratio")
tcs_ret = np.exp(returns.cumsum())
b_tot = tcs_ret[-1] - 1
b_ann = tcs_ret[-1] ** (1 / years) - 1
b_vol = returns.std() * np.sqrt(252)
b_sharpe = (b_ann - rfr) / b_vol
print(f"Baseline Buy-and-Hold Strategy yields:" +
f"\n\t{b_tot*100:.2f}% total returns" +
f"\n\t{b_ann*100:.2f}% annual returns" +
f"\n\t{b_sharpe:.2f} Sharpe Ratio")

函數輸出如下:

1-day TSM Strategy yields:
-45.15% total returns
-7.10% annual returns
-0.17 Sharpe Ratio
Baseline Buy-and-Hold Strategy yields:
-70.15% total returns
-13.78% annual returns
-0.22 Sharpe Ratio

在合理的年化回報上,1日TSM策略優于買入并持有策略。因為 1 天的回顧可能包含許多錯誤趨勢,所以我們嘗試不同的時間段來查看它們的比較情況。這里將循環運行模型 3、5、15、30 和 90 天。

 import matplotlib.gridspec as gridspec
periods = [3, 5, 15, 30, 90]
fig = plt.figure(figsize=(12, 10))
gs = fig.add_gridspec(4, 4)
ax0 = fig.add_subplot(gs[:2, :4])
ax1 = fig.add_subplot(gs[2:, :2])
ax2 = fig.add_subplot(gs[2:, 2:])
ax0.plot((np.exp(returns.cumsum()) - 1) * 100, label=ticker, linestyle='-')
perf_dict = {'tot_ret': {'buy_and_hold': (np.exp(returns.sum()) - 1)}}
perf_dict['ann_ret'] = {'buy_and_hold': b_ann}
perf_dict['sharpe'] = {'buy_and_hold': b_sharpe}
for p in periods:
log_perf = TSMStrategy(returns, period=p, shorts=False)
perf = np.exp(log_perf.cumsum())
perf_dict['tot_ret'][p] = (perf[-1] - 1)
ann = (perf[-1] ** (1/years) - 1)
perf_dict['ann_ret'][p] = ann
vol = log_perf.std() * np.sqrt(252)
perf_dict['sharpe'][p] = (ann - rfr) / vol
ax0.plot((perf - 1) * 100, label=f'{p}-Day Mean')

ax0.set_ylabel('Returns (%)')
ax0.set_xlabel('Date')
ax0.set_title('Cumulative Returns')
ax0.grid()
ax0.legend()
_ = [ax1.bar(i, v * 100) for i, v in enumerate(perf_dict['ann_ret'].values())]
ax1.set_xticks([i for i, k in enumerate(perf_dict['ann_ret'])])
ax1.set_xticklabels([f'{k}-Day Mean'
if type(k) is int else ticker for
k in perf_dict['ann_ret'].keys()],
rotation=45)
ax1.grid()
ax1.set_ylabel('Returns (%)')
ax1.set_xlabel('Strategy')
ax1.set_title('Annual Returns')
_ = [ax2.bar(i, v) for i, v in enumerate(perf_dict['sharpe'].values())]
ax2.set_xticks([i for i, k in enumerate(perf_dict['sharpe'])])
ax2.set_xticklabels([f'{k}-Day Mean'
if type(k) is int else ticker for
k in perf_dict['sharpe'].keys()],
rotation=45)
ax2.grid()
ax2.set_ylabel('Sharpe Ratio')
ax2.set_xlabel('Strategy')
ax2.set_title('Sharpe Ratio')
plt.tight_layout()
plt.show()

圖片

通過圖表的結果,我們可以看到15天的動量指標提供了最好的結果。但是,其他時間周期的結果是五花八門的。這表明我們這個策略并不可靠。所以我們還可以通過在接近頂部時使用止損或追蹤止損來退出交易,而不是在15日線圖下跌或持平時再進行操作。

投資組合分析

到目前為止,我們已經用Python創建了一個交易策略。下面我們將度量并繪制常見的投資組合特征方便我們進行觀察分析。

投資組合分析

首先,我們將導入一些重要的庫,并觀察數據執行情況。

import pandas_datareader.data as web
stocks = ['SPY','GLD','TLT','HYG']

data = web.DataReader(stocks,data_source='yahoo',start='01/01/2019')['Adj Close']
data.sort_index(ascending=True,inplace=True)
perf = data.calc_stats()
perf.plot()

圖片

對數回報

對數回報用于計算指數增長率。我們不計算每個子時期的價格變化百分比,而是計算那段時間的自然增長指數。首先創建一個df,其中包含數據中每個股票價格的對數回報,然后我們為每個對數回報創建一個直方圖。

 returns = data.to_log_returns().dropna()
print(returns.head())


Symbols SPY GLD TLT HYG
Date
2019-01-03 -0.024152 0.009025 0.011315 0.000494
2019-01-04 0.032947 -0.008119 -0.011642 0.016644
2019-01-07 0.007854 0.003453 -0.002953 0.009663
2019-01-08 0.009351 -0.002712 -0.002631 0.006470
2019-01-09 0.004663 0.006398 -0.001566 0.001193

直方圖如下:

ax = returns.hist(figsize=(20, 10),bins=30)

圖片

所有四個資產類別都顯示正態分布的直方圖。具有正態分布的樣本具有算術平均值和高于和低于平均值的均等分布(正態分布也稱為高斯分布是對稱的) 。如果回報呈正態分布,預計超過 99% 的回報將落在平均值的三個標準差范圍內。這些鐘形正態分布特征使分析師和投資者能夠對股票的預期收益和風險進行更好的統計推斷。具有鐘形曲線的股票通常是波動率低且可預測的藍籌股(Blue Chips)。

最大回撤率  DRAWDOWN

DRAWDOWN是指價值下降到一個相對的低谷。這是投資者需要考慮的一個重要風險因素。讓我們畫一個遞減策略的可視化表示。

ffn.to_drawdown_series(data).plot(figsize=(15,10))

圖片

這四種資產在2020年上半年都出現了下降,其中SPY的降幅最大,為0.5%。隨后,在2020年上半年,所有資產立即復蘇。這表明資產回收率很高。這些資產在2020年7月前后見頂。按照這種趨勢,一旦復蘇達到頂峰,所有資產類別都出現小幅下跌。根據結果TLT將在2022年下半年經歷最大的0.5%的下降,然后在2023年初之前恢復。

MARKOWITZ 均值-方差優化

1952年,馬科維茨(MARKOWITZ)提出均值-方差投資組合理論,又稱現代投資組合理論。投資者可以使用這些概念來構建基于給定風險水平的最大化預期回報的投資組合?;隈R科維茨方法,我們可以生成“最優投資組合”。

returns.calc_mean_var_weights().as_format('.2%')
#結果
SPY 46.60%
GLD 53.40%
TLT 0.00%
HYG 0.00%
dtype: object

相關性統計

相關性是一種統計方法,用來衡量證券之間的相互關系。最好使用熱圖來查看這些信息。熱圖可以讓我們看到證券之間的相關性。

returns.plot_corr_heatmap()

圖片

最好在你的投資組合中擁有相關性較低的資產。除了SPY與HYG,這四個資產類別的相關性都很低,這對我們的投資組合是不利的:因為如果擁有高度相關的不同資產組,即使你將風險分散在它們之間,從投資組合構建的角度來看,收益也會很少。

總結

通過分析和繪制的所有數據進行資產配置,可以建立一個投資組合,極大地改變基礎投資的風險特征。還有很多我沒有提到的,但可以幫助我們確定交易策略價值的起點。我們將在后續文章中添加更多的技術性能指標。

責任編輯:華軒 來源: DeepHub IMBA
相關推薦

2020-05-15 11:02:13

軟件組合應用程序開發

2013-01-09 14:43:38

CA TechnoloGartner云計算

2021-02-22 13:44:41

開發Python金融

2014-12-25 09:03:14

CA Technolo

2024-12-13 16:11:01

2022-11-08 09:39:21

2022-06-24 09:58:35

大數據JavaPython

2021-06-07 09:00:53

Python回測分析Python基礎

2022-03-30 07:45:41

KyvernoAPI開源項目

2022-03-28 07:33:13

GatekeeperOPA 策略管理CRD

2021-10-22 09:56:09

AI 數據人工智能

2021-03-22 11:29:13

加密貨幣比特幣貨幣

2010-07-06 14:35:22

RationalJazz

2024-12-23 07:20:00

2017-08-19 15:57:08

人工智能機器人投資

2014-04-25 09:23:06

2018-04-26 14:11:44

2019-05-14 10:37:26

Python機器學習編程語言

2024-07-01 13:51:14

2012-10-17 14:56:48

惠普ALM
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美在线视频 | 成人午夜视频在线观看 | 天天看天天摸天天操 | 国产精品一区二区在线 | 久久久高清 | 人人玩人人干 | 精品国产乱码久久久久久牛牛 | 麻豆久久久9性大片 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 91se在线 | 成人小视频在线观看 | 亚洲v区| 中文字幕国产视频 | 天天干 夜夜操 | 精品视频在线观看 | 亚洲精品在线观看视频 | 日本电影韩国电影免费观看 | 亚洲成人在线视频播放 | 在线日韩精品视频 | 亚洲另类视频 | 精品伊人| 日韩一区二区三区在线视频 | 国内精品久久精品 | 秋霞精品 | 自拍偷拍第1页 | 手机av在线| 成年人在线观看 | 97在线超碰 | 午夜在线观看免费 | 午夜一区 | 99久视频 | 欧美日韩一 | 亚洲区一 | 91视频在线 | 91视视频在线观看入口直接观看 | 一区二区高清 | 亚洲人成人一区二区在线观看 | 狠狠骚 | 亚洲欧美一区二区在线观看 | 亚洲精品国产a久久久久久 午夜影院网站 | 欧美精品久久久久久久久久 |