diff --git a/src/arbus.py b/src/arbus.py index eaa16bd..e45247e 100644 --- a/src/arbus.py +++ b/src/arbus.py @@ -1,78 +1,19 @@ -import json - import options +from random import randint + +async def getLevels(amount, highPrice, lowPrice, roundDecimals): + # Returns array of prices from low to high for each level + levels = [] + delta = (highPrice - lowPrice)/amount + + levelPrice = lowPrice + for i in range(amount - 1): + levels.append(levelPrice) + levelPrice = round(levelPrice + delta, 2) + levels.append(highPrice) + return levels -async def parseParams(params): - paramsList = params.split() - paramsDict = {} - for i in range(len(options.paramsLines)): - paramsDict[options.paramsLines[i]] = paramsList[i] - return paramsDict - -async def toDictPairParams(pair: str, params): - paramsList = params.split() - - if len(paramsList) != len(options.paramsLines): - return -1 - - paramsDict = {pair: {}} - for i in range(len(options.paramsLines)): - paramsDict[pair][options.paramsLines[i]] = paramsList[i] - return paramsDict - -async def checkPair(pair: str): - currentData = {} - try: - with open('data.json', 'r') as f: - currentData = json.load(f) - except json.decoder.JSONDecodeError as e: - print('WARNING: JSON file is empty! Ignore if your installation is fresh.') - - if pair in currentData: - print(pair, ' exists in data file.') - return 1 - else: - print(pair, ' not found in data file.') - return 0 - -async def deletePair(pair: str): - currentData = {} - try: - with open('data.json', 'r') as f: - currentData = json.load(f) - except json.decoder.JSONDecodeError as e: - print('WARNING: JSON file is empty! Ignore if your installation is fresh.') - - if pair in currentData: - print(pair, ' exists in data file.') - del currentData[pair] - with open('data.json', 'w', encoding = 'utf-8') as f: - json.dump(currentData, f, ensure_ascii = False, indent = 4) - return 0 - else: - print(pair, ' not found in data file.') - return -1 - -async def mainWrapper(pair: str, params): - newData = await toDictPairParams(pair, params) - - if newData == -1: - return -1 - - currentData = {} - try: - with open('data.json', 'r') as f: - currentData = json.load(f) - except json.decoder.JSONDecodeError as e: - print('WARNING: JSON file is empty! Ignore if your installation is fresh.') - - if pair in currentData: - print(pair, ' already exists.') - return -2 - else: - with open('data.json', 'w', encoding = 'utf-8') as f: - currentData.update(newData) - json.dump(currentData, f, ensure_ascii = False, indent = 4) - print(pair, ' was added!') - return 0 +def getArbus(): + # Returnes n arbus (n is random 1 byte positive number) + return ("arbus"*randint(0, 255)) diff --git a/src/bybit.py b/src/bybit.py index 1850452..8a86b7d 100644 --- a/src/bybit.py +++ b/src/bybit.py @@ -7,7 +7,7 @@ from pybit.unified_trading import WebSocket import options import credentials -import arbus +import jsonProcessing async def getClient(apiKey, apiSecret, testnet): @@ -54,7 +54,7 @@ async def socketStrategy(pair: str, params): # 'stopDelta', # 'orderSize' - paramsDict = await arbus.parseParams(params) + paramsDict = await jsonProcessing.parseParams(params) ws = WebSocket( testnet = options.testnet, @@ -79,9 +79,9 @@ async def socketStrategy(pair: str, params): ) i = 0 - t = await arbus.checkPair(pair) + t = await jsonProcessing.checkPair(pair) while t: - t = await arbus.checkPair(pair) + t = await jsonProcessing.checkPair(pair) if t != 1: # ws.exit() # ws_private.exit() @@ -97,12 +97,12 @@ async def socketStrategy(pair: str, params): async def strategy(client: HTTP, pair: str, params): startTime = time.time() print('Starting strategy with ', pair) - paramsDict = await arbus.parseParams(params) + paramsDict = await jsonProcessing.parseParams(params) i = 0 - t = await arbus.checkPair(pair) + t = await jsonProcessing.checkPair(pair) while t: - t = await arbus.checkPair(pair) + t = await jsonProcessing.checkPair(pair) if t != 1: break diff --git a/src/jsonProcessing.py b/src/jsonProcessing.py new file mode 100644 index 0000000..1dc848c --- /dev/null +++ b/src/jsonProcessing.py @@ -0,0 +1,84 @@ +import json + +import options + + +async def parseParams(params): + # Returnes dictionary of params as paramsLines in options + paramsList = params.split() + paramsDict = {} + for i in range(len(options.paramsLines)): + paramsDict[options.paramsLines[i]] = paramsList[i] + return paramsDict + +async def toDictPairParams(pair: str, params): + # Returnes dictionary as pair:internal(params) + paramsList = params.split() + + if len(paramsList) != len(options.paramsLines): + return -1 + + paramsDict = {pair: {}} + for i in range(len(options.paramsLines)): + paramsDict[pair][options.paramsLines[i]] = paramsList[i] + return paramsDict + +async def checkPair(pair: str): + # Returnes 1 if pair exists and 0 if not + currentData = {} + try: + with open('data.json', 'r') as f: + currentData = json.load(f) + except json.decoder.JSONDecodeError as e: + print('WARNING: JSON file is empty! Ignore if your installation is fresh.') + + if pair in currentData: + # print(pair, ' exists in data file.') + return 1 + else: + # print(pair, ' not found in data file.') + return 0 + +async def deletePair(pair: str): + # Returnes 0 if deleted successfully and -1 if not + currentData = {} + try: + with open('data.json', 'r') as f: + currentData = json.load(f) + except json.decoder.JSONDecodeError as e: + print('WARNING: JSON file is empty! Ignore if your installation is fresh.') + + if pair in currentData: + # print(pair, ' exists in data file.') + del currentData[pair] + with open('data.json', 'w', encoding = 'utf-8') as f: + json.dump(currentData, f, ensure_ascii = False, indent = 4) + return 0 + else: + # print(pair, ' not found in data file.') + return -1 + +async def savePairParams(pair: str, params): + # Saves or updates data in JSON + # Fix no file or empty file + newData = await toDictPairParams(pair, params) + + if newData == -1: + return -1 + + currentData = {} + try: + with open('data.json', 'r') as f: + currentData = json.load(f) + except json.decoder.JSONDecodeError as e: + print('WARNING: JSON file is empty! Ignore if your installation is fresh.') + + if pair in currentData: + print(pair, ' already exists.') + return -2 + else: + with open('data.json', 'w', encoding = 'utf-8') as f: + currentData.update(newData) + json.dump(currentData, f, ensure_ascii = False, indent = 4) + print(pair, ' was added!') + return 0 diff --git a/src/main.py b/src/main.py index 037d28d..81b129d 100644 --- a/src/main.py +++ b/src/main.py @@ -13,7 +13,7 @@ from aiogram.fsm.state import State, StatesGroup from aiogram.fsm.storage.memory import MemoryStorage import bybit -import arbus +import jsonProcessing import credentials import strings @@ -82,7 +82,7 @@ async def capture_start_pair(message: Message, state: FSMContext): data = await state.get_data() t = 0 - if await arbus.checkPair(data.get("pair")) == 1: + if await jsonProcessing.checkPair(data.get("pair")) == 1: msg_text = (f'Стратегия на паре {data.get("pair")} уже запущена.\nПожалуйста остановите стратегию либо введите другую пару.') t = 1 else: @@ -101,14 +101,13 @@ async def capture_params(message: Message, state: FSMContext): await state.update_data(params=message.text) data = await state.get_data() - t = await arbus.mainWrapper(pair=data.get("pair"), params=data.get("params")) + 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) if client == -1: msg_text = (f'Аутентификация не удалась, сообщите администратору если увидете данное сообщение.') else: asyncio.create_task(bybit.socketStrategy(data.get("pair"), data.get("params"))) - # asyncio.create_task(bybit.strategy(client, data.get("pair"), data.get("params"))) msg_text = (f'Вы запустили стратегию на паре {data.get("pair")} с данными параметрами:\n{data.get("params")}\n') elif t == -1: msg_text = (f'Параметры введены в неверном формате, пожалуйста начните заново.') @@ -132,8 +131,8 @@ async def capture_stop_pair(message: Message, state: FSMContext): await state.update_data(pair=message.text) data = await state.get_data() - if await arbus.checkPair(data.get("pair")) == 1: - t = await arbus.deletePair(data.get("pair")) + if await jsonProcessing.checkPair(data.get("pair")) == 1: + t = await jsonProcessing.deletePair(data.get("pair")) if t == 0: print('Deleted pair succesfuly') else: