请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  数理科学 帖子:3365870 新帖:3

【缠论初探】笔方向破坏的级别共振策略

不做外汇索罗斯发表于:9 月 25 日 20:00回复(1)
#导入各种函数库包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.finance as fin
#获取上证指数的行情数据
df = get_price('000001.XSHG',end_date='2017-5-25',frequency='1d',count=400)
#进行K线绘制先,整体看下走势情况
t=list(range(len(df)))
df['t']=pd.Series(t,index=df.index)
o=df['open'].values
c=df['close'].values
h=df['high'].values
l=df['low'].values
fig=plt.figure(figsize(20,10))
ax=fig.add_subplot(111)
ax.set_xlim(0,len(df))
ques=zip(t,o,c,h,l)
fin.candlestick_ochl(ax,ques,colorup='r',colordown='g',width=0.5)
plt.grid()
#进行K线的包含关系处理,再原数据表中增加label进行是否有效的标记,增加两列记录合并K线后的极值
label=[1]
h_jizhi,l_jizhi=h[0],l[0]
high_new=[h[0]]
low_new=[l[0]]
#标记K线的有效性,上升K线为1,下降为-1,无效为0
for i in t[1:]:
    #缠论上升K线的定义
    if h[i]>h_jizhi and l[i]>l_jizhi:
        label.append(1)
        h_jizhi=max(h[i],h[i-1])
        l_jizhi=max(l[i],l[i-1])
    #缠论下降K线的定义
    elif h[i]<h_jizhi and l[i]<l_jizhi:
        label.append(-1)
        h_jizhi=min(h[i],h[i-1])
        l_jizhi=min(l[i],l[i-1])
    #包涵K线的处理
    else:
        label.append(0)
        #下面的内容主要是进行极值的更新
        for j in label[::-1]:
            if j != 0:
                a=j
                break
        if a==1:
            h_jizhi=max(h[i],h_jizhi)
            l_jizhi=max(l[i],l_jizhi)
        else:
            h_jizhi=min(h[i],h_jizhi)
            l_jizhi=min(l[i],l_jizhi)
    high_new.append(h_jizhi)
    low_new.append(l_jizhi)
#把结果添加到df
df['label_k']=pd.Series(label,index=df.index)
df['high_k']=pd.Series(high_new,index=df.index)
df['low_k']=pd.Series(low_new,index=df.index)
#找出可以构成笔的K线位置
#step1 找出有效笔的起点位置
#得到有效笔的起点位置
##先将有效K线的label整理成列表l1
l1=[]
list1=df['label_k'].values
for i in range(len(list1)):
    if list1[i]!=0:
        l1.append(i)
##记录有效位置的起点
label_s_e=[]
for z in range(2,len(l1)):
    if (list1[l1[z]],list1[l1[z-1]],list1[[l1[z-2]]])==(1,1,1):
        label_s_e.append((l1[z-2],1))
    elif (list1[l1[z]],list1[l1[z-1]],list1[[l1[z-2]]])==(-1,-1,-1):
        label_s_e.append((l1[z-2],-1))
##取到第一个有效起点,并有a值进行方向的记录
label_se=[]
a=0
for i in range(1,len(label_s_e)):
    if a==0:
        label_se.append(label_s_e[i][0])
        if label_s_e[i][1]==1:
            a=1
        elif label_s_e[i][1]==-1:
            a=-1
    elif a==1:
        if label_s_e[i][1]==1:
            pass
        elif label_s_e[i][1]==-1:
            label_se.append(label_s_e[i][0])
            a=-1
    elif a==-1:
        if label_s_e[i][1]==1:
            label_se.append(label_s_e[i][0])
            a=1
        elif label_s_e[i][1]==-1:
            pass
##得到小趋势的起点位置后,找出每个区间的最高点最低点
#获得区间内最大最小值,次处找出的值是指在已经确定方向被终结后进行的搜索,主要用作画图了
b=1
new_label=[]
for i in range(1,len(label_se)):
    list_1=list(df['high'].values[label_se[i-1]:label_se[i]])
    if b==1:
        #返回列表中值最大的位置
        new_label.append(list_1.index(max(list_1))+label_se[i-1])
        b=-1
    elif b==-1:
        new_label.append(list_1.index(min(list_1))+label_se[i-1])
        b=1
#获取最值的价格,按收盘价算
new_label_p=[df['close'].values[i] for i in new_label]
#再次进行K线绘制先,整体看下走势情况,左为裸K,右为方向
t=list(range(len(df)))
df['t']=pd.Series(t,index=df.index)
o=df['open'].values
c=df['close'].values
h=df['high'].values
l=df['low'].values
fig=plt.figure(figsize=(20,10))
ax1=fig.add_subplot(221)
ax2=fig.add_subplot(222)
ax1.set_xlim(0,len(df))
ques=zip(t,o,c,h,l)
ax1.grid()
fin.candlestick_ochl(ax1,ques,colorup='r',colordown='g',width=0.5)
ax2.grid()
ax2.plot(new_label,new_label_p,color='r')
[<matplotlib.lines.Line2D at 0x7fa87d071550>]
 
 
 
 

全部回复

0/140

量化课程

    移动端课程