Научете как да създадете бот за получаване на пазарни данни в реално време с помощта на Python и Metatrader 5
Едно от най-значимите предимства на разработването на стратегии за автоматизация на инвестициите е възможността да не се налага да стоите пред екраните на компютрите през цялото време, за да идентифицирате най-добрите възможности на пазара. Мислейки за това, разработих бот за Telegram, който ме информира кои активи са претърпели най-много спадове или върхове през деня, и аз ще ви покажа стъпка по стъпка, за да можете да развиете своите!
В този блог ще се съсредоточим върху разработването на просто приложение, което изпраща заявка до бота на Telegram и връща първите пет и най-долните пет процента възвръщаемост за деня на активите на акциите. Крайният резултат ще бъде като видеото по-долу:
За да разработим вашия бот, ние ще следваме следните стъпки:
- Създаване на вашия бот в Telegram
- Създаване на основните функции в Python
- Събиране на данни от борсата
- Изпращане на информация към бота
Създаване на вашия бот в Telegram
За да създадете своя бот в Telegram, намерете потребителя @BotFather и изпратете командата „/start“. Ще се появи следният екран:
След това изпращаме командата “/newbot” на BotFather. BotFather ще ни помоли да създадем име за нашия робот. Чувствайте се свободни да му дадете каквото име искате. В този случай създадохме така наречения tutobot. След това трябва да създадем потребител за робота и задължително да вмъкнем _bot в края.
След като създаде потребителя, BotFather ще предостави токен, за да можем да изпращаме заявки. Моля, копирайте и поставете този токен за по-късна употреба и го запазете.
Създаване на основните функции на бот в Python
Няма да навлизам в подробности за всеки ред код, създаден за робота. Тази работа вече е извършена величествено от Mauro de Carvalho в неговия пост:
def main(): updater = Updater(token=TELEGRAM_TOKEN) dp = updater.dispatcher dp.add_handler(CommandHandler('altas', altas)) dp.add_handler(CommandHandler('baixas', bop)) updater.start_polling() updater.idle()
Вмъкнете токена, даден от BotFather в променливите.
Тази основна функция прави следното: Изчаква потребителят да изпрати една от изброените команди (/altas, /baixas) и връща резултатите от съответните методи.
Събиране на StockData
За събиране на данни за фондовия пазар ще използваме библиотеката MetaTrader5, както демонстрирах в предишните си публикации.
Ниската функция:
def bop(bot, update): chat_id = update.message.chat_id mt5.initialize() tickers = pd.read_csv('tickers_cheios.csv') tickers['x'] = tickers['x'].astype(str) symbols = tickers['x'] d = pd.DataFrame() s = pd.DataFrame() for i in symbols: rates = mt5.copy_rates_from_pos(i, mt5.TIMEFRAME_D1, 1, 1) d[i] = [y['close'] for y in rates] for i in symbols: rates = mt5.copy_rates_from_pos(i, mt5.TIMEFRAME_M2, 0, 1) s[i] = [y['close'] for y in rates] f = d.append(s) returns = f.pct_change().dropna().transpose() returns['tickets'] = returns.index returns.columns = ['return_pct', 'tickets'] returns['porcentagem'] = returns.return_pct * 100 returns['porcentagem'] = returns['porcentagem'].round(2) returns = returns.sort_values(by=['return_pct']) temp_mais_baixas = returns.head(5) bot.send_message(chat_id=chat_id, text='As ações com maiores baixas de hoje foram:') for i in range(len(temp_mais_baixas)): ticket = temp_mais_baixas['tickets'][i] valor_por = temp_mais_baixas['porcentagem'][i] text = '\U0001F4C9' + " : " + str(ticket) + " : " + str(valor_por) + " %" print(text) bot.send_message(chat_id = chat_id, text = text) mt5.shutdown()
Високата функция
def altas(bot, update): chat_id = update.message.chat_id mt5.initialize() tickers = pd.read_csv('tickers_cheios.csv') tickers['x'] = tickers['x'].astype(str) symbols = tickers['x'] d = pd.DataFrame() s = pd.DataFrame() for i in symbols: rates = mt5.copy_rates_from_pos(i, mt5.TIMEFRAME_D1, 1, 1) d[i] = [y['close'] for y in rates] for i in symbols: rates = mt5.copy_rates_from_pos(i, mt5.TIMEFRAME_M2, 0, 1) s[i] = [y['close'] for y in rates] f = d.append(s) returns = f.pct_change().dropna().transpose() returns['tickets'] = returns.index returns.columns = ['return_pct', 'tickets'] returns['porcentagem'] = returns.return_pct * 100 returns['porcentagem'] = returns['porcentagem'].round(2) returns = returns.sort_values(by=['return_pct']) temp_mais_altas = returns.tail(5) bot.send_message(chat_id=chat_id, text='As ações com maiores altas de hoje foram:') for i in range(len(temp_mais_altas)): ticket = temp_mais_altas['tickets'][i] valor_por = temp_mais_altas['porcentagem'][i] text = '\U0001F4C8' + " : " + str(ticket) + " : " + str(valor_por) + " %" print(text) bot.send_message(chat_id = chat_id, text = text) mt5.shutdown()
Изпращане на данни към бот
Сега всичко, което трябва да направите, е да изпратите командите, които сте конфигурирали, за да имате възвръщаемост в реално време от борсовите котировки! След като софтуерът стартира, ще получите информация в реално време за най-добрите и най-лошите резултати за деня!
Благодаря за четенето! Ще се видим в следващия пост!