克隆策略
In [34]:
def test(instr,df60):
    df1 = df60[df60['instrument']==instr]
    df = df1[["high","low"]]
    data = df.values.tolist()
    data.reverse()
    #print(data)   
    for i in range(len(data)):
        if data[i+1][1] > min([x[1] for x in data[:i+1]]) and data[i+1][0] > max([x[0] for x in data[:i+1]]):
            a=i+1
            b=min([x[1] for x in data[:i+1]])
            break
    #print(a)
    #print(b)
    for i in range(len(data)):
        if data[i+1+a][0] < max([x[0] for x in data[:i+1+a]]) and data[i+1+a][1] < min([x[1] for x in data[:i+1+a]]):
            c = i+1+a
            d = max([x[0] for x in data[:i+1+a]])
            break
    #print(c)
    #print(d)
    for i in range(len(data)):
        if data[i+1+c][1] > min([x[1] for x in data[:i+1+c]]) and data[i+1+c][0] > max([x[0] for x in data[:i+1+c]]):
            e = i+1+c
            f = min([x[1] for x in data[:i+1+c]])
            break
    #print(e)
    #print(f)
    for i in range(len(data)):
        if data[i+1+e][0] < max([x[0] for x in data[:i+1+e]]) and data[i+1+e][1] < min([x[1] for x in data[:i+1+e]]):
            g = i+1+e
            h = max([x[0] for x in data[:i+1+e]])
            break
    #print(g)
    #print(h)
    if (h-f)*0.585 < (d-b):
        print(instr)

l=DataSource('bar1d_CN_STOCK_A').read(instruments=[],start_date='2021-08-27',end_date=None,fields=['open','close','high','low','amount','adjust_factor'])
l['open+']=l['open']/l['adjust_factor']
l['close+']=l['close']/l['adjust_factor']
l['high+']=l['high']/l['adjust_factor']
l['low+']=l['low']/l['adjust_factor']
c1 = l['date']>='2021-08-27'
c2 = l['amount']>1000000000
c3 = l['close+']>4.99
l1 = l.loc[c1&c2&c3,['instrument','date','open+','high+','close+','low','amount']]
xuangu= l1['instrument'].values.tolist()

df60 = DataSource("bar60m_CN_STOCK_A").read(instruments=xuangu,start_date="2021-06-10")
#print(df60)
for instr in xuangu:
    test(instr,df60)
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-34-72e56ababfa6> in <module>
     50 #print(df60)
     51 for instr in xuangu:
---> 52     test(instr,df60)

<ipython-input-34-72e56ababfa6> in test(instr, df60)
      6     #print(data)
      7     for i in range(len(data)):
----> 8         if data[i+1][1] > min([x[1] for x in data[:i+1]]) and data[i+1][0] > max([x[0] for x in data[:i+1]]):
      9             a=i+1
     10             b=min([x[1] for x in data[:i+1]])

IndexError: list index out of range