
等级: 新手上路
- 注册:
- 2024-6-11
- 曾用名:
|
import pandas as pd
import numpy as np
def trading_strategy(data):
# 计算5日均线和20日均线
data['MA5'] = data['Close'].rolling(window=5).mean()
data['MA20'] = data['Close'].rolling(window=20).mean()
# 初始化信号列
data['Signal'] = 0
# 生成交易信号
for i in range(1, len(data)):
if data['MA5'][i] > data['MA20'][i] and data['Close'][i] > data['MA5'][i] and data['Close'][i] > data['MA20'][i]:
data['Signal'][i] = 1 # 做多信号
elif data['MA5'][i] < data['MA20'][i] and data['Close'][i] < data['MA5'][i] and data['Close'][i] < data['MA20'][i]:
data['Signal'][i] = -1 # 做空信号
# 初始化止损位和持仓状态
data['Stop_Loss'] = np.nan
data['Position'] = 0
for i in range(1, len(data)):
if data['Signal'][i] == 1:
data['Position'][i] = 1
data['Stop_Loss'][i] = data['Low'][i-1] # 设置止损位为前一根K线的最低点
elif data['Signal'][i] == -1:
data['Position'][i] = -1
data['Stop_Loss'][i] = data['High'][i-1] # 设置止损位为前一根K线的最高点
else:
data['Position'][i] = data['Position'][i-1] # 持仓状态保持不变
# 检查止损条件
if data['Position'][i] == 1 and data['Low'][i] < data['Stop_Loss'][i]:
data['Position'][i] = 0 # 平仓
elif data['Position'][i] == -1 and data['High'][i] > data['Stop_Loss'][i]:
data['Position'][i] = 0 # 平仓
return data
# 示例数据
data = pd.DataFrame({
'Close': [100, 102, 104, 103, 105, 107, 106, 108, 110, 109, 111, 113, 112, 114, 116],
'Low': [99, 101, 103, 102, 104, 106, 105, 107, 109, 108, 110, 112, 111, 113, 115],
'High': [101, 103, 105, 104, 106, 108, 107, 109, 111, 110, 112, 114, 113, 115, 117]
})
# 应用交易策略
result = trading_strategy(data)
print(result)
|
|