劉子鳴程式交易Markowitz 1952投資效率前緣

import csv #輸入import輸出export,輸入csv套件 import math #輸入math套件 from tkinter import * #或者import tkinter as tk Dim = 10 def draw_circle(x, y, label): canvas.create_oval(100+x-5, 700-y-5, 100+x+5, 700-y+5, fill="black") canvas.create_text(100+x+20, 700-y, text = label, anchor='w', font=('微軟正黑體',20)) file = open('台灣.csv','r',encoding='utf-8') read = csv.reader(file) header, rows = [], [] header = next(read) for item in read: rows.append(item) file.close() num = len(rows) #資料表長度 print(header) mean = [0 for i in range(Dim)]; mean50 = 0; vari50=0 meanTemp = [0 for i in range(Dim)] vari = [[0 for i in range(Dim)] for j in range(Dim)] for k in range(num): for i in range(Dim): meanTemp[i]=float(rows[k][i+1])/100 #轉換為小數 mean[i] += meanTemp[i] for j in range(i+1): vari[i][j] += meanTemp[i]*meanTemp[j] meanTemp50 = float(rows[k][33])/100; mean50+=meanTemp50; vari50 += meanTemp50*meanTemp50 for i in range(Dim): mean[i] = mean[i]/num for j in range(i+1): vari[i][j]=(vari[i][j] - mean[i]*mean[j]*num)/(num-1) for i in range(Dim): for j in range(i+1,Dim): vari[i][j]=vari[j][i] tk = Tk() #建構視窗名為tk tk.geometry('1200x900')#視窗 寬1200像素 tk.title("python分析台灣50股票投資組合") canvas = Canvas(tk, width=1200, height=900, bg='white') canvas.grid(row=0,column=0,padx=5,pady=5,columnspan=3) canvas.create_line(100, 700, 1100, 700, arrow=LAST,width=3) for i in range(1,10): #X軸 0, 5...7 canvas.create_text(100+i*100, 700, text = i*5, anchor='n', font=('微軟正黑體',20)) canvas.create_line(100, 800, 100, 50, arrow=LAST,width=3) for i in range(-1,7): #Y軸 1, 2, 3, 4, 5 canvas.create_text(94, 700-i*100, text = i*5, anchor='e', font=('微軟正黑體',20)) canvas.create_text(1100, 705, text = '標準差', anchor='n', font=('微軟正黑體',20)) canvas.create_text(95, 50, text = '報酬率', anchor='e', font=('微軟正黑體',20)) for i in range(Dim): x, y = math.sqrt(vari[i][i]*12)*2000, 12*mean[i]*2000 draw_circle(x, y, header[i+1] ) mean50 = mean50/num; vari50=(vari50-mean50*mean50*num)/(num-1) x, y = math.sqrt(vari50*12)*2000, 12*mean50*2000 draw_circle(x, y, header[33] ) print(header[33], x, y) step = 1 w=[0 for i in range(Dim)] while w[0] <= 1: while w[0]+w[1] <= 1: while w[0]+w[1]+w[2] <= 1: while w[0]+w[1]+w[2]+w[3] <= 1: while w[0]+w[1]+w[2]+w[3]+w[4] <= 1: while w[0]+w[1]+w[2]+w[3]+w[4]+w[5] <= 1: while w[0]+w[1]+w[2]+w[3]+w[4]+w[5]+w[6] <= 1: while w[0]+w[1]+w[2]+w[3]+w[4]+w[5]+w[6]+w[7] <= 1: while w[0]+w[1]+w[2]+w[3]+w[4]+w[5]+w[6]+w[7]+w[8] <= 1: temp9=w[0]+w[1]+w[2]+w[3]+w[4]+w[5]+w[6]+w[7]+w[8] if temp9 < 1: w[9] = 1 - temp9 else: w[9] = 0 meanP, variP = 0, 0 for i in range(Dim): meanP += w[i]*mean[i] for j in range(Dim): variP += w[i]*vari[i][j]*w[j] y = 12*meanP*2000 x = math.sqrt(variP*12)*2000 canvas.create_oval(98+x,698-y,102+x, 702-y, fill="blue") w[8] += step w[7] += step w[8] = 0 w[6] += step w[7], w[8] = 0, 0 w[5] += step for i in range(6, 9): w[i]=0 w[4] += step for i in range(5, 9): w[i]=0 w[3] += step for i in range(4, 9): w[i]=0 w[2] += step for i in range(3, 9): w[i]=0 w[1] += step for i in range(2, 9): w[i]=0 w[0] += step for i in range(1, 9): w[i]=0 tk.mainloop()

留言

這個網誌中的熱門文章

金三甲期末考重要題庫與額未加分作業

空頭價差多頭價差跨式勒式