要在Python中实现海龟交易法则,以半导体ETF(代码512480.SH)为例,可以使用`pandas`和数据接口库(如`yfinance`或其他支持中国市场的数据源)来获取数据。以下是一个示例,演示如何计算并应用入市和退出信号:
import pandas as pd
import matplotlib.pyplot as plt
# 假设'get_data'是一个函数,能够获取给定代码的历史数据(可以根据实际数据源编写)
def get_data(code, start, end):
# 在这里实现从某个数据源获取历史数据
# 这里仅提供一个示例结构
return pd.DataFrame() # 返回的数据框应该至少包含一个'Date'和'Close'列
# 获取半导体ETF数据(假定在2023年全年)
data = get_data('512480.SH', '2023-01-01', '2023-12-31')
# 确保数据按日期排序
data.sort_values(by='Date', inplace=True)
# 计算20日最高价和最低价
data['20D_High'] = data['Close'].rolling(window=20).max()
data['20D_Low'] = data['Close'].rolling(window=20).min()
# 创建信号列
data['Signal'] = 0
# 入市信号:价格突破20日最高价时买入
data.loc[data['Close'] > data['20D_High'].shift(1), 'Signal'] = 1
# 退出信号:价格突破20日最低价时卖出
data.loc[data['Close'] < data['20D_Low'].shift(1), 'Signal'] = -1
# 绘制信号图形
plt.figure(figsize=(14, 7))
plt.plot(data['Date'], data['Close'], label='Close Price', color='lightgrey')
plt.plot(data['Date'], data['20D_High'], linestyle='--', color='green', label='20D High')
plt.plot(data['Date'], data['20D_Low'], linestyle='--', color='red', label='20D Low')
plt.scatter(data['Date'][data['Signal'] == 1], data['Close'][data['Signal'] == 1],
marker='^', color='g', label='Buy Signal')
plt.scatter(data['Date'][data['Signal'] == -1], data['Close'][data['Signal'] == -1],
marker='v', color='r', label='Sell Signal')
plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Turtle Trading Signals for 512480.SH')
plt.legend()
plt.show()
# 打印买卖信号日期
buy_signals = data['Date'][data['Signal'] == 1]
sell_signals = data['Date'][data['Signal'] == -1]
print("Buy signals on dates:")
print(buy_signals)
print("Sell signals on dates:")
print(sell_signals)
在这个例子中:
1. 假设从某个数据源获取了“512480.SH”的历史数据。
2. 计算20日内的最高价和最低价以确定买入和卖出信号。
3. 生成入市和退出信号,并绘制了相应的价格图及信号标记。
注意:实际使用中,你需要根据具体的数据源编写`get_data`函数来提取数据,并根据实际情况进行参数调整和优化。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |