├── README.md ├── chanlun.py ├── 对第一个和第n个中枢定义的完全分类.docx ├── 缠论-备份.py ├── 缠论.docx └── 缠论总结.py /README.md: -------------------------------------------------------------------------------- 1 | # ChanLun 2 | 有关的代码实现与相关的研究 3 | chanlun.py中是所有用到的函数的总结 4 | 缠论总结.py是一个具体的实现和画图的结果 5 | 另外一个文件是备份用的 6 | -------------------------------------------------------------------------------- /chanlun.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Thu Mar 1 01:49:23 2018 4 | 缠论所有的内容 5 | (1)数据提取 6 | (2)合并 7 | (3)笔的确定 8 | (4)中枢的确定 9 | @author: Everyheart 10 | """ 11 | #% 12 | import pandas as pd 13 | import numpy as np 14 | import tushare as ts 15 | import matplotlib.pyplot as plt 16 | #==================================================================================== 17 | #(1)数据的处理 18 | def data(code='000001',asset='INDEX',start_date='2014-06-11',end_date='2016-06-20',freq='D'): 19 | cons = ts.get_apis() 20 | df = ts.bar(code, conn=cons, freq=freq,asset=asset,start_date=start_date, end_date=end_date)#获取数据表格 21 | df=df.sort_index(axis=0,ascending=True) 22 | return df 23 | #df=data() 24 | #==================================================================================== 25 | #==================================================================================== 26 | #(2)合并的操作 27 | def hebin0(df): 28 | df=df.values 29 | H=df[:,3] 30 | L=df[:,4] 31 | m=len(L) 32 | #下面首先对开始的情况进行分析,确定第一个开始的位置 33 | for i in range(m): 34 | if H[i]==H[i+1] and L[i]==L[i+1]: 35 | continue 36 | else: 37 | q=i#这里q是q和q+1不相等,为了后面的正确,下面要从q+1开始 38 | break 39 | for i in range(q+2,m+1):#从下面开始减一 40 | if H[i-1]>=H[i-1-1] and L[i-1]<=L[i-1-1]: 41 | s=1 42 | while H[i-1-1]==H[i-s-1-1] and L[i-1-1]==L[i-s-1-1]: 43 | s=s+1 44 | if H[i-s-1]>=H[i-s-1-1] and L[i-s-1]>=L[i-s-1-1]: 45 | L[i-1]=L[i-1-1] 46 | for t in range(1,s+1): 47 | H[i-t-1]=H[i-1] 48 | elif H[i-s-1]<=H[i-s-1-1] and L[i-s-1]<=L[i-s-1-1]: 49 | H[i-1]=H[i-1-1] 50 | for t in range(1,s+1): 51 | L[i-t-1]=L[i-1] 52 | elif H[i-1]<=H[i-1-1] and L[i-1]>=L[i-1-1]: 53 | s=1 54 | while H[i-1-1]==H[i-s-1-1] and L[i-1-1]==L[i-s-1-1]: 55 | s=s+1 56 | if H[i-s-1]>=H[i-s-1-1] and L[i-s-1]>=L[i-s-1-1]: 57 | H[i-1]=H[i-1-1] 58 | for t in range(1,s+1): 59 | L[i-t-1]=L[i-1] 60 | elif H[i-s-1]<=H[i-s-1-1] and L[i-s-1]<=L[i-s-1-1]: 61 | L[i-1]=L[i-1-1] 62 | for t in range(1,s+1): 63 | H[i-t-1]=H[i-1] 64 | return H,L 65 | #H,L=hebin0(df) 66 | #H1=list(H) 67 | #L1=list(L) 68 | 69 | def hebin1(H,L): 70 | i=1 71 | H=list(H) 72 | L=list(L) 73 | m=len(L) 74 | X=[] 75 | while i <=m-1: 76 | q=i-len(X) 77 | if H[q-1]==H[q+1-1] and L[q-1]==L[q+1-1]: 78 | del H[q-1] 79 | del L[q-1] 80 | X.append(i-1) 81 | i=i+1 82 | return H,L,X 83 | #H,L,jl=hebin1(H,L) 84 | #==================================================================================== 85 | #==================================================================================== 86 | #%(3) 87 | #下面对于笔进行处理,要找到我们要的可以连接成笔的顶分型和底分型的点,之后画图3,后,用原来的图,在上面画出笔。 88 | def fenbi(H,L): 89 | i=2 90 | T=[] 91 | W=[] 92 | m=len(L) 93 | j=-100 94 | Q=[] 95 | DD=[] 96 | GG=[] 97 | q=20 98 | m1=max(int(49*m/50),m-20) 99 | while iH[i+1-1] and H[i-1]>H[i-1-1]: 101 | for s in range(1,len(H)-i):#这里做了修改, 102 | if H[i+s-1]>H[i+s-1-1] and H[i+s-1]>H[i+s+1-1] and H[i+s-1]>=H[i-1]: 103 | break 104 | elif H[i+s-1]=4: 105 | LQ=L[i+1-1] 106 | for t in range(1,s): 107 | LQ=min(LQ,L[i+t-1]) 108 | if LQ0 : 121 | lq=H[j-1] 122 | for f in range(j+1,i): 123 | lq=max(lq,H[f-1]) 124 | if lq>H[i-1]: 125 | break 126 | else: 127 | T.append(i-1) 128 | W.append(H[i-1]) 129 | j=i 130 | GG.append(H[i-1]) 131 | i=i+1 132 | q=1 133 | Q.append(q) 134 | break 135 | i=i+1 136 | continue 137 | elif L[i-1]H[i+s+1-1] and H[i+s-1] >H[i+s-1-1] and s>=4: 142 | PQ=H[i+1-1] 143 | for t in range(1,s): 144 | PQ=max(PQ,H[i+t-1]) 145 | if PQ>H[i+s-1]: 146 | continue 147 | else: 148 | if q==-1: 149 | break 150 | elif i-j<4: 151 | break 152 | else: 153 | if j<0: 154 | lq=L[1-1] 155 | for f in range(1,i): 156 | lq=min(lq,L[f-1]) 157 | elif j>0: 158 | lq=L[j+1-1] 159 | for f in range(j+1,i): 160 | lq=min(lq,L[f-1]) 161 | if lq3: 190 | PQ1=L[zhyg-1] 191 | for i2 in range(zhyg,ii): 192 | PQ1=min(PQ1,L[i2-1]) 193 | if L[ii-1]>PQ1: 194 | continue 195 | elif L[ii-1]<=PQ1: 196 | xin=ii-1 197 | yin=L[ii-1] 198 | for i3 in range(ii+1,hb): 199 | if H[i3-1]>H[i3-1-1] and H[i3-1]>H[i3+1-1] and (i3-ii)>3: 200 | PQ2=H[ii-1] 201 | PP2=L[ii-1] 202 | for i4 in range(ii,i3): 203 | PQ2=max(PQ2,H[i4-1]) 204 | PP2=min(PP2,L[i4-1]) 205 | if H[i3-1]PP2: 208 | continue 209 | elif H[i4-1]>=PQ2: 210 | zhyg=ii 211 | T.append(ii) 212 | W.append(L[ii-1]) 213 | q=-1 214 | Q.append(q) 215 | DD.append(L[ii-1]) 216 | break 217 | else: 218 | continue 219 | elif q==-1: 220 | if H[ii-1]>H[ii-1-1] and H[ii-1]>H[ii+1-1] and (ii-zhyg)>3: 221 | 222 | PQ1=H[zhyg-1] 223 | for i2 in range(zhyg,ii-1): 224 | PQ1=max(PQ1,H[i2-1]) 225 | if H[ii-1]=PQ1: 228 | xin=ii-1 229 | yin=H[ii-1] 230 | for i3 in range(ii+1,hb): 231 | if H[i3-1]3: 232 | PQ2=L[ii-1] 233 | PP2=H[ii-1] 234 | for i4 in range(ii,i3): 235 | PQ2=min(PQ2,L[i4-1]) 236 | PP2=max(PP2,H[i4-1]) 237 | if L[i3-1]>PQ2: 238 | continue 239 | elif H[ii-1]d[q-1]: 268 | q=q+1 269 | if q>n: 270 | break 271 | d[q-1:]=d[q-1:]+1 272 | d=d-1 273 | d=list(d) 274 | return d 275 | 276 | #TT=tt1(jl,T11) 277 | #t2=TT[-1]#%这个是最后一个的实际位置 278 | #y2=W[-1] 279 | #xin1=tt1(jl,[xin]) 280 | #XIN=[t2,int(xin1)]#这个是最后一个线段两个点的x轴坐标 281 | #YIN=[y2,yin]#这个是最后一个线段两个点的y轴坐标 282 | #==================================================================================== 283 | #==================================================================================== 284 | #%(6) 285 | 286 | #下面定义中枢 287 | 288 | def zhongshu(Q,GG,DD): 289 | JLZS=[] 290 | #lw=len(W) 291 | if Q[1-1]==1: 292 | del GG[1-1] 293 | ss=1 294 | else: 295 | ss=0 296 | 297 | if GG[2-1]<=DD[1-1]: 298 | i=1 299 | while DD[i+1-1]>=GG[2+i-1]: 300 | i=i+1 301 | ZG=min(GG[1+i-1],GG[2+i-1]) 302 | ZD=max(DD[1+i-1],DD[2+i-1]) 303 | if ss==1: 304 | JLZS.append(2*(1+i-1)-1+2) 305 | else: 306 | JLZS.append(2*(1+i-1)-1+1) 307 | 308 | for t in range(2+i,i+41):#这里的41可以调,回头试试 309 | if GG[t-1]ZG: 314 | pp=1 315 | ks=t 316 | break 317 | elif DD[3-1]>=GG[1-1]: 318 | i=1 319 | while DD[i+2-1]>GG[i-1]: 320 | i=i+1 321 | ZG=min(GG[i-1],GG[i+1-1]) 322 | ZD=max(DD[i+2-1],DD[i+1-1]) 323 | if ss==1: 324 | JLZS.append(2*(i-1)+2) 325 | else: 326 | JLZS.append(2*(i-1)+1) 327 | 328 | for t in range(i,i+41): 329 | if DD[t-1]>ZG: 330 | pp=1 331 | ks=t 332 | break 333 | elif GG[t-1]ZG: 348 | pp=1 349 | ks=t 350 | break 351 | elif GG[t-1]m: 366 | ttt=1 367 | else: 368 | ttt=0 369 | #return ZS 370 | #ZS=zhongshu(GG11,DD11) 371 | #print(ZS) 372 | 373 | while k<=m: 374 | if pp==1: 375 | i=ks 376 | while DD[i+1-1]>=GG[i-1-1]: 377 | if im-1: 380 | break 381 | elif i==m-1: 382 | lk=1 383 | break 384 | if lk==1: 385 | break 386 | else: 387 | ZG=min(GG[i-1-1],GG[i-1]) 388 | ZD=max(DD[i+1-1],DD[i-1]) 389 | ZS.append((ZG,ZD)) 390 | if ss==1: 391 | JLZS.append(2*(i-1-1)+2) 392 | else: 393 | JLZS.append(2*(i-1-1)+1)#这里的中枢是由i-1-1,i-1和i+1-1构成的 394 | 395 | for t in range(i,i+201):#这里原来是i+201,但是会超出,我们尝试用len(GG)+1 396 | if t>m: 397 | ll=1 398 | break 399 | if DD[t-1]>ZG: 400 | ks=t 401 | pp=1 402 | if ks==m and ttt==0: 403 | ll=1 404 | break 405 | elif GG[t-1]m: 412 | ll=1 413 | break 414 | if ll==1: 415 | break 416 | else: 417 | k=t 418 | elif pp==-1: 419 | i=ks 420 | while GG[i+1-1]<=DD[i-1]: 421 | if im-1: 424 | break 425 | elif i==m-1: 426 | ck=1 427 | break 428 | if ck==1: 429 | break 430 | else: 431 | ZD=max(DD[i-1],DD[i+1-1]) 432 | ZG=min(GG[i+1-1],GG[i-1]) 433 | ZS.append((ZG,ZD)) 434 | if ss==1: 435 | JLZS.append(2*(i-1)-1+2) 436 | else: 437 | JLZS.append(2*(i-1)-1+1) 438 | 439 | for t in range(i,i+201): 440 | if t>=m: 441 | ll=1 442 | break 443 | 444 | if DD[t-1]>ZG: 445 | ks=t 446 | pp=1 447 | if ks==m and ttt==0: 448 | ll=1 449 | break 450 | elif GG[t-1]=m: 457 | ll=1 458 | break 459 | if ll==1: 460 | break 461 | else: 462 | k=t 463 | elif pp==2: 464 | break 465 | return ZS,JLZS 466 | #ZS,JLZS=zhongshu(GG11,DD11) 467 | #这里的JLZS得到的结果是形成中枢的第一个i的位置,也就是第一个GG上的位置 468 | #print(ZS) 469 | 470 | -------------------------------------------------------------------------------- /对第一个和第n个中枢定义的完全分类.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Everyheart/ChanLun/1396e22fd1d6bdaf688a4da165bff275f8eefb18/对第一个和第n个中枢定义的完全分类.docx -------------------------------------------------------------------------------- /缠论-备份.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Thu Mar 1 01:49:23 2018 4 | 缠论所有的内容 5 | (1)数据提取 6 | (2)合并 7 | (3)笔的确定 8 | (4)中枢的确定 9 | @author: Everyheart 10 | """ 11 | #%% 12 | import pandas as pd 13 | import numpy as np 14 | import tushare as ts 15 | import matplotlib.pyplot as plt 16 | 17 | #(1)数据的处理 18 | def data(code='000001',asset='INDEX',start_date='2014-06-11',end_date='2016-06-20',freq='D'): 19 | cons = ts.get_apis() 20 | df = ts.bar(code, conn=cons, freq=freq,asset=asset,start_date=start_date, end_date=end_date)#获取数据表格 21 | df=df.sort_index(axis=0,ascending=True) 22 | return df 23 | df=data() 24 | #%% 25 | #(2)合并的操作 26 | def hebin0(df): 27 | df=df.values 28 | H=df[:,3] 29 | L=df[:,4] 30 | m=len(L) 31 | #下面首先对开始的情况进行分析,确定第一个开始的位置 32 | for i in range(m): 33 | if H[i]==H[i+1] and L[i]==L[i+1]: 34 | continue 35 | else: 36 | q=i#这里q是q和q+1不相等,为了后面的正确,下面要从q+1开始 37 | break 38 | for i in range(q+2,m+1):#从下面开始减一 39 | if H[i-1]>=H[i-1-1] and L[i-1]<=L[i-1-1]: 40 | s=1 41 | while H[i-1-1]==H[i-s-1-1] and L[i-1-1]==L[i-s-1-1]: 42 | s=s+1 43 | if H[i-s-1]>=H[i-s-1-1] and L[i-s-1]>=L[i-s-1-1]: 44 | L[i-1]=L[i-1-1] 45 | for t in range(1,s+1): 46 | H[i-t-1]=H[i-1] 47 | elif H[i-s-1]<=H[i-s-1-1] and L[i-s-1]<=L[i-s-1-1]: 48 | H[i-1]=H[i-1-1] 49 | for t in range(1,s+1): 50 | L[i-t-1]=L[i-1] 51 | elif H[i-1]<=H[i-1-1] and L[i-1]>=L[i-1-1]: 52 | s=1 53 | while H[i-1-1]==H[i-s-1-1] and L[i-1-1]==L[i-s-1-1]: 54 | s=s+1 55 | if H[i-s-1]>=H[i-s-1-1] and L[i-s-1]>=L[i-s-1-1]: 56 | H[i-1]=H[i-1-1] 57 | for t in range(1,s+1): 58 | L[i-t-1]=L[i-1] 59 | elif H[i-s-1]<=H[i-s-1-1] and L[i-s-1]<=L[i-s-1-1]: 60 | L[i-1]=L[i-1-1] 61 | for t in range(1,s+1): 62 | H[i-t-1]=H[i-1] 63 | return H,L 64 | H,L=hebin0(df) 65 | H1=list(H) 66 | L1=list(L) 67 | 68 | def hebin1(H,L): 69 | i=1 70 | H=list(H) 71 | L=list(L) 72 | m=len(L) 73 | X=[] 74 | while i <=m-1: 75 | q=i-len(X) 76 | if H[q-1]==H[q+1-1] and L[q-1]==L[q+1-1]: 77 | del H[q-1] 78 | del L[q-1] 79 | X.append(i-1) 80 | i=i+1 81 | return H,L,X 82 | H,L,jl=hebin1(H,L) 83 | 84 | #%% 85 | #下面对于笔进行处理,要找到我们要的可以连接成笔的顶分型和底分型的点,之后画图3,后,用原来的图,在上面画出笔。 86 | def fenbi(H,L): 87 | i=2 88 | T=[] 89 | W=[] 90 | m=len(L) 91 | j=-100 92 | Q=[] 93 | DD=[] 94 | GG=[] 95 | q=20 96 | m1=max(int(49*m/50),m-20) 97 | while iH[i+1-1] and H[i-1]>H[i-1-1]: 99 | for s in range(1,len(H)): 100 | if H[i+s-1]>H[i+s-1-1] and H[i+s-1]>H[i+s+1-1] and H[i+s-1]>=H[i-1]: 101 | break 102 | elif H[i+s-1]=4: 103 | LQ=L[i+1-1] 104 | for t in range(1,s): 105 | LQ=min(LQ,L[i+t-1]) 106 | if LQ0 : 119 | lq=H[j-1] 120 | for f in range(j+1,i): 121 | lq=max(lq,H[f-1]) 122 | if lq>H[i-1]: 123 | break 124 | else: 125 | T.append(i-1) 126 | W.append(H[i-1]) 127 | j=i 128 | GG.append(H[i-1]) 129 | i=i+1 130 | q=1 131 | Q.append(q) 132 | break 133 | i=i+1 134 | continue 135 | elif L[i-1]H[i+s+1-1] and H[i+s-1] >H[i+s-1-1] and s>=4: 140 | PQ=H[i+1-1] 141 | for t in range(1,s): 142 | PQ=max(PQ,H[i+t-1]) 143 | if PQ>H[i+s-1]: 144 | continue 145 | else: 146 | if q==-1: 147 | break 148 | elif i-j<4: 149 | break 150 | else: 151 | if j<0: 152 | lq=L[1-1] 153 | for f in range(1,i): 154 | lq=min(lq,L[f-1]) 155 | elif j>0: 156 | lq=L[j+1-1] 157 | for f in range(j+1,i): 158 | lq=min(lq,L[f-1]) 159 | if lq3: 186 | PQ1=L[zhyg-1] 187 | for i2 in range(zhyg,ii): 188 | PQ1=min(PQ1,L[i2-1]) 189 | if L[ii-1]>PQ1: 190 | continue 191 | elif L[ii-1]<=PQ1: 192 | xin=ii-1 193 | yin=L[ii-1] 194 | for i3 in range(ii+1,hb): 195 | if H[i3-1]>H[i3-1-1] and H[i3-1]>H[i3+1-1] and (i3-ii)>3: 196 | PQ2=H[ii-1] 197 | PP2=L[ii-1] 198 | for i4 in range(ii,i3): 199 | PQ2=max(PQ2,H[i4-1]) 200 | PP2=min(PP2,L[i4-1]) 201 | if H[i3-1]PP2: 204 | continue 205 | elif H[i4-1]>=PQ2: 206 | zhyg=ii 207 | T.append(ii) 208 | W.append(L[ii-1]) 209 | q=-1 210 | Q.append(q) 211 | DD.append(L[ii-1]) 212 | break 213 | else: 214 | continue 215 | elif q==-1: 216 | if H[ii-1]>H[ii-1-1] and H[ii-1]>H[ii+1-1] and (ii-zhyg)>3: 217 | 218 | PQ1=H[zhyg-1] 219 | for i2 in range(zhyg,ii-1): 220 | PQ1=max(PQ1,H[i2-1]) 221 | if H[ii-1]=PQ1: 224 | xin=ii-1 225 | yin=H[ii-1] 226 | for i3 in range(ii+1,hb): 227 | if H[i3-1]3: 228 | PQ2=L[ii-1] 229 | PP2=H[ii-1] 230 | for i4 in range(ii,i3): 231 | PQ2=min(PQ2,L[i4-1]) 232 | PP2=max(PP2,H[i4-1]) 233 | if L[i3-1]>PQ2: 234 | continue 235 | elif H[ii-1]d[q-1]: 264 | q=q+1 265 | if q>n: 266 | break 267 | d[q-1:]=d[q-1:]+1 268 | d=d-1 269 | return d 270 | #x=[2,4,10] 271 | #d=[1,2,3,4,5,6,7] 272 | #d1=tt1(x,d) 273 | #print(d1) 274 | TT=tt1(jl,T11) 275 | t2=TT[-1]#%这个是最后一个的实际位置 276 | y2=W[-1] 277 | xin1=tt1(jl,[xin]) 278 | XIN=[t2,int(xin1)]#这个是最后一个线段两个点的x轴坐标 279 | YIN=[y2,yin]#这个是最后一个线段两个点的y轴坐标 280 | #%% 281 | 282 | #下面定义中枢 283 | 284 | def zhongshu(GG,DD): 285 | JLZS=[] 286 | #lw=len(W) 287 | if Q[1-1]==1: 288 | del GG[1-1] 289 | if GG[2-1]<=DD[1-1]: 290 | i=1 291 | while DD[i+1-1]>=GG[2+i-1]: 292 | i=i+1 293 | ZG=min(GG[1+i-1],GG[2+i-1]) 294 | ZD=max(DD[1+i-1],DD[2+i-1]) 295 | JLZS.append(1+i-1) 296 | for t in range(2+i,i+41):#这里的41可以调,回头试试 297 | if GG[t-1]ZG: 302 | pp=1 303 | ks=t 304 | break 305 | elif DD[3-1]>=GG[1-1]: 306 | i=1 307 | while DD[i+2-1]>GG[i-1]: 308 | i=i+1 309 | ZG=min(GG[i-1],GG[i+1-1]) 310 | ZD=max(DD[i+2-1],DD[i+1-1]) 311 | JLZS.append(i-1) 312 | for t in range(i,i+41): 313 | if DD[t-1]>ZG: 314 | pp=1 315 | ks=t 316 | break 317 | elif GG[t-1]ZG: 327 | pp=1 328 | ks=t 329 | break 330 | elif GG[t-1]m: 343 | ttt=1 344 | else: 345 | ttt=0 346 | #return ZS 347 | #ZS=zhongshu(GG11,DD11) 348 | #print(ZS) 349 | 350 | while k<=m: 351 | if pp==1: 352 | i=ks 353 | while DD[i+1-1]>=GG[i-1-1]: 354 | if im-1: 357 | break 358 | elif i==m-1: 359 | lk=1 360 | break 361 | if lk==1: 362 | break 363 | else: 364 | ZG=min(GG[i-1-1],GG[i-1]) 365 | ZD=max(DD[i+1-1],DD[i-1]) 366 | ZS.append((ZG,ZD)) 367 | JLZS.append(i-1-1)#这里的中枢是由i-1-1,i-1和i+1-1构成的 368 | for t in range(i,i+201): 369 | if DD[t-1]>ZG: 370 | ks=t 371 | pp=1 372 | if ks==m and ttt==0: 373 | ll=1 374 | break 375 | elif GG[t-1]m: 382 | ll=1 383 | break 384 | if ll==1: 385 | break 386 | else: 387 | k=t 388 | elif pp==-1: 389 | i=ks 390 | while GG[i+1-1]<=DD[i-1]: 391 | if im-1: 394 | break 395 | elif i==m-1: 396 | ck=1 397 | break 398 | if ck==1: 399 | break 400 | else: 401 | ZD=max(DD[i-1],DD[i+1-1]) 402 | ZG=min(GG[i+1-1],GG[i-1]) 403 | ZS.append((ZG,ZD)) 404 | JLZS.append(i-1) 405 | for t in range(i,i+201): 406 | if DD[t-1]>ZG: 407 | ks=t 408 | pp=1 409 | if ks==m and ttt==0: 410 | ll=1 411 | break 412 | elif GG[t-1]=m: 419 | ll=1 420 | break 421 | if ll==1: 422 | break 423 | else: 424 | k=t 425 | return ZS,JLZS 426 | ZS,JLZS=zhongshu(GG11,DD11) 427 | #这里的JLZS得到的结果是形成中枢的第一个i的位置,也就是第一个GG上的位置 428 | print(ZS) 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | -------------------------------------------------------------------------------- /缠论.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Everyheart/ChanLun/1396e22fd1d6bdaf688a4da165bff275f8eefb18/缠论.docx -------------------------------------------------------------------------------- /缠论总结.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Thu Mar 1 18:19:56 2018 4 | 缠论代码 5 | @author: Everyheart 6 | """ 7 | 8 | #%% 9 | from chanlun import data,hebin0, hebin1,fenbi,fenbi1,tt1,zhongshu 10 | 11 | #=========================================================================== 12 | #(1)获取数据 13 | for i in range(10): 14 | try:#这里是为了防止出现错误,因此连续去尝试,知道成功 15 | df=data(code='000932',asset='E',start_date='2018-02-01',end_date='',freq='1min') 16 | #df=data() 17 | #t=2 18 | #df=df.iloc[:240*t,:] 19 | print(i) 20 | break 21 | except: 22 | continue 23 | #这里的df就是得到了样本的数据的表格 24 | 25 | #=========================================================================== 26 | #(2)K线的合并操作 27 | H,L=hebin0(df) 28 | H1=list(H) 29 | L1=list(L) 30 | #H,L分别是合并后的K线的最高和最低点 31 | #=========================================================================== 32 | #(3)合并的第二部分 33 | H,L,jl=hebin1(H,L) 34 | #这里的H,L是合并后删除相同的内容弄后的K线,JL是删除的K线的位置 35 | #=========================================================================== 36 | #(4)分笔操作 37 | T,W,Q,GG,DD=fenbi(H,L) 38 | #这里是分笔的操作,最后的T,t是合并后的顶分型底分型的位置(这里依然是删除同样k线后的位置,而W是点位,Q是这一笔向上还是向下 39 | #这里的Q的第一笔并不能算笔,是起点到第一个分型的情况。 40 | #GG,DD分别是走势进行划分,笔的顶点顶分型是GG中,而底分型在DD中 41 | T11,W11,Q11,xin,yin,GG11,DD11=fenbi1(H,L,T,W,Q,GG,DD) 42 | T0=tt1(jl,T11)#经过tt1处理后,得到删除前其所在的位置,这里的JL是删除的内容, 43 | #得到的结果是T0是所有的顶分型与底分型的位置 44 | 45 | #这里是对于最后一个的情况进行处理,xin,yin 是最后一个分型的位置和最后一个点位。 46 | #=========================================================================== 47 | #(5)中枢的确定和计录 48 | #% 49 | #这个的作用就是对于可能出现的最后一个有,是向上的但是没有加入,这样会影响中枢的判断,因此这里需要加上向上的 50 | if Q[-1]==-1: 51 | GG11.append(yin) 52 | else: 53 | DD11.append(yin) 54 | #利用这个函数找到中枢,与中枢构建的第一个分型 55 | ZS,JLZS=zhongshu(Q11,GG11,DD11) 56 | print(ZS) 57 | print(JLZS) 58 | #ZS中记录了所有中枢的价格区间,而JSZS记录了中枢形成的第一个边的位置信息,这里的位置是这里的第i个笔(可能上升可能下跌),注意引索也是从0开始, 59 | #%% 60 | #画出图来 61 | c=tt1(jl,[xin])[0]#这里将最后一个也加上,从而画出图 62 | T0.append(c) 63 | W11.append(yin) 64 | import matplotlib.pyplot as plt 65 | plt.figure() 66 | plt.plot(T0,W11,'-o') 67 | #%% 68 | #这里是画出所有的中枢开始的分型的位置 69 | W12=[] 70 | JLZS1=[] 71 | for i in JLZS: 72 | W12.append(W11[i]) 73 | JLZS1.append(T0[i]) 74 | 75 | plt.plot(JLZS1,W12,'-o') 76 | #%% 77 | #日期分割 78 | I=[] 79 | P=[] 80 | lx=240#这里如果是1min的数据就是240,如果是5分钟就是48, 81 | for i in range(int(len(df)/lx)): 82 | I.append(lx*i) 83 | P.append(df.iloc[lx*i,2]) 84 | plt.plot(I,P,'b^') 85 | plt.grid() 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | --------------------------------------------------------------------------------