python对“神奇九转”策略,进行数据回测,并查看历史形成高9低9的时间点。
1 神奇九转原理
股价在上涨或(下跌)过程中连续9日达到触发条件会生成数列1、2,3....7、8,9,数列会依次标注在当日K线上方(下方)。
只有当股价连续第六天达到触发条件时,数列才开始进行依次显示1、2,3、4,5、6
当第七天依然达到触发条件时则显示7,如第七日未达到触发条件则前面6天的序号消失。
第八日同第七日的显示逻辑一样。
当第九天依然达到触发条件时,便形成了1个九转结构(序列)。
而当第九日未达到触发条件时则前面8日的序号消失,九转结构不成立。
2 神奇九转下跌(达到底部,抄底)
低九买入结构:满足两个条件:第一:即连续出现九根K线,并且这些K线的收盘价都比各自前面的第四根K线的收盘价低,就在其K线下方标记相应的数字,如果出现中断,则原计数作废,重新来过。第二:8或9的最低价小于6或7的最低价,在9的下方显示。
版权声明:本文引用为CSDN博主「*星光」的原创文章
原文链接:https://blog.csdn.net/weixin_42322206/article/details/123344752
可以参考CSDN博主「fanfpy」的原创文章
原文链接:https://blog.csdn.net/qq_31663099/article/details/119846913
这个你可以把数据放在pandas里,然后按照这个什么规则进行一个判断。但是是否有效就见仁见智了。在我看来这个规则和跳大神也没啥区别。
Python量化交易策略及回测系统
比较详细,可以借鉴下
https://blog.csdn.net/weixin_47974364/article/details/123433336
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这是一个比较复杂的策略,需要用到很多技术,下面是一个简单的思路:
导入历史分钟线k线数据,可以使用pandas读取csv文件。
编写九转策略代码,将买入信号和卖出信号打上标记。
对历史数据进行循环回测,计算每一天的策略信号和收盘价,并将买入和卖出的时间点和价格记录下来。
输出历史形成的高9低9的时间点及收盘价。
以下是九转策略的简单实现代码:
import pandas as pd
# 导入历史分钟线k线数据
df = pd.read_csv('data.csv')
def jiu_turn_strategy(df):
# 初始化变量
high_list = []
low_list = []
count = 0
buy_flag = False
sell_flag = False
for i in range(len(df)):
# 检查是否已达到9转
if count >= 9:
count = 0
# 检查是否是高九(卖出信号)
if df.loc[i, 'high'] > high_list[6] and df.loc[i, 'high'] > df.loc[high_list[8], 'high']:
sell_flag = True
# 检查是否是低九(买入信号)
elif df.loc[i, 'low'] < low_list[6] and df.loc[i, 'low'] < df.loc[low_list[8], 'low']:
buy_flag = True
high_list = []
low_list = []
# 计算九转序列
else:
if df.loc[i, 'high'] > df.loc[i-1, 'high']:
count += 1
else:
count = 0
high_list.append(i)
if df.loc[i, 'low'] < df.loc[i-1, 'low']:
count += 1
else:
count = 0
low_list.append(i)
# 打上标记
if buy_flag:
df.loc[i, 'buy'] = df.loc[i, 'low']
buy_flag = False
if sell_flag:
df.loc[i, 'sell'] = df.loc[i, 'high']
sell_flag = False
return df
以下是历史数据回测及输出的代码:
# 对历史数据进行循环回测
result = []
df = jiu_turn_strategy(df)
for i in range(len(df)):
if df.loc[i, 'buy']:
result.append(('buy', df.loc[i, 'timestamp'], df.loc[i, 'buy']))
if df.loc[i, 'sell']:
result.append(('sell', df.loc[i, 'timestamp'], df.loc[i, 'sell']))
# 输出历史形成的高9低9的时间点及收盘价
for r in result:
print('{} at {} with price {}'.format(r[0], r[1], r[2]))
以上是简单的代码举例,实际上还需要处理一些细节问题,例如数据缺失、重复信号等问题。另外,这个策略还可以继续优化,例如加入止损止盈等机制,使其更加完善。
如果我的回答解决了您的问题,请采纳!