Научете как да създадете бот за получаване на пазарни данни в реално време с помощта на Python и Metatrader 5

Едно от най-значимите предимства на разработването на стратегии за автоматизация на инвестициите е възможността да не се налага да стоите пред екраните на компютрите през цялото време, за да идентифицирате най-добрите възможности на пазара. Мислейки за това, разработих бот за Telegram, който ме информира кои активи са претърпели най-много спадове или върхове през деня, и аз ще ви покажа стъпка по стъпка, за да можете да развиете своите!

В този блог ще се съсредоточим върху разработването на просто приложение, което изпраща заявка до бота на Telegram и връща първите пет и най-долните пет процента възвръщаемост за деня на активите на акциите. Крайният резултат ще бъде като видеото по-долу:

За да разработим вашия бот, ние ще следваме следните стъпки:

  1. Създаване на вашия бот в Telegram
  2. Създаване на основните функции в Python
  3. Събиране на данни от борсата
  4. Изпращане на информация към бота


Създаване на вашия бот в 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()

Изпращане на данни към бот

Сега всичко, което трябва да направите, е да изпратите командите, които сте конфигурирали, за да имате възвръщаемост в реално време от борсовите котировки! След като софтуерът стартира, ще получите информация в реално време за най-добрите и най-лошите резултати за деня!

Благодаря за четенето! Ще се видим в следващия пост!

Получете достъп до експертен изглед — Абонирайте се за DDI Intel