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'Вы запускаете стратегию на паре {data.get("pair")} с данными параметрами\n{data.get("params")}\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())