Будем делать заказы или что? Действительно!
В этой статье мы рассмотрим процесс отправки заказа в Alpaca с помощью его API и как проверить, правильно ли он размещен.

Ордера на покупку/продажу, лимитные/рыночные ордера, длинные/короткие позиции… Торговые концепции иногда могут быть ошеломляющими, я вам это скажу. Вот почему мы собираемся покрыть только ордер на ПОКУПКУ (так же, как и длинная позиция), чтобы упростить его. Если вы хотите изучить другие интересные способы размещения ордеров, посетите учебный курс для торговых ботов.

Пошаговый процесс

В предыдущем посте мы рассчитали несколько EMA в качестве индикаторов.

import alpaca_trade_api as tradeapi
import tulipy as ti
# My credentials
API_KEY = <your-API_KEY> 
API_SECRET_KEY = <your-API_SECRET_KEY>
ALPACA_API_URL = 'https://paper-api.alpaca.markets'
# Connect to my Alpaca account
api = tradeapi.REST(API_KEY, API_SECRET_KEY, ALPACA_API_URL, api_version='v2')
# Pull data 
barset = api.get_barset('AAPL', '15Min', limit=100)
# Extract 'close' values and convert them to numpy array
close_vals = barset['close'].to_numpy()
# Calculate multiple EMAs
ema_short = ti.ema(close_vals, 9)[-1]
ema_medium = ti.ema(close_vals, 55)[-1]
ema_long = ti.ema(close_vals, 150)[-1]
print(ema_short, ema_medium, ema_long)

Теперь нам нужно придумать стратегию, которая их использует. Эта стратегия состоит в покупке при выполнении следующего условия:

EMA короткая › EMA средняя › EMA длинная

Который в коде будет примерно таким:

if (ema_short > ema_medium) and (ema_medium > ema_long):
   # Place order
else:
   print('You'd better not enter for now...')

БОНУС! Загляните на наш YouTube канал, если предпочитаете визуальный контент.

Теперь реализуем функционал для оформления заказа через Alpaca API. Не забудьте дважды проверить, используете ли вы бумажный торговый счет, чтобы убедиться, что вы не используете настоящие деньги. Из документов Alpaca API мы видим синтаксис для размещения заказа:

Здесь вы видите функцию submit_order, она имеет несколько параметров:
- символ: акции, с которыми вы хотите работать
- количество: количество акций, которые вы хотите купить/продать
- сторона: 'купить' или 'продать'
- тип: 'рынок' означает покупку или продажу по лучшей рыночной цене в данный момент. Или «лимит», означающий покупку или продажу по указанной цене.
- time_in_force: «gtc» действует до отмены.

В коде эта функция будет находиться внутри if оператора, чтобы разместить заказ при выполнении условия.

Полный код:

import alpaca_trade_api as tradeapi
import tulipy as ti
# My credentials
API_KEY = <your-API_KEY> 
API_SECRET_KEY = <your-API_SECRET_KEY>
ALPACA_API_URL = 'https://paper-api.alpaca.markets'
# Connect to my Alpaca account
api = tradeapi.REST(API_KEY, API_SECRET_KEY, ALPACA_API_URL, api_version='v2')
# Pull data 
barset = api.get_barset('AAPL', '15Min', limit=100)
# Extract 'close' values and convert them to numpy array
close_vals = barset['close'].to_numpy()
# Calculate multiple EMAs
ema_short = ti.ema(close_vals, 9)[-1]
ema_medium = ti.ema(close_vals, 55)[-1]
ema_long = ti.ema(close_vals, 150)[-1]
# Trading strategy
if (ema_short > ema_medium) and (ema_medium > ema_long):
   print('Entering position...!')
   api.submit_order(
      symbol=''AAPL',
      qty=1,
      side='buy',
      type='market',
      time_in_force='gtc'
   )  
else:
   print("You'd better not enter for now...")

Как мы узнаем, что заказ был отправлен? Мы можем проверить это в Альпаке. Перейдите на панель инструментов и проверьте обзор заказов, вы должны увидеть заказ:

Резюме и следующие шаги

Краткий обзор, к настоящему моменту мы можем:
- Построить базовую торговую стратегию
- Выполнить ордер, как только будет выполнено определенное условие (стратегия).
- Убедитесь, что заказ был отправлен

В следующем посте мы создадим цикл, необходимый для работы бота в фоновом режиме.

Этот контент объясняется более подробно здесь: https://www.tradingbotbootcamp.com

Получите скидку 20% на курс с этим купоном: TRADINGBOT20

Удачной торговли!