2017-08-24 4 views
-1

Ich möchte das letzte Element einer Liste abrufen. Ich benutze die Liste [-1], aber es meldet Index außerhalb des Bereichs. Der Schritt der Funktion ist für jedes i im Bereich (0, Tage), zuerst um tr zu berechnen, dann sei N = mean tr. Vergleichen Sie den Strom N mit dem vorherigen N, wenn Strom N> 1.5 vorheriger N, dann erzeugen Sie das Signal 1, andernfalls erzeugen Sie das Signal 0. Wie kann ich dieses Problem lösen?Liste [-1] meldet Index außerhalb des Bereichs Fehler

Hier ist der Code:

def cal_N(): 

    if days <= number_days: 
     lst = [] 
     for i in range(0,days): #cal tr 
      h_l = sh600004['high'][i]-sh600004['low'][i] 
      h_p = sh600004['high'][i]-sh600004['close'][i-1] 
      p_l = sh600004['close'][i-1]-sh600004['high'] 
      tr = np.max(h_l,h_p,p_l) 
      lst.append(tr) #append tr 
     #calculate current N 
      current_N = np.mean(np.array(lst)) 
      #signals['sys1 add'][date] = np.where(current_N > (N[-1]*0.5), 1.0, 0.0) 
      if current_N>(N[-1]*0.5): 
       positions['sh600004'] = 100 * signals['system1'] + 100*signals['system1'][i] 
       print(positions) 
      else: 
       positions['sh600004'] = 100 * signals['system1'] 
       print(positions) 
      N.append(current_N) 
    else: 
      h_l = sh600004['high'][0]-sh600004['low'][0] 
      h_p = sh600004['high'][0]-sh600004['close'][0] 
      p_l = sh600004['close'][0]-sh600004['low'][0] 
     # Calculate the True Range 
      tr = max(h_l, h_p, p_l) 
      current_N = (tr + (number_days -1)*(N))/number_days 
      #signals['sys1 add'][date] = np.where(current_N > (N[-1]*0.5), 1.0, 0.0) 
      if current_N>(N[-1]*0.5): 
       positions['sh600004'] = 100 * signals['system1'] + 100*signals['system1'][i] 
       print(positions) 
      else: 
       positions['sh600004'] = 100 * signals['system1'] 
       print(positions) 
      N.append(current_N) 
+0

Versuchen Sie, Ihr Beispiel kleiner zu machen. Es scheint so, als ob der größte Teil dieses Codes für die Frage irrelevant ist, und dies wird nicht in einer geschlossenen Umgebung laufen (wo ist zum Beispiel 'N' definiert) – Cireo

+1

Wenn 'lst [-1]' dann einen 'IndexError' verursacht Die Liste ist leer. – AChampion

Antwort

0

Das Problem tritt auf, wenn Sie die Schleife zum ersten Mal betreten. An diesem Punkt ist N eine leere Liste. Es könnte durch Hinzufügen einer Überprüfung, ob die Liste leer ist, oder Sie könnten einen Standardwert für N geben.

Übrigens, berechnen Zeitreihendaten für Aktien (wahre Reichweite oder andere Analyse), ich werde Ihnen vorschlagen Versuche Pandas. Es wird Schleifen speichern und Array/Matrix-Operationen unterstützen. Die Effizienz wird ebenfalls höher sein.

Während Sie SH-Bestände analysieren, könnte sogar JQK Ihnen helfen, eine schnellere Analyse zu erhalten.

1

Gefällt Ihnen?

In [1143]: [][-1] 
--------------------------------------------------------------------------- 
IndexError        Traceback (most recent call last) 
<ipython-input-1143-aeb23779f804> in <module>() 
----> 1 [][-1] 

IndexError: list index out of range 

Ich sehe nicht, wo N initialisiert wird. Aber wenn es als [] beginnt, dann wird dieser Test Probleme haben: current_N>(N[-1]*0.5). Selbst wenn der Index funktioniert, wäre das Ergebnis leer und der Vergleich würde nicht funktionieren, dass current_N > [] und []*.5 beide Fehler auslösen. Sie haben also mehrere Gründe, diese Aktion zu testen oder zu verhindern, wenn N leer ist.

Verwandte Themen