bitunix-automated-crypto-trading 2.6.7__py3-none-any.whl → 2.6.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bitunix_automated_crypto_trading/AsyncThreadRunner.py +81 -81
- bitunix_automated_crypto_trading/BitunixApi.py +278 -278
- bitunix_automated_crypto_trading/BitunixSignal.py +1099 -1099
- bitunix_automated_crypto_trading/BitunixWebSocket.py +254 -254
- bitunix_automated_crypto_trading/DataFrameHtmlRenderer.py +74 -74
- bitunix_automated_crypto_trading/NotificationManager.py +23 -23
- bitunix_automated_crypto_trading/ThreadManager.py +68 -68
- bitunix_automated_crypto_trading/TickerManager.py +635 -635
- bitunix_automated_crypto_trading/bitunix.py +597 -594
- bitunix_automated_crypto_trading/config.py +90 -90
- bitunix_automated_crypto_trading/logger.py +84 -84
- {bitunix_automated_crypto_trading-2.6.7.dist-info → bitunix_automated_crypto_trading-2.6.8.dist-info}/METADATA +36 -36
- bitunix_automated_crypto_trading-2.6.8.dist-info/RECORD +17 -0
- bitunix_automated_crypto_trading/config.txt +0 -60
- bitunix_automated_crypto_trading/sampleenv.txt +0 -5
- bitunix_automated_crypto_trading/static/chart.css +0 -28
- bitunix_automated_crypto_trading/static/chart.js +0 -362
- bitunix_automated_crypto_trading/static/modal.css +0 -68
- bitunix_automated_crypto_trading/static/modal.js +0 -147
- bitunix_automated_crypto_trading/static/script.js +0 -166
- bitunix_automated_crypto_trading/static/styles.css +0 -118
- bitunix_automated_crypto_trading/templates/charts.html +0 -98
- bitunix_automated_crypto_trading/templates/login.html +0 -19
- bitunix_automated_crypto_trading/templates/main.html +0 -551
- bitunix_automated_crypto_trading/templates/modal-chart.html +0 -26
- bitunix_automated_crypto_trading/templates/modal-config.html +0 -34
- bitunix_automated_crypto_trading/templates/modal-logs.html +0 -15
- bitunix_automated_crypto_trading-2.6.7.dist-info/RECORD +0 -31
- {bitunix_automated_crypto_trading-2.6.7.dist-info → bitunix_automated_crypto_trading-2.6.8.dist-info}/WHEEL +0 -0
- {bitunix_automated_crypto_trading-2.6.7.dist-info → bitunix_automated_crypto_trading-2.6.8.dist-info}/entry_points.txt +0 -0
- {bitunix_automated_crypto_trading-2.6.7.dist-info → bitunix_automated_crypto_trading-2.6.8.dist-info}/top_level.txt +0 -0
@@ -1,90 +1,90 @@
|
|
1
|
-
from pydantic import Field, SecretStr, validator
|
2
|
-
from pydantic_settings import BaseSettings
|
3
|
-
import os
|
4
|
-
|
5
|
-
class Settings(BaseSettings):
|
6
|
-
# Start autotrading on start
|
7
|
-
AUTOTRADE: bool = Field(default=False)
|
8
|
-
|
9
|
-
# Trading Parameters
|
10
|
-
LEVERAGE: int = Field(default=20, ge=1, le=100)
|
11
|
-
THRESHOLD: float = Field(default=5.0, ge=0.0)
|
12
|
-
MIN_VOLUME: int = Field(default=10_000_000, ge=0)
|
13
|
-
ORDER_AMOUNT_PERCENTAGE: float = Field(default=0.01, ge=0.0, le=100)
|
14
|
-
MAX_AUTO_TRADES: int = Field(default=10, ge=0)
|
15
|
-
PROFIT_AMOUNT: float = Field(default=0.25, ge=0.0)
|
16
|
-
LOSS_AMOUNT: float = Field(default=5.0, ge=0.0)
|
17
|
-
OPTION_MOVING_AVERAGE: str = Field(default="1h")
|
18
|
-
BARS: int = Field(default=100, ge=1)
|
19
|
-
|
20
|
-
# Technical Indicators Parameters
|
21
|
-
MA_FAST: int = Field(default=12, ge=1)
|
22
|
-
MA_MEDIUM: int = Field(default=26, ge=1)
|
23
|
-
MA_SLOW: int = Field(default=50, ge=1)
|
24
|
-
RSI_FAST: int = Field(default=6, ge=1)
|
25
|
-
RSI_SLOW: int = Field(default=24, ge=1)
|
26
|
-
BBM_PERIOD: int = Field(default=20, ge=1)
|
27
|
-
BBM_STD: int = Field(default=2, ge=1)
|
28
|
-
MACD_PERIOD: int = Field(default=9, ge=1)
|
29
|
-
MACD_SHORT: int = Field(default=12, ge=1)
|
30
|
-
MACD_LONG: int = Field(default=26, ge=1)
|
31
|
-
ADX_PERIOD: int = Field(default=14, ge=1)
|
32
|
-
|
33
|
-
# Technical Indicators
|
34
|
-
OPEN_ON_ANY_SIGNAL: bool = Field(default=True)
|
35
|
-
|
36
|
-
EMA_CHART: bool = Field(default=True)
|
37
|
-
EMA_STUDY: bool = Field(default=True)
|
38
|
-
EMA_CROSSING: bool = Field(default=False)
|
39
|
-
EMA_CHECK_ON_OPEN: bool = Field(default=True)
|
40
|
-
EMA_CHECK_ON_CLOSE: bool = Field(default=True)
|
41
|
-
|
42
|
-
MACD_CHART: bool = Field(default=False)
|
43
|
-
MACD_STUDY: bool = Field(default=True)
|
44
|
-
MACD_CROSSING: bool = Field(default=False)
|
45
|
-
MACD_CHECK_ON_OPEN: bool = Field(default=False)
|
46
|
-
MACD_CHECK_ON_CLOSE: bool = Field(default=False)
|
47
|
-
|
48
|
-
BBM_CHART: bool = Field(default=False)
|
49
|
-
BBM_STUDY: bool = Field(default=True)
|
50
|
-
BBM_CROSSING: bool = Field(default=False)
|
51
|
-
BBM_CHECK_ON_OPEN: bool = Field(default=False)
|
52
|
-
BBM_CHECK_ON_CLOSE: bool = Field(default=False)
|
53
|
-
|
54
|
-
RSI_CHART: bool = Field(default=False)
|
55
|
-
RSI_STUDY: bool = Field(default=True)
|
56
|
-
RSI_CROSSING: bool = Field(default=False)
|
57
|
-
RSI_CHECK_ON_OPEN: bool = Field(default=False)
|
58
|
-
RSI_CHECK_ON_CLOSE: bool = Field(default=False)
|
59
|
-
|
60
|
-
ADX_STUDY: bool = Field(default=True)
|
61
|
-
ADX_CHECK_ON_OPEN: bool = Field(default=False)
|
62
|
-
ADX_CHECK_ON_CLOSE: bool = Field(default=False)
|
63
|
-
|
64
|
-
CANDLE_TREND_STUDY: bool = Field(default=True)
|
65
|
-
CANDLE_TREND_CHECK_ON_OPEN: bool = Field(default=False)
|
66
|
-
CANDLE_TREND_CHECK_ON_CLOSE: bool = Field(default=False)
|
67
|
-
|
68
|
-
# Time Intervals
|
69
|
-
SCREEN_REFRESH_INTERVAL: int = Field(default=1, ge=1)
|
70
|
-
SIGNAL_CHECK_INTERVAL: int = Field(default=15, ge=1)
|
71
|
-
PORTFOLIO_API_INTERVAL: int = Field(default=3, ge=1)
|
72
|
-
PENDING_POSITIONS_API_INTERVAL: int = Field(default=3, ge=1)
|
73
|
-
PENDING_ORDERS_API_INTERVAL: int = Field(default=3, ge=1)
|
74
|
-
TRADE_HISTORY_API_INTERVAL: int = Field(default=3, ge=1)
|
75
|
-
POSITION_HISTORY_API_INTERVAL: int = Field(default=3, ge=1)
|
76
|
-
TICKER_DATA_API_INTERVAL: int = Field(default=30, ge=1)
|
77
|
-
PUBLIC_WEBSOCKET_RESTART_INTERVAL: int = Field(default=10_800, ge=1)
|
78
|
-
|
79
|
-
# Use websocket or API
|
80
|
-
USE_PUBLIC_WEBSOCKET: bool = Field(default=False) # If there is lagging issue then use API
|
81
|
-
|
82
|
-
# Logger
|
83
|
-
VERBOSE_LOGGING: bool = Field(default=False)
|
84
|
-
|
85
|
-
# Benchmark
|
86
|
-
BENCHMARK: bool = Field(default=False)
|
87
|
-
|
88
|
-
class Config:
|
89
|
-
# Specify the file name for loading environment variables
|
90
|
-
env_file = "
|
1
|
+
from pydantic import Field, SecretStr, validator
|
2
|
+
from pydantic_settings import BaseSettings
|
3
|
+
import os
|
4
|
+
|
5
|
+
class Settings(BaseSettings):
|
6
|
+
# Start autotrading on start
|
7
|
+
AUTOTRADE: bool = Field(default=False)
|
8
|
+
|
9
|
+
# Trading Parameters
|
10
|
+
LEVERAGE: int = Field(default=20, ge=1, le=100)
|
11
|
+
THRESHOLD: float = Field(default=5.0, ge=0.0)
|
12
|
+
MIN_VOLUME: int = Field(default=10_000_000, ge=0)
|
13
|
+
ORDER_AMOUNT_PERCENTAGE: float = Field(default=0.01, ge=0.0, le=100)
|
14
|
+
MAX_AUTO_TRADES: int = Field(default=10, ge=0)
|
15
|
+
PROFIT_AMOUNT: float = Field(default=0.25, ge=0.0)
|
16
|
+
LOSS_AMOUNT: float = Field(default=5.0, ge=0.0)
|
17
|
+
OPTION_MOVING_AVERAGE: str = Field(default="1h")
|
18
|
+
BARS: int = Field(default=100, ge=1)
|
19
|
+
|
20
|
+
# Technical Indicators Parameters
|
21
|
+
MA_FAST: int = Field(default=12, ge=1)
|
22
|
+
MA_MEDIUM: int = Field(default=26, ge=1)
|
23
|
+
MA_SLOW: int = Field(default=50, ge=1)
|
24
|
+
RSI_FAST: int = Field(default=6, ge=1)
|
25
|
+
RSI_SLOW: int = Field(default=24, ge=1)
|
26
|
+
BBM_PERIOD: int = Field(default=20, ge=1)
|
27
|
+
BBM_STD: int = Field(default=2, ge=1)
|
28
|
+
MACD_PERIOD: int = Field(default=9, ge=1)
|
29
|
+
MACD_SHORT: int = Field(default=12, ge=1)
|
30
|
+
MACD_LONG: int = Field(default=26, ge=1)
|
31
|
+
ADX_PERIOD: int = Field(default=14, ge=1)
|
32
|
+
|
33
|
+
# Technical Indicators
|
34
|
+
OPEN_ON_ANY_SIGNAL: bool = Field(default=True)
|
35
|
+
|
36
|
+
EMA_CHART: bool = Field(default=True)
|
37
|
+
EMA_STUDY: bool = Field(default=True)
|
38
|
+
EMA_CROSSING: bool = Field(default=False)
|
39
|
+
EMA_CHECK_ON_OPEN: bool = Field(default=True)
|
40
|
+
EMA_CHECK_ON_CLOSE: bool = Field(default=True)
|
41
|
+
|
42
|
+
MACD_CHART: bool = Field(default=False)
|
43
|
+
MACD_STUDY: bool = Field(default=True)
|
44
|
+
MACD_CROSSING: bool = Field(default=False)
|
45
|
+
MACD_CHECK_ON_OPEN: bool = Field(default=False)
|
46
|
+
MACD_CHECK_ON_CLOSE: bool = Field(default=False)
|
47
|
+
|
48
|
+
BBM_CHART: bool = Field(default=False)
|
49
|
+
BBM_STUDY: bool = Field(default=True)
|
50
|
+
BBM_CROSSING: bool = Field(default=False)
|
51
|
+
BBM_CHECK_ON_OPEN: bool = Field(default=False)
|
52
|
+
BBM_CHECK_ON_CLOSE: bool = Field(default=False)
|
53
|
+
|
54
|
+
RSI_CHART: bool = Field(default=False)
|
55
|
+
RSI_STUDY: bool = Field(default=True)
|
56
|
+
RSI_CROSSING: bool = Field(default=False)
|
57
|
+
RSI_CHECK_ON_OPEN: bool = Field(default=False)
|
58
|
+
RSI_CHECK_ON_CLOSE: bool = Field(default=False)
|
59
|
+
|
60
|
+
ADX_STUDY: bool = Field(default=True)
|
61
|
+
ADX_CHECK_ON_OPEN: bool = Field(default=False)
|
62
|
+
ADX_CHECK_ON_CLOSE: bool = Field(default=False)
|
63
|
+
|
64
|
+
CANDLE_TREND_STUDY: bool = Field(default=True)
|
65
|
+
CANDLE_TREND_CHECK_ON_OPEN: bool = Field(default=False)
|
66
|
+
CANDLE_TREND_CHECK_ON_CLOSE: bool = Field(default=False)
|
67
|
+
|
68
|
+
# Time Intervals
|
69
|
+
SCREEN_REFRESH_INTERVAL: int = Field(default=1, ge=1)
|
70
|
+
SIGNAL_CHECK_INTERVAL: int = Field(default=15, ge=1)
|
71
|
+
PORTFOLIO_API_INTERVAL: int = Field(default=3, ge=1)
|
72
|
+
PENDING_POSITIONS_API_INTERVAL: int = Field(default=3, ge=1)
|
73
|
+
PENDING_ORDERS_API_INTERVAL: int = Field(default=3, ge=1)
|
74
|
+
TRADE_HISTORY_API_INTERVAL: int = Field(default=3, ge=1)
|
75
|
+
POSITION_HISTORY_API_INTERVAL: int = Field(default=3, ge=1)
|
76
|
+
TICKER_DATA_API_INTERVAL: int = Field(default=30, ge=1)
|
77
|
+
PUBLIC_WEBSOCKET_RESTART_INTERVAL: int = Field(default=10_800, ge=1)
|
78
|
+
|
79
|
+
# Use websocket or API
|
80
|
+
USE_PUBLIC_WEBSOCKET: bool = Field(default=False) # If there is lagging issue then use API
|
81
|
+
|
82
|
+
# Logger
|
83
|
+
VERBOSE_LOGGING: bool = Field(default=False)
|
84
|
+
|
85
|
+
# Benchmark
|
86
|
+
BENCHMARK: bool = Field(default=False)
|
87
|
+
|
88
|
+
class Config:
|
89
|
+
# Specify the file name for loading environment variables
|
90
|
+
env_file = "config.txt"
|
@@ -1,85 +1,85 @@
|
|
1
|
-
import logging
|
2
|
-
import os
|
3
|
-
from logging.handlers import RotatingFileHandler
|
4
|
-
from datetime import datetime, timezone
|
5
|
-
from zoneinfo import ZoneInfo
|
6
|
-
from colorama import init, Fore, Style
|
7
|
-
|
8
|
-
# Initialize colorama for Windows support
|
9
|
-
init()
|
10
|
-
|
11
|
-
class Colors:
|
12
|
-
RESET = Style.RESET_ALL
|
13
|
-
RED = Fore.RED
|
14
|
-
GREEN = Fore.GREEN
|
15
|
-
YELLOW = Fore.YELLOW
|
16
|
-
BLUE = Fore.BLUE
|
17
|
-
PURPLE = Fore.MAGENTA
|
18
|
-
CYAN = Fore.CYAN
|
19
|
-
LBLUE = Fore.LIGHTBLUE_EX
|
20
|
-
|
21
|
-
|
22
|
-
class ColoredFormatter(logging.Formatter):
|
23
|
-
COLORS = {
|
24
|
-
'DEBUG': Colors.BLUE,
|
25
|
-
'INFO': Colors.GREEN,
|
26
|
-
'WARNING': Colors.YELLOW,
|
27
|
-
'ERROR': Colors.RED,
|
28
|
-
'CRITICAL': Colors.PURPLE,
|
29
|
-
}
|
30
|
-
|
31
|
-
def format(self, record):
|
32
|
-
# Add color to the level name
|
33
|
-
color = self.COLORS.get(record.levelname, Colors.RESET)
|
34
|
-
record.msg = f"{color}{record.msg}{Colors.RESET}"
|
35
|
-
return super().format(record)
|
36
|
-
|
37
|
-
class CSTFormatter(logging.Formatter):
|
38
|
-
def formatTime(self, record, datefmt=None):
|
39
|
-
# Convert UTC time to CST
|
40
|
-
utc_time = datetime.fromtimestamp(record.created, tz=timezone.utc)
|
41
|
-
cst_time = utc_time.astimezone(ZoneInfo("US/Central"))
|
42
|
-
if datefmt:
|
43
|
-
return cst_time.strftime(datefmt)
|
44
|
-
else:
|
45
|
-
return cst_time.isoformat()
|
46
|
-
|
47
|
-
class Logger:
|
48
|
-
def __init__(self, logger_name, log_file='app.log', level=logging.DEBUG, max_bytes=5 * 1024 * 1024, backup_count=3):
|
49
|
-
"""
|
50
|
-
Initialize the logger.
|
51
|
-
|
52
|
-
:param logger_name: Name of the logger.
|
53
|
-
:param log_file: Log file path.
|
54
|
-
:param level: Logging level (default: DEBUG).
|
55
|
-
:param max_bytes: Max size of the log file before rotation (default: 5MB).
|
56
|
-
:param backup_count: Number of backup files to keep (default: 3).
|
57
|
-
"""
|
58
|
-
# Create the logger
|
59
|
-
self.logger = logging.getLogger(logger_name)
|
60
|
-
self.logger.setLevel(level)
|
61
|
-
colors=Colors()
|
62
|
-
|
63
|
-
# Check if handlers are already attached
|
64
|
-
if not self.logger.handlers:
|
65
|
-
# Create a file handler with rotation
|
66
|
-
file_handler = RotatingFileHandler(log_file, maxBytes=max_bytes, backupCount=backup_count)
|
67
|
-
file_formatter = CSTFormatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
|
68
|
-
file_handler.setFormatter(file_formatter)
|
69
|
-
|
70
|
-
# Create a console handler
|
71
|
-
console_handler = logging.StreamHandler()
|
72
|
-
console_formatter = CSTFormatter(f'{colors.RESET}%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
|
73
|
-
console_handler.setFormatter(console_formatter)
|
74
|
-
|
75
|
-
# Add handlers to the logger
|
76
|
-
self.logger.addHandler(file_handler)
|
77
|
-
self.logger.addHandler(console_handler)
|
78
|
-
|
79
|
-
def get_logger(self):
|
80
|
-
"""
|
81
|
-
Return the configured logger.
|
82
|
-
|
83
|
-
:return: Configured logger instance.
|
84
|
-
"""
|
1
|
+
import logging
|
2
|
+
import os
|
3
|
+
from logging.handlers import RotatingFileHandler
|
4
|
+
from datetime import datetime, timezone
|
5
|
+
from zoneinfo import ZoneInfo
|
6
|
+
from colorama import init, Fore, Style
|
7
|
+
|
8
|
+
# Initialize colorama for Windows support
|
9
|
+
init()
|
10
|
+
|
11
|
+
class Colors:
|
12
|
+
RESET = Style.RESET_ALL
|
13
|
+
RED = Fore.RED
|
14
|
+
GREEN = Fore.GREEN
|
15
|
+
YELLOW = Fore.YELLOW
|
16
|
+
BLUE = Fore.BLUE
|
17
|
+
PURPLE = Fore.MAGENTA
|
18
|
+
CYAN = Fore.CYAN
|
19
|
+
LBLUE = Fore.LIGHTBLUE_EX
|
20
|
+
|
21
|
+
|
22
|
+
class ColoredFormatter(logging.Formatter):
|
23
|
+
COLORS = {
|
24
|
+
'DEBUG': Colors.BLUE,
|
25
|
+
'INFO': Colors.GREEN,
|
26
|
+
'WARNING': Colors.YELLOW,
|
27
|
+
'ERROR': Colors.RED,
|
28
|
+
'CRITICAL': Colors.PURPLE,
|
29
|
+
}
|
30
|
+
|
31
|
+
def format(self, record):
|
32
|
+
# Add color to the level name
|
33
|
+
color = self.COLORS.get(record.levelname, Colors.RESET)
|
34
|
+
record.msg = f"{color}{record.msg}{Colors.RESET}"
|
35
|
+
return super().format(record)
|
36
|
+
|
37
|
+
class CSTFormatter(logging.Formatter):
|
38
|
+
def formatTime(self, record, datefmt=None):
|
39
|
+
# Convert UTC time to CST
|
40
|
+
utc_time = datetime.fromtimestamp(record.created, tz=timezone.utc)
|
41
|
+
cst_time = utc_time.astimezone(ZoneInfo("US/Central"))
|
42
|
+
if datefmt:
|
43
|
+
return cst_time.strftime(datefmt)
|
44
|
+
else:
|
45
|
+
return cst_time.isoformat()
|
46
|
+
|
47
|
+
class Logger:
|
48
|
+
def __init__(self, logger_name, log_file='app.log', level=logging.DEBUG, max_bytes=5 * 1024 * 1024, backup_count=3):
|
49
|
+
"""
|
50
|
+
Initialize the logger.
|
51
|
+
|
52
|
+
:param logger_name: Name of the logger.
|
53
|
+
:param log_file: Log file path.
|
54
|
+
:param level: Logging level (default: DEBUG).
|
55
|
+
:param max_bytes: Max size of the log file before rotation (default: 5MB).
|
56
|
+
:param backup_count: Number of backup files to keep (default: 3).
|
57
|
+
"""
|
58
|
+
# Create the logger
|
59
|
+
self.logger = logging.getLogger(logger_name)
|
60
|
+
self.logger.setLevel(level)
|
61
|
+
colors=Colors()
|
62
|
+
|
63
|
+
# Check if handlers are already attached
|
64
|
+
if not self.logger.handlers:
|
65
|
+
# Create a file handler with rotation
|
66
|
+
file_handler = RotatingFileHandler(log_file, maxBytes=max_bytes, backupCount=backup_count)
|
67
|
+
file_formatter = CSTFormatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
|
68
|
+
file_handler.setFormatter(file_formatter)
|
69
|
+
|
70
|
+
# Create a console handler
|
71
|
+
console_handler = logging.StreamHandler()
|
72
|
+
console_formatter = CSTFormatter(f'{colors.RESET}%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
|
73
|
+
console_handler.setFormatter(console_formatter)
|
74
|
+
|
75
|
+
# Add handlers to the logger
|
76
|
+
self.logger.addHandler(file_handler)
|
77
|
+
self.logger.addHandler(console_handler)
|
78
|
+
|
79
|
+
def get_logger(self):
|
80
|
+
"""
|
81
|
+
Return the configured logger.
|
82
|
+
|
83
|
+
:return: Configured logger instance.
|
84
|
+
"""
|
85
85
|
return self.logger
|
@@ -1,36 +1,36 @@
|
|
1
|
-
Metadata-Version: 2.4
|
2
|
-
Name: bitunix_automated_crypto_trading
|
3
|
-
Version: 2.6.
|
4
|
-
Summary: Bitunix Futures Auto Trading Platform
|
5
|
-
Home-page: https://github.com/tcj2001/bitunix-automated-crypto-trading
|
6
|
-
Author: tcj2001
|
7
|
-
Author-email: thomsonmathews@hotmail.com
|
8
|
-
License: MIT
|
9
|
-
Classifier: Programming Language :: Python :: 3
|
10
|
-
Classifier: License :: OSI Approved :: MIT License
|
11
|
-
Classifier: Operating System :: OS Independent
|
12
|
-
Requires-Python: >=3.13
|
13
|
-
Requires-Dist: fastapi
|
14
|
-
Requires-Dist: uvicorn
|
15
|
-
Requires-Dist: fastapi-login
|
16
|
-
Requires-Dist: python-multipart
|
17
|
-
Requires-Dist: jinja2
|
18
|
-
Requires-Dist: python-dotenv
|
19
|
-
Requires-Dist: pydantic
|
20
|
-
Requires-Dist: pydantic-settings
|
21
|
-
Requires-Dist: websockets
|
22
|
-
Requires-Dist: requests
|
23
|
-
Requires-Dist: aiohttp
|
24
|
-
Requires-Dist: pytz
|
25
|
-
Requires-Dist: cryptography
|
26
|
-
Requires-Dist: colorama
|
27
|
-
Requires-Dist: pandas
|
28
|
-
Requires-Dist: numpy
|
29
|
-
Dynamic: author
|
30
|
-
Dynamic: author-email
|
31
|
-
Dynamic: classifier
|
32
|
-
Dynamic: home-page
|
33
|
-
Dynamic: license
|
34
|
-
Dynamic: requires-dist
|
35
|
-
Dynamic: requires-python
|
36
|
-
Dynamic: summary
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: bitunix_automated_crypto_trading
|
3
|
+
Version: 2.6.8
|
4
|
+
Summary: Bitunix Futures Auto Trading Platform
|
5
|
+
Home-page: https://github.com/tcj2001/bitunix-automated-crypto-trading
|
6
|
+
Author: tcj2001
|
7
|
+
Author-email: thomsonmathews@hotmail.com
|
8
|
+
License: MIT
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
10
|
+
Classifier: License :: OSI Approved :: MIT License
|
11
|
+
Classifier: Operating System :: OS Independent
|
12
|
+
Requires-Python: >=3.13
|
13
|
+
Requires-Dist: fastapi
|
14
|
+
Requires-Dist: uvicorn
|
15
|
+
Requires-Dist: fastapi-login
|
16
|
+
Requires-Dist: python-multipart
|
17
|
+
Requires-Dist: jinja2
|
18
|
+
Requires-Dist: python-dotenv
|
19
|
+
Requires-Dist: pydantic
|
20
|
+
Requires-Dist: pydantic-settings
|
21
|
+
Requires-Dist: websockets
|
22
|
+
Requires-Dist: requests
|
23
|
+
Requires-Dist: aiohttp
|
24
|
+
Requires-Dist: pytz
|
25
|
+
Requires-Dist: cryptography
|
26
|
+
Requires-Dist: colorama
|
27
|
+
Requires-Dist: pandas
|
28
|
+
Requires-Dist: numpy
|
29
|
+
Dynamic: author
|
30
|
+
Dynamic: author-email
|
31
|
+
Dynamic: classifier
|
32
|
+
Dynamic: home-page
|
33
|
+
Dynamic: license
|
34
|
+
Dynamic: requires-dist
|
35
|
+
Dynamic: requires-python
|
36
|
+
Dynamic: summary
|
@@ -0,0 +1,17 @@
|
|
1
|
+
bitunix_automated_crypto_trading/AsyncThreadRunner.py,sha256=JDpAUiTZLB9KV4tGPonAvAUJyBqZz2-ehblH6vsunz8,3142
|
2
|
+
bitunix_automated_crypto_trading/BitunixApi.py,sha256=uBB5viKtqN3QTaZWN7ZoRD0ifNLDgg86XrpBiSlVlJE,11343
|
3
|
+
bitunix_automated_crypto_trading/BitunixSignal.py,sha256=oGBT3Gwi_FMFBBsZOGgphpE4PQeaJhkJL-Qs_Fz3WGo,63082
|
4
|
+
bitunix_automated_crypto_trading/BitunixWebSocket.py,sha256=mbuvk8UFWKgv4KLV07TgLgxLVTRJnOKuf02mLB-VoCY,11143
|
5
|
+
bitunix_automated_crypto_trading/DataFrameHtmlRenderer.py,sha256=Pqdzhh_nfIxFEZH9L_R5QXB8moDPbgeTGT_hmBkHWMg,2899
|
6
|
+
bitunix_automated_crypto_trading/NotificationManager.py,sha256=pqDquEe-oujD2v8B543524vo62aRMjfB4YW-3DMhVGQ,795
|
7
|
+
bitunix_automated_crypto_trading/ThreadManager.py,sha256=WmYRQu8aNrgp5HwSqpBqX1WESNSEpbD2CznPFpd9HuI,2330
|
8
|
+
bitunix_automated_crypto_trading/TickerManager.py,sha256=hSA1cpzBPje0Im9wwllDnwMm9yD06riiZMBZpwU-xBw,31254
|
9
|
+
bitunix_automated_crypto_trading/__init__.py,sha256=1hzk6nX8NnUCr1tsq8oFq1qGCNhNwnwldWE75641Eew,78
|
10
|
+
bitunix_automated_crypto_trading/bitunix.py,sha256=ooahU8kEhibVKYbUBdd2yxvTDiXGSvn1ENmepDoqA1g,24671
|
11
|
+
bitunix_automated_crypto_trading/config.py,sha256=4-VeVrEIKfGi8PbAeAXaveX7TiFirbH2SwQKBQO715M,3527
|
12
|
+
bitunix_automated_crypto_trading/logger.py,sha256=FB5g2ZqTUuaIcqrzaUFtp1ZtQi-4STYL_VHLDuv9Ysg,2930
|
13
|
+
bitunix_automated_crypto_trading-2.6.8.dist-info/METADATA,sha256=1cr6AKvH_ZqRTnJl8ZlWl66dGpnLNMkIoqW0Cr5hv9k,996
|
14
|
+
bitunix_automated_crypto_trading-2.6.8.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
15
|
+
bitunix_automated_crypto_trading-2.6.8.dist-info/entry_points.txt,sha256=UXREYHuSl2XYd_tOtLIq0zg3d1kX3lixX5SpN8yGBw4,82
|
16
|
+
bitunix_automated_crypto_trading-2.6.8.dist-info/top_level.txt,sha256=uyFzHUCOsp8elnG2Ovor6xXcf7dxRxY-C-Txiwix64Q,33
|
17
|
+
bitunix_automated_crypto_trading-2.6.8.dist-info/RECORD,,
|
@@ -1,60 +0,0 @@
|
|
1
|
-
AUTOTRADE=True
|
2
|
-
OPTION_MOVING_AVERAGE=1h
|
3
|
-
MAX_AUTO_TRADES=10
|
4
|
-
PROFIT_AMOUNT=0
|
5
|
-
LOSS_AMOUNT=0
|
6
|
-
LEVERAGE=20
|
7
|
-
THRESHOLD=5
|
8
|
-
MIN_VOLUME=10000000
|
9
|
-
ORDER_AMOUNT_PERCENTAGE=5
|
10
|
-
BARS=100
|
11
|
-
MA_FAST=12
|
12
|
-
MA_MEDIUM=26
|
13
|
-
MA_SLOW=50
|
14
|
-
RSI_FAST=6
|
15
|
-
RSI_SLOW=24
|
16
|
-
BBM_PERIOD=20
|
17
|
-
BBM_STD=2
|
18
|
-
MACD_PERIOD=9
|
19
|
-
MACD_SHORT=12
|
20
|
-
MACD_LONG=26
|
21
|
-
ADX_PERIOD=14
|
22
|
-
OPEN_ON_ANY_SIGNAL=True
|
23
|
-
EMA_CHART=True
|
24
|
-
EMA_STUDY=True
|
25
|
-
EMA_CROSSING=True
|
26
|
-
EMA_CHECK_ON_OPEN=True
|
27
|
-
EMA_CHECK_ON_CLOSE=True
|
28
|
-
MACD_CHART=False
|
29
|
-
MACD_STUDY=True
|
30
|
-
MACD_CROSSING=True
|
31
|
-
MACD_CHECK_ON_OPEN=True
|
32
|
-
MACD_CHECK_ON_CLOSE=False
|
33
|
-
BBM_CHART=False
|
34
|
-
BBM_STUDY=True
|
35
|
-
BBM_CROSSING=True
|
36
|
-
BBM_CHECK_ON_OPEN=True
|
37
|
-
BBM_CHECK_ON_CLOSE=False
|
38
|
-
RSI_CHART=False
|
39
|
-
RSI_STUDY=True
|
40
|
-
RSI_CROSSING=True
|
41
|
-
RSI_CHECK_ON_OPEN=True
|
42
|
-
RSI_CHECK_ON_CLOSE=False
|
43
|
-
ADX_STUDY=True
|
44
|
-
ADX_CHECK_ON_OPEN=True
|
45
|
-
ADX_CHECK_ON_CLOSE=False
|
46
|
-
CANDLE_TREND_STUDY=False
|
47
|
-
CANDLE_TREND_CHECK_ON_OPEN=False
|
48
|
-
CANDLE_TREND_CHECK_ON_CLOSE=False
|
49
|
-
SCREEN_REFRESH_INTERVAL=1
|
50
|
-
SIGNAL_CHECK_INTERVAL=30
|
51
|
-
PORTFOLIO_API_INTERVAL=3
|
52
|
-
PENDING_POSITIONS_API_INTERVAL=3
|
53
|
-
PENDING_ORDERS_API_INTERVAL=3
|
54
|
-
TRADE_HISTORY_API_INTERVAL=3
|
55
|
-
POSITION_HISTORY_API_INTERVAL=3
|
56
|
-
TICKER_DATA_API_INTERVAL=120
|
57
|
-
PUBLIC_WEBSOCKET_RESTART_INTERVAL=10800
|
58
|
-
USE_PUBLIC_WEBSOCKET=False
|
59
|
-
VERBOSE_LOGGING=False
|
60
|
-
BENCHMARK=False
|
@@ -1,28 +0,0 @@
|
|
1
|
-
.chart-body {
|
2
|
-
flex: 1;
|
3
|
-
display: flex;
|
4
|
-
flex-direction: column;
|
5
|
-
overflow-y: auto; /* Enable vertical scrolling */
|
6
|
-
height: calc(100vh - 100px); /* Ensure it accounts for header height */
|
7
|
-
box-sizing: border-box; /* Prevent height calculation issues due to padding */
|
8
|
-
}
|
9
|
-
|
10
|
-
.chart-grid {
|
11
|
-
display: grid;
|
12
|
-
grid-template-columns: repeat(2, 1fr);
|
13
|
-
grid-template-rows: repeat(3, 1fr);
|
14
|
-
gap: 10px;
|
15
|
-
height: auto; /* Let the grid adapt naturally */
|
16
|
-
overflow-y: auto; /* Add vertical scrolling for grid */
|
17
|
-
|
18
|
-
}
|
19
|
-
.chart-container {
|
20
|
-
display: flex;
|
21
|
-
align-items: center;
|
22
|
-
justify-content: center;
|
23
|
-
}
|
24
|
-
canvas {
|
25
|
-
width: 100% !important;
|
26
|
-
height: 100% !important;
|
27
|
-
}
|
28
|
-
|