def update_output_div(input_value, date): """ 根據所選策略、所選時間,用simulation函式來產生 dataframe equality 和標題 並且顯示於網頁中的 table 上 """ # 還沒選擇 if date is None or input_value is None: return html.H4(children='請選擇上方的策略與日期') try: # 監測開始 print('start simulation') date = datetime.datetime.strptime(date.split()[0], '%Y-%m-%d') data = Data() # 根據所選策略、所選時間,用simulation函式來產生 dataframe equality 和標題 df, eq, s = simulation(strategies[input_value], data, date.date()) print('end simulation') df.index.name = '股票代號' # 產生 html return html.Div(children=[ html.H3(s), html.Br(), dcc.Graph( id='example-graph-2', # 畫圖 figure={ 'data': [ { 'x': eq.index, 'y': eq, 'type': 'line', 'name': 'SF' }, ], 'layout': {} } # 用 generate_table 將 dataframe 轉成 HTML table ), generate_table(df.reset_index().round(2), len(df)) ]) except: errorlog = "Unexpected error: " + str(sys.exc_info()) return html.H4(children='遇到了一些問題喔!' + errorlog)
if __name__ == '__main__': SumROE_DF_All = pd.DataFrame() for RSV_Ndays in range (50, 201, 50): for StockHold_Days in range (30, 61, 30): # Input: StartDate = PickDate('2015_01_01') EndDate = PickDate('2018_12_31') print('RSV_Ndays: ' + str(RSV_Ndays)) print('StockHold_Days: ' + str(StockHold_Days)) # Evaluation: # equality是累計總報酬率 2018-11-30 0.859861 # transections是買賣個股的價格 1701 2018-05-03 20.90 ... 2018-05-31 20.55 equality, transections = backtest(StartDate, EndDate, StockHold_Days, RSV_Ndays, Data()) # Output: dicData = dic_ROE(equality, RSV_Ndays, StockHold_Days) SumROE_DF_All = SumROE_DF_All.append(dicData, ignore_index = True) SumROE_DF_All_Sort = SumROE_DF_All.sort_values( by = 'SumROE', ascending= True) print(SumROE_DF_All_Sort) ''' # 測試最佳 RSV_Ndays 50 - 200天 for RSV_Ndays in range(50 , 201, 50): for Sold_NDays in range (30, 61,30): print('RSV '+str(RSV_Ndays)+' days') print('持股天數 '+str(Sold_NDays)+' days') data = Data()
RSV_Ratio = RSV_Ratio / 100 for StockHold_Days in range(15, 121, 15): # Inpu StartDate = PickDate('2018_01_01') EndDate = PickDate('2018_12_30') print('-' * 10 + ' RSV & Hold Days ' + '-' * 10) print('RSV_Ndays: ' + str(RSV_Ndays)) print('RSV_Ratio: ' + str(RSV_Ratio)) print('StockHold_Days: ' + str(StockHold_Days)) # Evaluation: # equality是累計總報酬率 2018-11-30 0.859861 # transections是買賣個股的價格 1701 2018-05-03 20.90 ... 2018-05-31 20.55 equality, transections, sheet_name = backtest( StartDate, EndDate, StockHold_Days, RSV_Ndays, RSV_Ratio, lstStockSorted, PickStockNumber, Data(), PathExcelFile) # Output: # Write All ROE to Excel into each page and All_ROE page dftotal_ROE = pd.DataFrame() dicData = dic_ROE(equality, RSV_Ndays, RSV_Ratio, StockHold_Days) dftotal_ROE = dftotal_ROE.append(dicData, ignore_index=True) # AddDataToExcelSheet(PathExcelFile, sheet_name, dftotal_ROE) AddDataToExcelSheet(PathExcelFile, 'All_ROE', dftotal_ROE) #input('Check') SumROE_DF_All = SumROE_DF_All.append(dicData, ignore_index=True) dfSumROE_All_Sorted = SumROE_DF_All.sort_values(by='SumROE', ascending=True)
PathExcelFileName = datetime.datetime.now().strftime('%Y%m%d_%H%M')+'.xlsx' PathExcelFile = os.getcwd()+'\\'+PathExcelFileName for RSV_Ndays in range (50, 251, 100): for StockHold_Days in range (15, 16, 15): # Inpu StartDate = PickDate('2018_11_01') EndDate = PickDate('2018_12_30') print('-'*10 + ' RSV & Hold Days ' +'-'*10) print('RSV_Ndays: ' + str(RSV_Ndays)) print('StockHold_Days: ' + str(StockHold_Days)) # Evaluation: # equality是累計總報酬率 2018-11-30 0.859861 # transections是買賣個股的價格 1701 2018-05-03 20.90 ... 2018-05-31 20.55 equality, transections = backtest(StartDate, EndDate, StockHold_Days, RSV_Ndays, lstStockSorted, PickStockNumber, Data(), PathExcelFile) # Output: dicData = dic_ROE(equality, RSV_Ndays, StockHold_Days) SumROE_DF_All = SumROE_DF_All.append(dicData, ignore_index = True) dfSumROE_All_Sort = SumROE_DF_All.sort_values( by = 'SumROE', ascending= True) print('-'*10 + ' ROE Result ' +'-'*10) print(dfSumROE_All_Sort) # Write to Excel sheet_name = 'ALL_ROE' AddDataToExcelSheet(PathExcelFile, sheet_name, dfSumROE_All_Sort) ''' SumROE_DF_All = pd.DataFrame()
for RSV_Ndays in range(50, 101, 50): for StockHold_Days in range(15, 16, 15): # Inpu StartDate = PickDate('2018_10_01') EndDate = PickDate('2018_12_30') print('-' * 10 + ' RSV & Hold Days ' + '-' * 10) print('RSV_Ndays: ' + str(RSV_Ndays)) print('StockHold_Days: ' + str(StockHold_Days)) # Evaluation: # equality是累計總報酬率 2018-11-30 0.859861 # transections是買賣個股的價格 1701 2018-05-03 20.90 ... 2018-05-31 20.55 equality, transections, intReturnProfit = backtest( intInvestAmount, intNetProfit, StartDate, EndDate, StockHold_Days, RSV_Ndays, lstStockSorted, PickStockNumber, Data(), PathExcelFile) # Output: dicData = dic_ROE(equality, RSV_Ndays, StockHold_Days) SumROE_DF_All = SumROE_DF_All.append(dicData, ignore_index=True) # Put ReturnAmount as InvestAmount intNetProfit = intNetProfit + intReturnProfit dfSumROE_All_Sort = SumROE_DF_All.sort_values(by='SumROE', ascending=True) print('-' * 10 + ' ROE Result ' + '-' * 10) print(dfSumROE_All_Sort) # Write to Excel sheet_name = 'ALL_ROE' AddDataToExcelSheet(PathExcelFile, sheet_name, dfSumROE_All_Sort) '''
if __name__ == '__main__': SumROE_DF_All = pd.DataFrame() for RSV_Ndays in range(50, 201, 50): for StockHold_Days in range(30, 61, 30): # Input: StartDate = PickDate('2015_01_01') EndDate = PickDate('2018_12_31') print('RSV_Ndays: ' + str(RSV_Ndays)) print('StockHold_Days: ' + str(StockHold_Days)) # Evaluation: # equality是累計總報酬率 2018-11-30 0.859861 # transections是買賣個股的價格 1701 2018-05-03 20.90 ... 2018-05-31 20.55 equality, transections = backtest(StartDate, EndDate, StockHold_Days, RSV_Ndays, Data()) # Output: dicData = dic_ROE(equality, RSV_Ndays, StockHold_Days) SumROE_DF_All = SumROE_DF_All.append(dicData, ignore_index=True) SumROE_DF_All_Sort = SumROE_DF_All.sort_values(by='SumROE', ascending=True) print(SumROE_DF_All_Sort) ''' # 測試最佳 RSV_Ndays 50 - 200天 for RSV_Ndays in range(50 , 201, 50): for Sold_NDays in range (30, 61,30): print('RSV '+str(RSV_Ndays)+' days') print('持股天數 '+str(Sold_NDays)+' days') data = Data() stocks = mystrategy2(data, RSV_Ndays) #equality是累計總報酬率 2018-11-30 0.859861
import numpy as np import pandas as pd from finlab.data import Data import datetime if __name__ == '__main__': data = Data() ClosePrice = data.get('¦¬½L»ù', -2) print(ClosePrice)
import datetime import pandas as pd from finlab.data import Data from finlab.backtest import portfolio from finlab.backtest_test import backtest from strategies.MFS_new_strategy import strategy data = Data() starttime = datetime.datetime.now() # 回測檢查報酬率 print("========Backtesting Begin========") #設定pd讓輸出不要省略 #顯示所有列 pd.set_option('display.max_columns', None) #顯示所有行 pd.set_option('display.max_rows', None) #設置value的顯示長度为100,默認为50 pd.set_option('max_colwidth',100) y1 = 2021 m1 = 10 d1 = 12 y2 = 2021 m2 = 10 d2 = 17 gap = 0
#!/usr/bin/env python # coding: utf-8 # # 神經網路實做 # ## 拿取加權指數資料 # In[1]: from finlab.data import Data data = Data() twii = data.get("發行量加權股價指數") twii = twii['台股指數'].resample("15T").first().dropna() twii.head() # ## 製作features # In[2]: import talib import numpy as np import pandas as pd sma = talib.SMA(twii, timeperiod=120) wma = talib.WMA(twii, timeperiod=120) mom = talib.MOM(twii, timeperiod=120) k, d = talib.STOCH(twii, twii, twii,
def get_price(name="發行量加權股價指數", freq="15T"): data = Data() twii = data.get(name) twii = twii['台股指數'] twii = twii.resample(freq).first().dropna() return twii