9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TradingViewのアラート機能から自動売買botを作る その1

Last updated at Posted at 2022-10-19

目的

  • できる限り簡単にシステムトレードを行いたい
  • できる限り安くシステムトレードを行いたい
     GMOコインのAPIを使用して発注する、APIKey等は事前に用意が必要です。

技術選定

【TradingView】
TradingView ではストラテジーテスターを使用することで
バックテストを簡単に行うことができる。
またアラート機能でWebhookを使用することができる。
※現状は有料プランしかWebhookは使用できない

【AWS APIGateway,lambda】
Webhook(アラート発生)➡APIGateway➡lambda 
という流れで自動売買が可能になる。
Zapier( https://zapier.com/ )というWebhookを受け取れるサービスの使用も考えたが、
料金が円安で地味に高いので、一番料金のかからなさそうなAWSを使用することとした。

lambdaの作成

まずlambdaの作成を行います。
今回はpython3.7で作成を行いました。
image.png

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を設定する。
image.png
APIのデプロイを行うとURLが発行される。
image.png

TradingViewでWebhookの設定

トレーディングビューのアラート機能にてWebhook URLに先ほどのAPIGatewayのURLを設定する。
メッセージ部分にJSON形式で、各パラメータを設定します。
テストのため金額が安いXRP_JPYを10成行買い注文します。(ビットコインの場合はBTC_JPYに変更します)
※設定してアラートが実行されるとレバレッジ取引として購入されるので注意してください。
image.png

アラートが実行されるとWEbhook URLにJSONがポストされ、発注される
できていない場合はCloudWatchでエラーが出ていないか確認しましょう。
image.png

補足

セキュリティ的なところを考えると、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

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?