鄭智元python回溯測試過去60天

#資料檔  https://drive.google.com/file/d/1eB8B...
import csv                     #輸入csv套件comma separated value
file = open('SPY.csv','r')     #打開下載的檔案SPY.CSV,模式是r讀取,
csvreader = csv.reader(file)   #將檔案逐列讀入串列變數csvreader
header, rows = [], []           #宣告空白串列(陣列,清單)
header = next(csvreader)       #串列header儲存檔案第一列
for row in csvreader:          #檔案接續逐列附加append於rows串列
   rows.append(row)
file.close()             #關閉檔案
header.extend(['MA20','部位','最大','獲利','最小','損失']) #第7至12欄
for i in range(19):
   rows[i].extend([rows[i][5],0]) #第7欄用收盤當20日平均,第8欄部位0
for i in range(19,len(rows)):
   sum20 = 0.0      #實數=浮點數
   for j in range(i-19, i+1):
      sum20 += float(rows[j][5])
   rows[i].extend([sum20/20, 0])    #第7欄20日平均,第8欄部位0
listx = [y/1000 for y in range (31)]#測試31個突破點0, 0.1%...3%
for i in range(80,len(rows)):   #目標是len(rows)
   listgain = [0.0 for y in range (31)]#儲存31個突破點的損益,預設0
   listextreme = [0, 0.0, 0, 0.0]      #儲存最大值、最小值
   for k in range(len(listx)):         #測試特定參數
      for j in range (i-60,i):
         dayClose = float(rows[j][5])
         if rows[j-1][8]< 1 and dayClose > rows[j-1][7]*(1+listx[k]):
            rows[j][8]=1 #做多
         elif rows[j-1][8]> -1 and dayClose < rows[j-1][7]*(1-listx[k]):
            rows[j][8]=-1 #做空
         else:
            rows[j][8]=rows[j-1][8] #維持原來的部位
      for j in range (i-60,i):     #計算損益
         dayGain = float(rows[j][6])-float(rows[j-1][6])
         if rows[j-1][8] == 1:
            listgain[k] += dayGain
         elif rows[j-1][8] == -1:
            listgain[k] += - dayGain
         else: pass #沒有損益
      if listextreme[1] < listgain[k]: #測試是否更大
         listextreme[0] = k
         listextreme[1] = listgain[k]
      if listextreme[3] > listgain[k]: #測試是否更小
         listextreme[2] = k
         listextreme[3] = listgain[k]
   rows[i].extend(listextreme)   #形成9至12欄
file = open('SPYW.CSV','w',newline='',encoding='utf-8')
w = csv.writer(file) #寫入檔案
w.writerow(header)   #寫入標題
w.writerows(rows)    #第7列將檔案內容名稱rows
file.close()
<\pre>

留言

這個網誌中的熱門文章

D11050131鄭智元EXCEL股票圖SPY平均線

鄭智元VS Code期中考