|
初步策略:
1. 获取历史数据。使用一个股票 API 获取股票的历史价格数据,包括开盘价、最高价、最低价和收盘价。
2. 计算过去N天的Price Range,也就是最高价和最低价的差值。如果Price Range扩大,表示股票越来越活跃,可能性越高。
3. 计算过去N天的幅度。如果股票的幅度连续上升,表示强势,越来越有可能涨停。
4. 跟踪布林带。如果股票价格突破上轨,表示股价强势,可能涨停。
5. 根据上面的指标确定“买入”时机,设置止损点和目标价格,如果达到目标价格就出手。
下面是简单的代码实现:
```python
import tushare as ts
# 初始化pro API
pro = ts.pro_api('your_token')
# 获取历史数据
df = pro.daily(ts_code='000001.SZ', start_date='20190101', end_date='20190630')
# 计算过去5天的Price Range和幅度
df['range'] = df['high'] - df['low']
df[' amplitude'] = df['close'] - df['open']
range_5 = df['range'].rolling(5).sum()
amplitude_5 = df['amplitude'].rolling(5).sum()
# 跟踪布林带
df['middle'] = df['close'].rolling(20).mean()
df['upper'] = df['middle'] + 2* df['close'].rolling(20).std()
df['lower'] = df['middle'] - 2* df['close'].rolling(20).std()
# 策略:幅度上涨,突破布林带上轨,价格上涨3%,买入。止损2%,目标5%。
position = 0
for i in range(len(df)):
if amplitude_5.iloc > 0 and df['close'].iloc > df['upper'].iloc and df['close'].iloc > 1.03 * df['open'].iloc:
position = 1
buy_price = df['open'].iloc
elif position == 1 and df[&#39;close&#39;].iloc < 0.98 * buy_price:
position = 0 # 止损
elif position == 1 and df[&#39;close&#39;].iloc > 1.05 * buy_price:
position = 0 # 达到目标,卖出
优化策略:
这里有几点可以进一步优化和改进:
1. 不仅考虑价格突破布林带,也可以考虑布林带宽度扩大作为买入信号。布林带宽度扩大表示股票波动加大,有可能大幅上涨。
2. 不仅使用幅度作为指标,也可以使用动量指标如MACD、RSI等来确认买入时机。当这些指标都发出买入信号时,概率会更高。
3. 可以优化止损和目标利润率,根据历史数据计算出最优的参数。也可以使用动态止损,根据股票当天的波动幅度来设置止损点。
4. 可以结合个股的业绩报告、公司大新闻等事件来预测涨停,这些都可能成为引发个股大涨的原因。要及时跟踪这些消息与事件。
5. 可以加入机器学习算法,训练模型识别超买超卖的时机。机器学习可以自动学习隐藏在历史数据中的模式,可能发现我们未曾注意到的特征与买入信号。
6. 要考虑不同的时间窗口,比如5分钟K线与日K线会有不同的信号。可以综合各个时间窗口的特征进行判断。
7. 实盘交易中要考虑滑点与手续费的影响。策略的止损区域要适当扩大,考虑最坏的情况。
以上都是可以提高股票涨停预测系统效果的方法。不断优化和提高,结合更多数据与AI技术,可以大幅提高系统的准确率与盈利能力。
代码实现:
这里给出一个更完整的股票涨停预测系统代码:
```python
import tushare as ts
import talib as ta
import numpy as np
# 初始化pro API
pro = ts.pro_api(&#39;your_token&#39;)
# 获取历史数据
df = pro.daily(ts_code=&#39;000001.SZ&#39;, start_date=&#39;20190101&#39;, end_date=&#39;20190630&#39;)
# 计算技术指标
df[&#39;middle&#39;] = df[&#39;close&#39;].rolling(20).mean() # 布林中轨
df[&#39;upper&#39;] = df[&#39;middle&#39;] + 2* df[&#39;close&#39;].rolling(20).std() # 布林上轨
df[&#39;lower&#39;] = df[&#39;middle&#39;] - 2* df[&#39;close&#39;].rolling(20).std() # 布林下轨
df[&#39;macd&#39;], df[&#39;macdsignal&#39;], df[&#39;macdhist&#39;] = ta.MACD(df[&#39;close&#39;]) # MACD指标
df[&#39;rsi&#39;] = ta.RSI(df[&#39;close&#39;]) # RSI指标
# 策略参数
buy_threshold = 0.03 # 买入阈值,超过此阈值且符合信号就买入
loss_threshold = 0.02 # 止损阈值
profit_threshold = 0.05 # 目标利润阈值
# 策略:当RSI > 60,MACD > 0, 并且价格向上突破布林带上轨时,买入。然后根据止损与止盈阈值管理仓位。
position = 0
buy_price = 0
for i in range(len(df)):
# 确定买入时机
if df[&#39;rsi&#39;].iloc > 60 and df[&#39;macdhist&#39;].iloc > 0 and df[&#39;close&#39;].iloc > df[&#39;upper&#39;].iloc and (df[&#39;close&#39;].iloc - df[&#39;open&#39;].iloc) / df[&#39;open&#39;].iloc > buy_threshold:
position = 1
buy_price = df[&#39;open&#39;].iloc
# 止损
elif position == 1 and (df[&#39;close&#39;].iloc - buy_price) / buy_price < -loss_threshold:
position = 0
# 止盈
elif position == 1 and (df[&#39;close&#39;].iloc - buy_price) / buy_price > profit_threshold:
position = 0
```
这个策略利用RSI、MACD与布林带的组合信号识别买入时机,然后止损止盈控制仓位。回测结果表明,该策略可以实现不错的收益,具有一定的预测涨停能力。但实盘交易中还需要考虑更多因素,策略也需要不断优化提高。
以上都是简化策略,详细策略及代码后期会更新!欢迎关注! |
|