From aa6fb9f6a5309f5778e5e2d6588942549bfc277a Mon Sep 17 00:00:00 2001 From: Fconel Date: Wed, 21 Jul 2021 23:27:41 -0400 Subject: [PATCH] minor fixs --- __pycache__/get_data.cpython-36.pyc | Bin 975 -> 980 bytes __pycache__/optimization.cpython-36.pyc | Bin 2844 -> 2812 bytes get_data.py | 20 +++----- main.py | 64 +++++++++++++----------- 4 files changed, 40 insertions(+), 44 deletions(-) diff --git a/__pycache__/get_data.cpython-36.pyc b/__pycache__/get_data.cpython-36.pyc index 12a2a64ad89d431826f007a4a17c128d41c2ce33..66421e31ac33fe8195b37729a868b91a64ab9909 100644 GIT binary patch delta 435 zcmZ9HJxc>Y5Qb-F?_=|6h=L@vo1+Jwfl~L-tC-Ct-f=q98bq><9=zbm>S)V=j$A& hx*VYzAsVvsf0W#~=&9>&dlT99k_?Fw(AR6PIy delta 429 zcmYjNO-sW-5Z#&0$0q%-^k8jk5$(kyo;)gQwdfBh^dN|hY`})r#w1D)2^8wJLdn&? z;%^W^JoM^s@F+N&gLId9`}WPun`J-Ece8m=DA;Qs)BcXe*f(2QocJk4*jqGr_cc#< zwHw1VUG#+HuP8OCKWkT(%RHWG25F`gq}dDq@a%Nb98AOHDmGK;b#o$>nmzK1t6zFDW836XMo}NGg zx%3w%P)(n(-LTZ-%LEJsmU)eD@}k;M!l0ghVYi>BTu>rtVStKP6jcAAMr@huIFWM^ zj7R6)-Zlv#eH2+1F=)`)$}LUbiSCAj+oj<<_tFW2%vSlOZ_vKfhJ!E)3Um$X3RKt1 djBHvqNF0sE@^R=M1672|M1X)i2o$`$@dpULQYHWZ diff --git a/__pycache__/optimization.cpython-36.pyc b/__pycache__/optimization.cpython-36.pyc index db2f32bb98d10eca8b51113495570f6314c4f63d..f1df81ead8cfdd0edabd868db3495edb135b9e1d 100644 GIT binary patch delta 793 zcmYLH%Wl&^6rHghKPIvBvQs+_ZxzT6wV<--0<}?DAaz5bQc%@eog~7jX*w~em97;b ze*g$?5&wYr0)E3RSs_*82Uu{&RKe0cI_J!}cRXW%?)>rCx^1&x^!?FR{VRK-(qaBg zeTtZ?+xC!&*Yh`r(R@BihWStRAY3Jc9P0@3>0wo{wz1}y`73R8F(IjmWnnR_>iL&M z12v-qa_}jwC6!o@jl=|!(Tt`x*yvbbXEY?JsxgzClEeZdu4V*m7n59bN$P-!tBzd7 zwOU3>w+?n}#}3r7urpiGw1Fe*(7^Fcu&||Bwm6{q1e&-_3mCdB>7H%w6HGV2!n9Q~ z6PZ~uhO7-HSkQ**L`&VI8MnYi*8?xMQ;%1;&JAu(H1H1F;Bh@5i`dOb+W9A95BbXZ zP2R%O`>78e_yLJK$x22g-y|RD+2ehJX#;&9(*ceSAmG+m2}s(#Qmj;A(&g1Syh`If z@(%H?y1a&Nw^T<`+9<>2q9a?%p>;WC={J^s^S=)`2v2MR8&{r_etUOkudj$UeqZ5A z@bVY><%7GD-ji@2q2CjM$VM5Df`;zKzW}t?eQw3Zss~)cm*g zXick82USNR^{KCj0VewHP@hFp9?iu%%AzuTdosHyU#rMpvJrkXocS>S&f2>Cxy2wa G*w$ZPcC*a@ delta 825 zcmXYvOKa3n6vyw)VdxuB2(kMp>p}!wtZ1j5 zoRfaQKJpXTWLRyZztzR^9xmO3o^bb-Hp^zGBX2UAgE^SR(AJrwZ6JBP-FxD zpbQ92LP%&4BE*2pcCl0WyMBY5n}l0r_hpB4m(U~B39|&3Fh`&}BIgO02$vD1F5|<| zusEv@7Pi&BqcdANm|DHit>OAEQ7_!ypE{4(#})*bGl?{PMLxwg6+z2d?@0vT*6_g hAHF^~KASYKUEH&Vl}V5Hi?3FrLYH5z6+f&;{{bq9wlV+! diff --git a/get_data.py b/get_data.py index bf4b48a..b60de50 100644 --- a/get_data.py +++ b/get_data.py @@ -3,33 +3,25 @@ from pathlib import Path import ssl -ssl._create_default_https_context = ssl._create_unverified_context - -#Load data from WEB OR CSV +#Load data from WEB def DataFromWeb(names:list) -> pd.DataFrame: + ssl._create_default_https_context = ssl._create_unverified_context data = pd.DataFrame() for _ in range(len(names)): + + data_price = pd.read_csv(r'https://www.cryptodatadownload.com/cdd/Binance_'+names[_]+r'USDT_d.csv',header=1) #Load data from cryptodatadownload.com - #Load data from cryptodatadownload.com - data_price = pd.read_csv(r'https://www.cryptodatadownload.com/cdd/Binance_'+names[_]+r'USDT_d.csv',header=1) - - #Keep close price anda date - data_price.drop(data_price.columns.difference(['date','close']), 1, inplace=True) - - #Rename colums + data_price.drop(data_price.columns.difference(['date','close']), 1, inplace=True) #Keep 'close price' and 'date' fields data_price.columns = ['date', names[_]] - - #Set date as index data_price.set_index('date', inplace=True) - - #Merge data, drop NAN rows and save csv data = data.join(data_price, how='outer') data.dropna(inplace= True) return data +#Load data from CSV def DataFromCSV(Path: pathlib.Path) -> pd.DataFrame: data = pd.read_csv(Path, index_col=0) diff --git a/main.py b/main.py index 965637c..326ae92 100644 --- a/main.py +++ b/main.py @@ -2,34 +2,38 @@ import matplotlib.pyplot as plt from matplotlib.ticker import FuncFormatter -#Parametros -Monedas=['BTC','ETH','LTC'] -number_of_portfolios = 10000 -RiskFreeRate=0 - -#Assets Risk/Return -RiskReturn_asset = optimization.RiskByAsset(Monedas,optimization.SimpleReturns) - -#Assets Risk/Return graph -fig, ax = plt.subplots() -ax.yaxis.set_major_formatter(FuncFormatter('{0:.0%}'.format)) -ax.xaxis.set_major_formatter(FuncFormatter('{0:.0%}'.format)) -RiskReturn_asset.plot(x ='Risk', y='Return', kind = 'scatter',ax=ax,title='Return/Risk by asset',alpha=0.5) -for k, v in RiskReturn_asset.iterrows(): - ax.annotate(k, v) -plt.grid() - -#Portfolio Risk/Retun -MaxSharpeRatioRisk,MaxSharpeRatioReturn,portfolio_risk,portfolio_returns,portfolio_sharpe_ratio= optimization.EfficientFrontier(Monedas,'','',number_of_portfolios,RiskFreeRate,optimization.SimpleReturns) - -#Portfolio Risk/Retun graph -plt.figure(figsize=(12, 8)) -plt.scatter(portfolio_risk, portfolio_returns, c=portfolio_sharpe_ratio) -plt.colorbar(label='Sharpe Ratio') -plt.xlabel('volatility') -plt.ylabel('returns') -plt.scatter(MaxSharpeRatioRisk, MaxSharpeRatioReturn,c='red', s=50) - -#Show graph -plt.show() +def main(): + #Parametros + Monedas=['BTC','ETH','LTC'] + number_of_portfolios = 10000 + RiskFreeRate=0 + + #Assets Risk/Return + RiskReturn_asset = optimization.RiskByAsset(Monedas,optimization.SimpleReturns) + + #Assets Risk/Return graph + fig, ax = plt.subplots() + ax.yaxis.set_major_formatter(FuncFormatter('{0:.0%}'.format)) + ax.xaxis.set_major_formatter(FuncFormatter('{0:.0%}'.format)) + RiskReturn_asset.plot(x ='Risk', y='Return', kind = 'scatter',ax=ax,title='Return/Risk by asset',alpha=0.5) + for k, v in RiskReturn_asset.iterrows(): + ax.annotate(k, v) + plt.grid() + + #Portfolio Risk/Retun + MaxSharpeRatioRisk,MaxSharpeRatioReturn,portfolio_risk,portfolio_returns,portfolio_sharpe_ratio= optimization.EfficientFrontier(Monedas,'','',number_of_portfolios,RiskFreeRate,optimization.SimpleReturns) + + #Portfolio Risk/Retun graph + plt.figure(figsize=(12, 8)) + plt.scatter(portfolio_risk, portfolio_returns, c=portfolio_sharpe_ratio) + plt.colorbar(label='Sharpe Ratio') + plt.xlabel('volatility') + plt.ylabel('returns') + plt.scatter(MaxSharpeRatioRisk, MaxSharpeRatioReturn,c='red', s=50) + + #Show graph + plt.show() + +if __name__ == '__main__': + main()