目的
- できる限り簡単にシステムトレードを行いたい
- できる限り安くシステムトレードを行いたい
GMOコインのAPIを使用して発注する、APIKey等は事前に用意が必要です。
技術選定
【TradingView】
TradingView ではストラテジーテスターを使用することで
バックテストを簡単に行うことができる。
またアラート機能でWebhookを使用することができる。
※現状は有料プランしかWebhookは使用できない
【AWS APIGateway,lambda】
Webhook(アラート発生)➡APIGateway➡lambda
という流れで自動売買が可能になる。
Zapier( https://zapier.com/ )というWebhookを受け取れるサービスの使用も考えたが、
料金が円安で地味に高いので、一番料金のかからなさそうなAWSを使用することとした。
lambdaの作成
まずlambdaの作成を行います。
今回はpython3.7で作成を行いました。
pythonコード デプロイするのを忘れない。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import requests
import json
import hmac
import hashlib
import time
from datetime import datetime as dtOrder
logger = logging.getLogger()
logger.setLevel(logging.INFO)
apiKey = 'GMOコインのAPIKeyを設定してください'
secretKey = 'GMOコインのsecretKeyを設定してください'
def lambda_handler(event, context):
# TODO implement
side = event['side']
symbol = event['symbol']
amount = event['amount']
# 発注する
reqBody, res = order(side,symbol,amount)
# ログ
logger.info(str(reqBody))
# GMOコインにて発注する
def order(side,symbol,amount):
timestamp = '{0}000'.format(int(time.mktime(dtOrder.now().timetuple())))
method = 'POST'
endPoint = 'https://api.coin.z.com/private'
# 発注
path = '/v1/order'
reqBody = {
"symbol": symbol,
"side": side,
"executionType": "MARKET",
"size": amount
}
text = timestamp + method + path + json.dumps(reqBody)
sign = hmac.new(bytes(secretKey.encode('ascii')), bytes(text.encode('ascii')), hashlib.sha256).hexdigest()
headers = {
"API-KEY": apiKey,
"API-TIMESTAMP": timestamp,
"API-SIGN": sign
}
#発注する
res = requests.post(endPoint + path, headers=headers, data=json.dumps(reqBody))
return str(reqBody), res
APIGatewayの設定
REST APIにてPOSTメソッドを作成し、
Lambda関数に先ほどのgmoBTCTradingを設定する。
APIのデプロイを行うとURLが発行される。
TradingViewでWebhookの設定
トレーディングビューのアラート機能にてWebhook URLに先ほどのAPIGatewayのURLを設定する。
メッセージ部分にJSON形式で、各パラメータを設定します。
テストのため金額が安いXRP_JPYを10成行買い注文します。(ビットコインの場合はBTC_JPYに変更します)
※設定してアラートが実行されるとレバレッジ取引として購入されるので注意してください。
アラートが実行されるとWEbhook URLにJSONがポストされ、発注される
できていない場合はCloudWatchでエラーが出ていないか確認しましょう。
補足
セキュリティ的なところを考えると、IP制限を追加したほうがよい。
TradingViewからPOSTされる際のIPアドレスはこちらに記載があります。
https://jp.tradingview.com/support/solutions/43000529348/
AWS API GatewayのIP制限に関してはこちらが参考になりました。
AWS API GatewayにおけるIP制限
https://qiita.com/koharu_s/items/18dcf26a6209d25b59c7