132 lines
3.8 KiB
Python
132 lines
3.8 KiB
Python
import time
|
||
import asyncio
|
||
|
||
from aiogram import Bot, Dispatcher
|
||
from aiogram.filters import Command
|
||
from aiogram.types import Message
|
||
from aiogram.client.default import DefaultBotProperties
|
||
from aiogram.enums import ParseMode
|
||
|
||
from aiogram.fsm.context import FSMContext
|
||
from aiogram import Router, F
|
||
from aiogram.fsm.state import State, StatesGroup
|
||
from aiogram.fsm.storage.memory import MemoryStorage
|
||
from aiogram.utils.chat_action import ChatActionSender
|
||
|
||
import credentials
|
||
import options
|
||
import strings
|
||
|
||
|
||
# Custom types and vars
|
||
|
||
paramsLines = ['highEnd',
|
||
'lowEnd',
|
||
'highBreak',
|
||
'lowBreak',
|
||
'netLevelsAmount',
|
||
'netStep',
|
||
'takeDelta',
|
||
'stopDelta',
|
||
'orderSize'
|
||
]
|
||
|
||
|
||
# Custom
|
||
|
||
async def parseParams(params: str):
|
||
paramsList = params.split()
|
||
paramsDict = {}
|
||
for i in range(len(paramsLines)):
|
||
paramsDict(paramsLines[i]) = paramsList[i]
|
||
return paramsDict
|
||
|
||
|
||
# Bybit
|
||
|
||
async def strategy(pair, params):
|
||
print(params)
|
||
await time.sleep(5)
|
||
print('Test succes')
|
||
result = pair + '\n' + params
|
||
return result
|
||
|
||
|
||
# Telegram
|
||
|
||
# Входные поля для трейдинг-бота:
|
||
# Верхняя граница ордеров
|
||
# Нижняя граница ордеров
|
||
# Верхняя граница для брейка
|
||
# Нижняя граница для брейка
|
||
# Количество уровней сетки
|
||
# Шаг сетки
|
||
# Дельта для тейка
|
||
# Дельта для стопа
|
||
# Размер позиции на каждом уровне
|
||
|
||
class Form(StatesGroup):
|
||
pair = State()
|
||
params = State()
|
||
|
||
|
||
dp = Dispatcher(storage=MemoryStorage())
|
||
bot = Bot(
|
||
token=credentials.bot_token,
|
||
default=DefaultBotProperties(parse_mode=ParseMode.HTML),
|
||
)
|
||
strategy_router = Router()
|
||
|
||
|
||
@dp.message(Command("start"))
|
||
async def commandStart(message: Message) -> None:
|
||
await message.answer(strings.startCommand)
|
||
|
||
@dp.message(Command("help"))
|
||
async def commandHelp(message: Message) -> None:
|
||
await message.answer(strings.helpCommand)
|
||
|
||
|
||
@strategy_router.message(Command("strategy"))
|
||
async def commandStrategy(message: Message, state: FSMContext):
|
||
print("F command strategy + capture pair")
|
||
async with ChatActionSender.typing(bot=bot, chat_id=message.chat.id):
|
||
await asyncio.sleep(1)
|
||
await message.answer(strings.strategyCommand + '\n' + strings.askPair)
|
||
await state.set_state(Form.pair)
|
||
|
||
@strategy_router.message(F.text, Form.pair)
|
||
async def capture_pair(message: Message, state: FSMContext):
|
||
print("F capture pair + capture params")
|
||
await state.update_data(pair=message.text)
|
||
async with ChatActionSender.typing(bot=bot, chat_id=message.chat.id):
|
||
await asyncio.sleep(1)
|
||
await message.answer(strings.askParams)
|
||
await state.set_state(Form.params)
|
||
|
||
@strategy_router.message(F.text, Form.params)
|
||
async def capture_params(message: Message, state: FSMContext):
|
||
print("F capture params + end")
|
||
await state.update_data(params=message.text)
|
||
|
||
data = await state.get_data()
|
||
t = await strategy(pair=data.get("pair"), params=data.get("params"))
|
||
msg_text = (f'Вы запускаете стратегию на паре <b>{data.get("pair")}</b> с данными параметрами\n<b>{data.get("params")}</b>\n')
|
||
await message.answer(msg_text)
|
||
await state.clear()
|
||
|
||
@dp.message(Command("stop"))
|
||
async def commandStop(message: Message) -> None:
|
||
await message.answer(strings.stopCommand + '\n' + strings.stopStrategy)
|
||
|
||
|
||
# Main
|
||
|
||
async def main() -> None:
|
||
dp.include_router(strategy_router)
|
||
await dp.start_polling(bot)
|
||
|
||
if __name__ == "__main__":
|
||
print('Started bot!')
|
||
asyncio.run(main())
|