# KD
import numpy as np
import pandas as pd
import mplfinance as mpf
import talib
from datetime import datetime
data = pd.read_csv('2330.csv')
data.iloc[:, 0] = pd.to_datetime(data.iloc[:, 0], format = "%Y/%m/%d")
dataclose= [float(line) for line in data['Close']]
K,D = talib.STOCH(data['High'].values,data['Low'].values,data['Close'].values)
detail = [['日期', '買/賣(+/-)', '價格', '價格(稅)', '實際花費', '目前獲利']]
temp_detail = []
unit = 1
stock = 0
get = 0
for i in range(1, len(K)):
if((( (K[i - 1] < D[i - 1] and K[i] > D[i] + 3 )or D[i] < 15 or (D[i] < 30 and K[i] < 20)) ) and stock == 0):
stock += unit
get -= round(unit * dataclose[i] * 1000 * 1.001425)
temp_detail.append( str(datetime.date(data['Date'][i]).year) + '/' +str(datetime.date(data['Date'][i]).month) + '/' + str(datetime.date(data['Date'][i]).day) )
temp_detail.append('+' + str(unit))
temp_detail.append(dataclose[i])
temp_detail.append(round(dataclose[i] * 1.001425, 1))
temp_detail.append('-' + str(round(unit * dataclose[i] * 1000 * 1.001425)))
temp_detail.append(gain)
detail.append(temp_detail)
temp_detail = []
elif((((K[i - 1] > D[i - 1] and K[i] + 3 < D[i] ) or D[i] > 15 or (D[i] > 70 and K[i] > 80))) and stock != 0):
get += round(stock * dataclose[i] * 1000 * 0.995575)
temp_detail.append(str(datetime.date(data['Date'][i]).year) + '/' + str(datetime.date(data['Date'][i]).month) + '/' + str(datetime.date(data['Date'][i]).day) )
temp_detail.append('-' + str(stock))
temp_detail.append(dataclose[i])
temp_detail.append(round(dataclose[i] * 0.995575, 1))
temp_detail.append('+' + str(round(stock * dataclose[i] * 1000 * 0.995575)))
temp_detail.append(gain)
detail.append(temp_detail)
stock = 0
temp_detail = []
cost = 0
income = 0
for i in range(1, len(detail)):
if(float(detail[i][4]) < 0):
cost += abs(int(detail[i][4]))
elif(float(detail[i][4]) > 0):
get += int(detail[i][4])
print("支出:", cost, "元")
print("收入:", get, "元")
print("淨收益:", get - cost, "元")
print("投資報酬率:", round(100 * (get - cost) / cost, 2), "%")
detail = pd.DataFrame(detail)
detail