本文旨在策略学习探讨,不构成任何投资建议!
之前我们用两篇文章将账户和交易封装,做了一定准备工作。今天,将正式开启对策略的考核。
对于券商、钢铁、有色、甚至房地产等右侧行情的行业,通常会用到一个方法——右侧追击,也就是所谓的追涨杀跌。
中心思想基本是以较低的试错成本,一次次的去追击它们的强势行情。中间可能会有多次追击失败,但亏损不会太大,而一旦追击成功,收益相对而言都较为可观。
本次以A股东方财富历史数据为示例,股票代码300059
1. 数据获取
其中quan_trade是在交易封装中封装好的类
# 导入相关库
import akshare as ak
import pandas as pd
import quan_trade # 导入交易类
### 获取东方财富历史行情数据
# 参数adjust:默认返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据。
# 该股票涉及到多次转增分红,这里需要选择前复权
dfcf_df = ak.stock_zh_a_hist(symbol='300059', period="daily", start_date="20011101", end_date='20221231', adjust="qfq")
dfcf_df
该股票于2010-03-19上市,截止2022-04-08,一共有2865条数据。
2.策略更新
策略之前封装到了quan_trade.py中的类Trade中,添加右侧追击策略只需在类中添加新方法,然后在主函数self.main中添加策略判断即可。
先来梳理一下右侧追击的策略:
1. 将资金分为5份;
2. 突破新高买入一份,止损点设为买入价下方8%;
3. 每涨10%,追加一份,并将止损点更新为最新买入价下方8%;
4. 一旦期间触发止损,意味着此次追击失败,再觅良机重新追击;
5. 如果5份全部买入完成,设最高价下方8%为动态止盈点,一旦触发止盈,意味着本次追击成功且圆满结束。
右侧追击中,会有不少假突破。可能会对本金造成侵蚀,但这是右侧交易必要的磨损。只要严格遵守纪律,在止损点果断斩仓,风险就是可控的。
接下来,就是要将我们的策略告诉程序,在此之前有几个细节需要确定:
1. 新高为半年内新高(即前180个交易日的最高价,非最高收盘价)
2. 突破新高是指当日收盘价站上前期高点,非当日最高价破新高。避免上长影线触发策略买入(上长影线意味着抛压巨大,不是很好的追击点)
3. 每次交易以当日收盘价作为交易价格,更为贴近在现实中能买到或卖到的价格
代码如下:
# 在quan_trade.py文件的的类Trade中添加此方法
def by_right_attack(self):
"""右侧追击"""
# 定义两个变量,分别存放前高以及追击完成后的最高股价
last_higt = max_price = None
for i in range(180, self.data.shape[0]):
# 更新前半年最高价
last_higt = self.data['最高'][i-180:i].max()
# 无持仓(持仓数据为空或者持仓数量为零)
if self.account.position.empty or self.account.position.iloc[-1].amount == 0:
# 价格未突破
if self.data.iloc[i].收盘 <= last_higt:
self.account.no_trade_update_ass