Esempio n. 1
0
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()  
Esempio n. 3
0
            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)
Esempio n. 4
0
    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)
'''   
Esempio n. 6
0
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
Esempio n. 7
0
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)
    
Esempio n. 8
0
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
Esempio n. 9
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,
Esempio n. 10
0
def get_price(name="發行量加權股價指數", freq="15T"):
    data = Data()
    twii = data.get(name)
    twii = twii['台股指數']
    twii = twii.resample(freq).first().dropna()
    return twii