Skip to content

Commit fcdaf3a

Browse files
author
Emanuele Bolognesi
committed
refactoring
1 parent 9a1d49b commit fcdaf3a

File tree

9 files changed

+70
-38
lines changed

9 files changed

+70
-38
lines changed

carry/correlations.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from common import util
2+
import config as cfg
3+
import pandas as pd
4+
import matplotlib.pyplot as plt
5+
from datetime import datetime
6+
7+
8+
# all_expirations = util.get_historical_expirations()
9+
path = f'{cfg.CACHE_FOLDER}/0930'
10+
files = util.get_files_in_folder(path, '.csv')
11+
12+
print(files)
13+
14+
dfs = {}
15+
for f in files:
16+
if "BTC" in f.stem or "ETH" in f.stem or "CEL" in f.stem:
17+
continue
18+
df = pd.read_csv(f)
19+
df['AbsBasis'] = abs((df['FutPrice'] - df['PerpPrice']) / df['PerpPrice'] * 100)
20+
df['AbsBasis'] = df['AbsBasis'].ewm(span=24).mean()
21+
df['AbsBasisNorm'] = df['AbsBasis'] / df['AbsBasis'].max()
22+
df['Date'] = [datetime.fromtimestamp(ts) for ts in df['Timestamp']]
23+
dfs[f.stem] = df
24+
25+
plt.figure()
26+
for df in dfs.values():
27+
plt.plot(df['Date'], df['AbsBasis'])
28+
# print(df['AbsBasisNorm'].iat[-1])
29+
# plt.legend(dfs.keys())
30+
plt.xticks(rotation=45)
31+
plt.tight_layout()
32+
plt.show()

carry/backtesting_dashboard.py renamed to carry/dashboard.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,8 @@ def carry_backtesting():
2828
with st.sidebar:
2929
mode = st.radio(
3030
"Choose Mode",
31-
("Carry Backtesting", "Options Analysis")
31+
("Carry Backtesting", "")
3232
)
3333

3434
if mode == 'Carry Backtesting':
3535
carry_backtesting()
36-
elif mode == 'Options Analysis':
37-
st.title('TODO')

carry/historical_data_downloader.py

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,34 @@
33
from common import util
44

55

6-
def download(coin: str, expiry: str, resolution: int):
7-
market_data = CarryMarketData(coin, expiry, resolution)
8-
market_data.download()
9-
print(f'{coin}-{expiry} done')
6+
def download_historical_data():
7+
def download(coin: str, expiry: str, resolution: int):
8+
market_data = CarryMarketData(coin, expiry, resolution)
9+
market_data.download()
10+
print(f'{coin}-{expiry} done')
1011

12+
coins = util.get_all_futures_coins()
13+
all_expired_futures = util.get_expired_future_symbols()
14+
expiries = util.get_historical_expirations()
15+
threads = []
1116

12-
coins = util.get_all_futures_coins()
13-
all_expired_futures = util.get_expired_future_symbols()
14-
expiries = util.get_historical_expirations()
15-
threads = []
17+
for expiry in expiries:
18+
for coin in coins:
19+
fut = util.get_future_symbol(coin, expiry)
1620

17-
for expiry in expiries:
18-
for coin in coins:
19-
fut = util.get_future_symbol(coin, expiry)
21+
future_exists = util.future_exists(fut, all_expired_futures)
22+
if not future_exists:
23+
continue
2024

21-
future_exists = util.future_exists(fut, all_expired_futures)
22-
if not future_exists:
23-
continue
25+
x = threading.Thread(target=download, args=(coin, expiry, 3600,))
26+
threads.append(x)
27+
x.start()
2428

25-
x = threading.Thread(target=download, args=(coin, expiry, 3600,))
26-
threads.append(x)
27-
x.start()
29+
for t in threads:
30+
t.join()
2831

29-
for t in threads:
30-
t.join()
32+
print('done')
3133

32-
print('done')
34+
35+
def get_figures():
36+
pass

carry_live/bot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import numpy as np
44
from ftx_connector import FtxConnectorRest, FtxConnectorWs
55
from typing import List, Optional
6-
from types_ import *
6+
from classes import *
77
import config as cfg
88
import logging
99
from common.logger import logger

carry_live/types_.py renamed to carry_live/classes.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,17 @@ def _get_basis(self) -> float:
3333

3434
def _get_adj_basis_open(self) -> float:
3535
if self.is_contango:
36-
adj_basis_open = self.fut_ticker.bid - self.perp_ticker.ask
36+
adj_basis_open = (self.fut_ticker.bid - self.perp_ticker.ask) / self.perp_ticker.ask * 100
3737
else:
38-
adj_basis_open = self.fut_ticker.ask - self.perp_ticker.bid
39-
return adj_basis_open / self.perp_ticker.mark * 100
38+
adj_basis_open = (self.fut_ticker.ask - self.perp_ticker.bid) / self.perp_ticker.bid * 100
39+
return adj_basis_open
4040

4141
def _get_adj_basis_close(self) -> float:
4242
if self.is_contango:
43-
adj_basis_close = self.fut_ticker.ask - self.perp_ticker.bid
43+
adj_basis_close = (self.fut_ticker.ask - self.perp_ticker.bid) / self.perp_ticker.bid * 100
4444
else:
45-
adj_basis_close = self.fut_ticker.bid - self.perp_ticker.ask
46-
return adj_basis_close / self.perp_ticker.mark * 100
45+
adj_basis_close = (self.fut_ticker.bid - self.perp_ticker.ask) / self.perp_ticker.ask * 100
46+
return adj_basis_close
4747

4848

4949
class Position:

carry_live/dashboard.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import importer
22
import streamlit as st
3-
from quantools.common import util
3+
from common import util
44
import config
55
from ftx_connector import FtxConnectorRest
6-
from quantools.common.FtxClientWs import FtxWebsocketClient
7-
from types_ import Cache, WsTicker
6+
from common.FtxClientWs import FtxWebsocketClient
7+
from classes import Cache, WsTicker
88
import time
99
import pandas as pd
10-
import numpy as np
1110
import asyncio
12-
import json
1311

1412
ws_client = FtxWebsocketClient()
1513
connector_rest = FtxConnectorRest(config.API_KEY, config.API_SECRET, config.SUB_ACCOUNT)
@@ -52,7 +50,7 @@ def show_market_overview():
5250
st.title(MODES[0])
5351
loop = asyncio.new_event_loop()
5452
# loop.create_task(_get_funding())
55-
loop.create_task(_market_overview())
53+
# loop.create_task(_market_overview())
5654
# loop.run_forever()
5755

5856

carry_live/ftx_connector.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from common.FtxClientRest import FtxClient
22
from common.FtxClientWs import FtxWebsocketClient
3-
from types_ import *
3+
from classes import *
44
from common import util
55
from typing import List, Dict, Optional
66
import time

carry_live/telegram_bot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def send(self, tg_msg: TgMsg, level) -> None:
3636
def _enough_time_passed(self, msg: TgMsg) -> bool:
3737
"""Avoid sending the same message to frequently"""
3838
time_now = time.time()
39-
keys_to_delete = [key for key, sent_time in self._msg_cache.items() if (time_now - sent_time) > 60]
39+
keys_to_delete = [key for key, sent_time in self._msg_cache.items() if (time_now - sent_time) > 1800]
4040
for key in keys_to_delete:
4141
del self._msg_cache[key]
4242

File renamed without changes.

0 commit comments

Comments
 (0)