documentation WIP

This commit is contained in:
2025-05-18 17:03:59 +03:00
parent ffab00601a
commit 957b411ce1
15 changed files with 531 additions and 160 deletions

View File

@ -12,28 +12,22 @@ from aiogram import Router, F
from aiogram.fsm.state import State, StatesGroup
from aiogram.fsm.storage.memory import MemoryStorage
from logger import generalLogger
from logger import tradingLogger
import bybit
import jsonProcessing
import credentials
import whitelist
import strings
import options
# Входные поля для трейдинг-бота:
# Верхняя граница ордеров
# Нижняя граница ордеров
# Верхняя граница для брейка
# Нижняя граница для брейка
# Количество уровней сетки
# Дельта для тейка
# Дельта для стопа
# Размер позиции на каждом уровне
async def set_commands():
commands = [BotCommand(command='start', description='Старт'),
BotCommand(command='help', description='Инструкция'),
BotCommand(command='info', description='Статус'),
BotCommand(command='strategy', description='Запустить стратегию'),
BotCommand(command='stop', description='Остановить стратегию')
]
@ -60,88 +54,101 @@ stop_router = Router()
@dp.message(Command("start"))
async def commandStart(message: Message) -> None:
print("Called function commandStart")
# print(whitelist.chatIDs)
# id = message.from_user.id
# print('Got message from', id, ' with type ', type(id))
await message.answer(strings.startCommand)
@dp.message(Command("help"))
@dp.message(Command("help"), F.chat.id.in_(whitelist.chatIDs))
async def commandHelp(message: Message) -> None:
print("Called function commandHelp")
await message.answer(strings.helpCommand)
@dp.message(Command("info"), F.chat.id.in_(whitelist.chatIDs))
async def commandInfo(message: Message) -> None:
data = await jsonProcessing.loadJson()
msgText = strings.foundData
if data == {}:
msgText = strings.noData
else:
msgText = strings.foundData
for i in data:
msgText += (f"<b>{str(i)}</b>: P&L - x%\n")
await message.answer(msgText)
@strategy_router.message(Command("strategy"))
@strategy_router.message(Command("strategy"), F.chat.id.in_(whitelist.chatIDs))
async def commandStrategy(message: Message, state: FSMContext):
print("Called function commandStrategy")
await message.answer(strings.strategyCommand + '\n' + strings.askPair)
await state.set_state(startForm.pair)
@strategy_router.message(F.text, startForm.pair)
async def capture_start_pair(message: Message, state: FSMContext):
print("Called function capture_start_pair")
await state.update_data(pair=message.text)
data = await state.get_data()
t = 0
if await jsonProcessing.checkPair(data.get("pair")) == 1:
msg_text = (f'Стратегия на паре <b>{data.get("pair")}</b> уже запущена.\nПожалуйста остановите стратегию либо введите другую пару.')
msgText = (f'Стратегия на паре <b>{data.get("pair")}</b> уже запущена.\nПожалуйста остановите стратегию либо введите другую пару.')
t = 1
else:
msg_text = strings.askParams
msgText = strings.askParams
await message.answer(msg_text)
await message.answer(msgText)
if t == 1:
print('Clearing state!')
await state.clear()
else:
await state.set_state(startForm.params)
@strategy_router.message(F.text, startForm.params)
async def capture_params(message: Message, state: FSMContext):
print("Called function capture_params")
await state.update_data(params=message.text)
data = await state.get_data()
t = await jsonProcessing.savePairParams(pair=data.get("pair"), params=data.get("params"))
if t == 0:
client = await bybit.getClient(credentials.api_key, credentials.api_secret, options.testnet)
client = await bybit.getClient(
credentials.api_key,
credentials.api_secret,
options.testnet,
options.demoTrading
)
if client == -1:
msg_text = (f'Аутентификация не удалась, сообщите администратору если увидете данное сообщение.')
msgText = strings.authFailed
await jsonProcessing.deletePair(pair=data.get("pair"))
else:
asyncio.create_task(bybit.socketStrategy(data.get("pair"), data.get("params")))
msg_text = (f'Вы запустили стратегию на паре <b>{data.get("pair")}</b> с данными параметрами:\n<b>{data.get("params")}</b>\n')
try:
asyncio.create_task(bybit.strategy(data.get("pair"), data.get("params")))
msgText = (f'Вы запустили стратегию на паре <b>{data.get("pair")}</b> с данными параметрами:\n<b>{data.get("params")}</b>\n')
except:
await jsonProcessing.deletePair(pair=data.get("pair"))
msgText = (f'Возникла ошибка в работе стратегии =( Пожалуйста сообщите об этом администратору.')
elif t == -1:
msg_text = (f'Параметры введены в неверном формате, пожалуйста начните заново.')
msgText = (f'Параметры введены в неверном формате, пожалуйста начните заново.')
elif t == -2:
msg_text = (f'Стратегия на паре <b>{data.get("pair")}</b> уже запущена.')
msgText = (f'Стратегия на паре <b>{data.get("pair")}</b> уже запущена.')
else:
msg_text = (f'Возникла непредвиденная ошибка. =(')
await message.answer(msg_text)
msgText = (f'Возникла непредвиденная ошибка. =(')
await message.answer(msgText)
await state.clear()
@stop_router.message(Command("stop"))
@stop_router.message(Command("stop"), F.chat.id.in_(whitelist.chatIDs))
async def commandStop(message: Message, state: FSMContext):
print("Called function commandStop")
await message.answer(strings.stopCommand + '\n' + strings.askPair)
await state.set_state(stopForm.pair)
@stop_router.message(F.text, stopForm.pair)
async def capture_stop_pair(message: Message, state: FSMContext):
print("Called function capture_stop_pair")
await state.update_data(pair=message.text)
data = await state.get_data()
if await jsonProcessing.checkPair(data.get("pair")) == 1:
t = await jsonProcessing.deletePair(data.get("pair"))
if t == 0:
print('Deleted pair succesfuly')
else:
print('Error with deleting pair')
msg_text = strings.stopStrategy
t = await jsonProcessing.deletePair(data.get("pair"))
if t == 0:
msgText = strings.stopStrategy
else:
msg_text = strings.pairNotFound
msgText = strings.pairNotFound
await message.answer(msg_text)
await message.answer(msgText)
await state.clear()
@ -158,5 +165,7 @@ async def main() -> None:
# Main
if __name__ == "__main__":
print('Started bot!')
generalLogger.info("Started bot!")
tradingLogger.info("Started bot!")
jsonProcessing.startUp()
asyncio.run(main())