forked from kodorvan/stcs
142 lines
5.0 KiB
Python
142 lines
5.0 KiB
Python
import logging
|
|
logger = logging.getLogger(__name__)
|
|
|
|
from sqlalchemy import BigInteger, Boolean, Integer, String, ForeignKey
|
|
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
|
|
from sqlalchemy.ext.asyncio import AsyncAttrs, async_sessionmaker, create_async_engine
|
|
|
|
from sqlalchemy import select, insert
|
|
|
|
engine = create_async_engine(url='sqlite+aiosqlite:///db.sqlite3')
|
|
|
|
async_session = async_sessionmaker(engine)
|
|
|
|
class Base(AsyncAttrs, DeclarativeBase):
|
|
pass
|
|
|
|
class User_Telegram_Id(Base):
|
|
__tablename__ = 'user_telegram_id'
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
|
|
tg_id = mapped_column(BigInteger)
|
|
|
|
class User_Bybit_API(Base):
|
|
__tablename__ = 'user_bybit_api'
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
|
|
tg_id = mapped_column(ForeignKey("user_telegram_id.tg_id"))
|
|
|
|
api_key = mapped_column(String(18), default='None')
|
|
secret_key = mapped_column(String(36), default='None')
|
|
|
|
class User_Symbol(Base):
|
|
__tablename__ = 'user_symbols'
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
|
|
tg_id = mapped_column(ForeignKey("user_telegram_id.tg_id"))
|
|
|
|
symbol = mapped_column(String(18), default='PENGUUSDT')
|
|
|
|
class Trading_Mode(Base):
|
|
__tablename__ = 'trading_modes'
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
|
|
mode = mapped_column(String(10), unique=True)
|
|
|
|
class Margin_type(Base):
|
|
__tablename__ = 'margin_types'
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
|
|
type = mapped_column(String(15), unique=True)
|
|
|
|
class Trigger(Base):
|
|
__tablename__ = 'triggers'
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
|
|
trigger = mapped_column(String(15), unique=True)
|
|
|
|
class User_Main_Settings(Base):
|
|
__tablename__ = 'user_main_settings'
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
|
|
tg_id = mapped_column(ForeignKey("user_telegram_id.tg_id"))
|
|
|
|
trading_mode = mapped_column(ForeignKey("trading_modes.mode"))
|
|
margin_type = mapped_column(ForeignKey("margin_types.type"))
|
|
size_leverage = mapped_column(Integer(), default=1)
|
|
starting_quantity = mapped_column(Integer(), default=1)
|
|
martingale_factor = mapped_column(Integer(), default=1)
|
|
maximal_quantity = mapped_column(Integer(), default=10)
|
|
entry_order_type = mapped_column(String(10), default='Market')
|
|
|
|
|
|
class User_Risk_Management_Settings(Base):
|
|
__tablename__ = 'user_risk_management_settings'
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
|
|
tg_id = mapped_column(ForeignKey("user_telegram_id.tg_id"))
|
|
|
|
price_profit = mapped_column(Integer(), default=1)
|
|
price_loss = mapped_column(Integer(), default=1)
|
|
max_risk_deal = mapped_column(Integer(), default=100)
|
|
commission_fee = mapped_column(Integer(), default=0)
|
|
|
|
class User_Condition_Settings(Base):
|
|
__tablename__ = 'user_condition_settings'
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
|
|
tg_id = mapped_column(ForeignKey("user_telegram_id.tg_id"))
|
|
|
|
trigger = mapped_column(ForeignKey("triggers.trigger"))
|
|
filter_time = mapped_column(String(25), default='???')
|
|
filter_volatility = mapped_column(Boolean, default=False)
|
|
external_cues = mapped_column(Boolean, default=False)
|
|
tradingview_cues = mapped_column(Boolean, default=False)
|
|
webhook = mapped_column(String(40), default='')
|
|
ai_analytics = mapped_column(Boolean, default=False)
|
|
|
|
class User_Additional_Settings(Base):
|
|
__tablename__ = 'user_additional_settings'
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
|
|
tg_id = mapped_column(ForeignKey("user_telegram_id.tg_id"))
|
|
|
|
pattern_save = mapped_column(Boolean, default=False)
|
|
autostart = mapped_column(Boolean, default=False)
|
|
notifications = mapped_column(Boolean, default=False)
|
|
|
|
async def async_main():
|
|
async with engine.begin() as conn:
|
|
await conn.run_sync(Base.metadata.create_all)
|
|
|
|
# Заполнение таблиц
|
|
modes = ['Long', 'Short', 'Switch', 'Smart']
|
|
for mode in modes:
|
|
result = await conn.execute(select(Trading_Mode).where(Trading_Mode.mode == mode))
|
|
if not result.first():
|
|
logger.info("Заполение таблицы режима торговли")
|
|
await conn.execute(Trading_Mode.__table__.insert().values(mode=mode))
|
|
|
|
types = ['Isolated', 'Cross']
|
|
for type in types:
|
|
result = await conn.execute(select(Margin_type).where(Margin_type.type == type))
|
|
if not result.first():
|
|
logger.info("Заполение таблицы типов маржи")
|
|
await conn.execute(Margin_type.__table__.insert().values(type=type))
|
|
|
|
triggers = ['Ручной', 'Автоматический', 'TradingView']
|
|
for trigger in triggers:
|
|
result = await conn.execute(select(Trigger).where(Trigger.trigger == trigger))
|
|
if not result.first():
|
|
logger.info("Заполение таблицы триггеров")
|
|
await conn.execute(Trigger.__table__.insert().values(trigger=trigger)) |