廖妤涵PYTHON回溯測試過去60天

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]: #測試是否更大ctrl shift L 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()

留言

這個網誌中的熱門文章

期貨、選擇權與其他衍生性商品2023年第二次 廖妤涵

期貨市場理論與實務2022Q3-廖妤涵