Chiến lược giao dịch với Ichimoku Cloud trong Python
Ichimoku Cloud (Kumo) là một chỉ báo kỹ thuật phức tạp được phát triển bởi Goichi Hosoda vào những năm 1960. Nó cung cấp một cái nhìn toàn diện về thị trường bằng cách kết hợp nhiều thành phần khác nhau để xác định xu hướng, hỗ trợ/kháng cự và tín hiệu giao dịch. Trong bài viết này, chúng ta sẽ tìm hiểu cách triển khai chiến lược giao dịch Ichimoku Cloud bằng Python.
1. Các thành phần của Ichimoku Cloud
Ichimoku Cloud bao gồm 5 thành phần chính:
- Tenkan-sen (Conversion Line): Đường chuyển đổi, được tính bằng trung bình của mức cao nhất và thấp nhất trong 9 kỳ.
- Kijun-sen (Base Line): Đường cơ sở, được tính bằng trung bình của mức cao nhất và thấp nhất trong 26 kỳ.
- Senkou Span A (Leading Span A): Đường dẫn A, được tính bằng trung bình của Tenkan-sen và Kijun-sen, dịch chuyển 26 kỳ về phía trước.
- Senkou Span B (Leading Span B): Đường dẫn B, được tính bằng trung bình của mức cao nhất và thấp nhất trong 52 kỳ, dịch chuyển 26 kỳ về phía trước.
- Chikou Span (Lagging Span): Đường trễ, là giá đóng cửa dịch chuyển 26 kỳ về phía sau.
2. Triển khai Ichimoku Cloud trong Python
Đầu tiên, chúng ta cần cài đặt các thư viện cần thiết:
import pandas as pd
import numpy as np
import yfinance as yf
import matplotlib.pyplot as plt
Hàm tính toán các thành phần của Ichimoku Cloud:
def calculate_ichimoku(df, tenkan_period=9, kijun_period=26, senkou_span_b_period=52, displacement=26):
# Tenkan-sen (Conversion Line)
tenkan_sen_high = df['High'].rolling(window=tenkan_period).max()
tenkan_sen_low = df['Low'].rolling(window=tenkan_period).min()
df['tenkan_sen'] = (tenkan_sen_high + tenkan_sen_low) / 2
# Kijun-sen (Base Line)
kijun_sen_high = df['High'].rolling(window=kijun_period).max()
kijun_sen_low = df['Low'].rolling(window=kijun_period).min()
df['kijun_sen'] = (kijun_sen_high + kijun_sen_low) / 2
# Senkou Span A (Leading Span A)
df['senkou_span_a'] = ((df['tenkan_sen'] + df['kijun_sen']) / 2).shift(displacement)
# Senkou Span B (Leading Span B)
senkou_span_b_high = df['High'].rolling(window=senkou_span_b_period).max()
senkou_span_b_low = df['Low'].rolling(window=senkou_span_b_period).min()
df['senkou_span_b'] = ((senkou_span_b_high + senkou_span_b_low) / 2).shift(displacement)
# Chikou Span (Lagging Span)
df['chikou_span'] = df['Close'].shift(-displacement)
return df
3. Chiến lược giao dịch
Có một số chiến lược giao dịch phổ biến với Ichimoku Cloud:
3.1. Chiến lược Kumo Breakout
- Tín hiệu mua: Giá phá vỡ phía trên Kumo (đám mây)
- Tín hiệu bán: Giá phá vỡ phía dưới Kumo
3.2. Chiến lược TK Cross
- Tín hiệu mua: Tenkan-sen cắt lên trên Kijun-sen
- Tín hiệu bán: Tenkan-sen cắt xuống dưới Kijun-sen
4. Triển khai chiến lược giao dịch
def generate_signals(df):
signals = pd.DataFrame(index=df.index)
signals['signal'] = 0
# Kumo Breakout Strategy
signals['kumo_breakout'] = 0
signals.loc[df['Close'] > df[['senkou_span_a', 'senkou_span_b']].max(axis=1), 'kumo_breakout'] = 1
signals.loc[df['Close'] < df[['senkou_span_a', 'senkou_span_b']].min(axis=1), 'kumo_breakout'] = -1
# TK Cross Strategy
signals['tk_cross'] = 0
signals.loc[df['tenkan_sen'] > df['kijun_sen'], 'tk_cross'] = 1
signals.loc[df['tenkan_sen'] < df['kijun_sen'], 'tk_cross'] = -1
# Combined Strategy
signals['signal'] = signals['kumo_breakout'] + signals['tk_cross']
signals['signal'] = signals['signal'].apply(lambda x: 1 if x > 0 else (-1 if x < 0 else 0))
return signals
5. Backtesting chiến lược
def backtest_strategy(df, signals):
# Calculate returns
df['returns'] = df['Close'].pct_change()
df['strategy_returns'] = df['returns'] * signals['signal'].shift(1)
# Calculate cumulative returns
df['cumulative_returns'] = (1 + df['returns']).cumprod()
df['strategy_cumulative_returns'] = (1 + df['strategy_returns']).cumprod()
return df
6. Ví dụ thực tế
Dưới đây là một ví dụ về việc áp dụng chiến lược Ichimoku Cloud cho cổ phiếu AAPL:
# Download data
symbol = 'AAPL'
df = yf.download(symbol, start='2020-01-01', end='2023-12-31')
# Calculate Ichimoku
df = calculate_ichimoku(df)
# Generate signals
signals = generate_signals(df)
# Backtest
results = backtest_strategy(df, signals)
# Plot results
plt.figure(figsize=(15, 10))
plt.plot(results.index, results['cumulative_returns'], label='Buy and Hold')
plt.plot(results.index, results['strategy_cumulative_returns'], label='Ichimoku Strategy')
plt.title(f'Ichimoku Cloud Strategy - {symbol}')
plt.legend()
plt.show()
Kết luận
Ichimoku Cloud là một công cụ phân tích kỹ thuật mạnh mẽ có thể được sử dụng để phát triển các chiến lược giao dịch hiệu quả. Bằng cách kết hợp Python và các thư viện phân tích dữ liệu, chúng ta có thể dễ dàng triển khai và backtest các chiến lược giao dịch dựa trên Ichimoku Cloud.