Из всех торговых API API TD Ameritrade является одним из лучших, но с ним может быть довольно сложно начать работать, особенно если у вас нет большого опыта работы с API (чтобы узнать больше о самом API, ознакомьтесь с документацией ) до этого в этом руководстве вы узнаете, как начать работу с API, автоматически сбрасывать токены API и многое другое с помощью Node.js и Heroku.

Настройка всего

Во-первых, вам нужно создать учетную запись разработчика. Чтобы создать учетную запись разработчика, перейдите на сайт TDA API и зарегистрируйте новую учетную запись. Затем подтвердите свою учетную запись и создайте пароль.

Прежде чем создавать приложение в TDA, вам потребуется развертывание Heroku, которое будет использоваться в качестве URL-адреса обратного вызова для приложения для его автоматической аутентификации. Итак, зайдите на Heroku, авторизуйтесь или зарегистрируйтесь и создайте новое приложение.

Теперь перейдите в раздел Мои приложения на TDA и создайте приложение со следующими данными:

  • Название и описание приложения: ANYTHING
  • URL-адрес обратного вызова: https://<YOUR-HEROKU-APP-NAME>.herokuapp.com/auth

Получение токенов API

Теперь, когда вы настроили TDA и Heroku, следующая задача — получить токены доступа и обновления. Сначала создайте частный репозиторий GitHub, клонируйте его на свой компьютер, создайте файл с именем app.js и запустите npm init. Далее нам нужны Экспресс и Запрос, которые мы получаем, выполнив команды:

npm i express --save
npm i request --save

Затем скопируйте следующий код в app.js. Этот код автоматически делает почтовый запрос для получения токенов из TDA.

Затем вам нужно сохранить свой идентификатор клиента TDA (ключ потребителя, который находится в разделе «Ключи» вашего приложения TDA) в переменных конфигурации Heroku (находится в разделе настроек вашего приложения Heroku).

Теперь, чтобы проверить, все ли работает до сих пор, разверните свой код в Heroku через интеграцию с GitHub, а затем введите следующий URL-адрес с вашими данными в браузере.

https://auth.tdameritrade.com/auth?response_type=code&redirect_uri={URLENCODED CALLBACK URL}&client_id={URLENCODED Consumer Key}%40AMER.OAUTHAP

Обычно это не работает поначалу, и вам может потребоваться некоторое время, чтобы этот URL заработал. Если это по-прежнему не работает, проверьте правильность URL-адреса обратного вызова, идентификатора клиента и URL-адреса обратного вызова в разделе сведений о приложении TDA. Если это работает, вы должны увидеть экран входа в систему. После входа в систему с данными вашего торгового счета вы должны увидеть свои токены доступа и обновления.

Полная автоматизация процесса входа

Теперь, как мы можем сделать этот процесс входа в систему полностьюавтоматическим без необходимости вводить свои данные для входа? Мы используем Puppeteer, безголовый браузер Node.js, который позволяет автоматизировать многие действия, которые вы можете делать в браузере. Запустите команду npm i puppeteer и введите строку const puppeteer = require('puppeteer'); в верхней части app.js, чтобы использовать ее. Вам также необходимо добавить пакет сборки Puppeteer, который вы можете добавить, перейдя в раздел сборки в настройках Heroku, а затем введите эту ссылку. Затем сохраните имя пользователя и пароль для своего торгового счета в переменных конфигурации Heroku. Теперь нам нужно создать функцию, которая будет заполнять форму входа.

Чтобы протестировать функцию, скопируйте приведенный ниже код, чтобы создать новую конечную точку, разверните свои изменения, затем перейдите по URL-адресу своего приложения Heroku с «/ reset» в конце, и в конечном итоге вы должны увидеть отображаемые токены.

app.get('/reset', (req, res) => {
   resetTokens().then(function(result) { 
      res.send(result);
   }, function(err) {
      res.send(err);
   });
});

Хранение/сброс токенов

Теперь приложению необходимо хранить токены, чтобы использовать их (ради этого руководства я просто собираюсь использовать файл JSON для хранения информации, но если бы вы действительно развернули что-то подобное, это было бы лучше использовать базу данных и зашифровать информацию). Теперь создайте файл JSON с именем details.json со следующими данными.

{
"access_token": "",
"refresh_token": "",
"access_last_update": "",
"refresh_last_update": ""
}

И добавьте следующий код в начало app.js.

const detailsFileName = './details.json';
var details = require(detailsFileName);

Затем добавьте этот фрагмент в функцию resetTokens, которая сохраняет токены в файл.

Наконец, добавьте эту новую функцию с именем resetAccessToken, которая использует токен обновления для сброса токена доступа.

Теперь вам нужны еще две функции, прежде чем вы сможете начать выполнять вызовы API полностью автоматически. Первая — это простая функция, которая вычисляет разницу во времени между двумя датами. Следующая функция проверяет, истек ли срок действия токенов, и если да, то сбрасывает их.

Ваш файл app.js теперь должен выглядеть примерно так.

Выполнение вызовов API

Теперь у вас есть все необходимое, чтобы начать совершать вызовы API и реализовывать торговые алгоритмы, хранить рыночные данные или почти все, что может делать API. Например, если вы хотите хранить рыночные данные по акциям каждую минуту, ваш метод может выглядеть примерно так:

// Every 60 seconds, do
 // Validate tokens
 // Make an API request for market data for a certain ticker
 // Store the response in a database

Спасибо за чтение!