以下是一个基于分时做T本质的策略程序框架,结合顺T(先买后卖)和倒T(先卖后买)原则,使用Python实现核心逻辑:
“`python
import pandas as pd
import numpy as np
import talib
class IntradayTSolver:
def __init__(self, data, initial_cash=100000):
self.data = data # 分时数据(DataFrame,含时间、价格、成交量)
self.cash = initial_cash
self.position = 0
self.trades = []
self.strategy_type = ‘both’ # ‘顺T’/’倒T’/’both’
def calculate_indicators(self):
“””计算技术指标”””
# 示例指标:5分钟均线、MACD、RSI
self.data[‘ma5’] = talib.SMA(self.data[‘price’], timeperiod=5)
self.data[‘macd’], _, _ = talib.MACD(self.data[‘price’])
self.data[‘rsi’] = talib.RSI(self.data[‘price’], timeperiod=14)
# 波动率计算
self.data[‘returns’] = self.data[‘price’].pct_change()
self.data[‘volatility’] = self.data[‘returns’].rolling(10).std()
def generate_signals(self):
“””生成交易信号”””
signals = []
for i in range(1, len(self.data)):
# 顺T条件(多头策略)
long_cond = (self.data[‘price’][i] > self.data[‘ma5’][i]) & \
(self.data[‘rsi’][i] < 30) & \
(self.data[‘volatility’][i] > 0.01)
# 倒T条件(空头策略)
short_cond = (self.data[‘price’][i] < self.data[‘ma5’][i]) & \
(self.data[‘rsi’][i] > 70) & \
(self.data[‘volatility’][i] > 0.01
# 信号记录(1:顺T买入,-1:顺T卖出,2:倒T卖出,-2:倒T买入)
if long_cond and self.strategy_type in [‘顺T’, ‘both’]:
signals.append(1)
elif short_cond and self.strategy_type in [‘倒T’, ‘both’]:
signals.append(2)
else:
signals.append(0)
return signals
def execute_trades(self, signals):
“””执行交易逻辑”””
for i, signal in enumerate(signals):
current_price = self.data.iloc[i][‘price’]
# 顺T操作
if signal == 1: # 买入
if self.cash > current_price * 100:
buy_qty = self.cash // (current_price * 100)
self.position += buy_qty
self.cash -= buy_qty * current_price * 100
self.trades.append((‘顺T买入’, current_price, buy_qty))
elif signal == -1: # 卖出
if self.position > 0:
self.cash += self.position * current_price * 100
self.trades.append((‘顺T卖出’, current_price, self.position))
self.position = 0
# 倒T操作
if signal == 2: # 卖出
if self.position > 0:
self.cash += self.position * current_price * 100
self.trades.append((‘倒T卖出’, current_price, self.position))
self.position = 0
elif signal == -2: # 买入
if self.cash > current_price * 100:
buy_qty = self.cash // (current_price * 100)
self.position += buy_qty
self.cash -= buy_qty * current_price * 100
self.trades.append((‘倒T买入’, current_price, buy_qty))
def run_strategy(self):
“””运行策略”””
self.calculate_indicators()
signals = self.generate_signals()
self.execute_trades(signals)
return self.trades, self.cash + self.position * self.data[‘price’].iloc[-1] * 100
# 示例数据加载(需替换为实际分时数据)
data = pd.DataFrame({
‘price’: np.random.normal(10, 0.5, 1000),
‘volume’: np.random.randint(100, 1000, 1000)
})
# 策略执行
solver = IntradayTSolver(data)
trades, total_value = solver.run_strategy()
# 输出结果
print(f”最终资产: {total_value:.2f}”)
print(“交易记录:”)
for trade in trades[-10:]: # 显示最后10笔交易
print(trade)
“`
**策略原理说明:**
1. **指标系统**:
– 5周期均线(MA5)判断短期趋势
– RSI识别超买超卖(参数14周期)
– MACD辅助判断趋势强度
– 波动率过滤无效信号
2. **顺T逻辑**:
– 当价格低于MA5且RSI<30时买入
– 当价格高于MA5且RSI>70时卖出
– 要求波动率>1%确保有操作空间
3. **倒T逻辑**:
– 当价格高于MA5且RSI>70时卖出
– 当价格低于MA5且RSI<30时买回
– 同样需要波动率过滤
4. **风险控制**:
– 每次交易全额操作(可根据需求改为比例操作)
– 自动计算可交易数量
– 防止现金/持仓不足的交易
**优化方向**:
1. **参数优化**:
“`python
# 在类初始化时添加参数配置
def __init__(self, data, params={
‘ma_period’: 5,
‘rsi_overbought’: 70,
‘rsi_oversold’: 30,
‘volatility_threshold’: 0.01
}):
self.params = params
“`
2. **动态仓位管理**:
“`python
# 在execute_trades中添加仓位控制
risk_ratio = 0.2 # 单次交易风险比例
available_cash = self.cash * risk_ratio
buy_qty = available_cash // (current_price * 100)
“`
3. **止盈止损机制**:
“`python
# 在类中添加跟踪持仓成本
self.hold_cost = 0
# 在买卖时更新成本
if signal == 1:
self.hold_cost = current_price
# 添加止盈止损检查
if self.position > 0 and (current_price > self.hold_cost * 1.01 or
current_price < self.hold_cost * 0.995):
self.execute_sell()
“`
4. **成交量验证**:
“`python
# 在信号生成中添加成交量条件
volume_ma = talib.SMA(self.data[‘volume’], timeperiod=5)
valid_signal = self.data[‘volume’][i] > volume_ma[i] * 1.2
“`
**使用建议**:
1. 需要接入实时分时数据源(如证券API)
2. 建议先进行历史回测验证策略有效性
3. 实际交易需考虑手续费和滑点成本
4. 参数应根据不同标的特性进行优化
5. 可结合大盘状态动态调整策略类型
该程序体现了分时做T的核心本质:利用短期波动,通过双向操作降低成本。实际应用中需结合市场微观结构特征进行深度优化。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/1227412
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!