【改名】ストックドッグ

金融系の会社で働くSEが株やPython、その他諸々について書いています。システムトレードもやってるよ!

HTTP Private APIを使って取引をしよう

【開発環境】


資産残高の取得するAPIが理解できたなら、後はちょっと工夫をするだけで取引ができます。

取引と資産残高取得のAPIの違い

2つ違う部分があります。

リクエストの送信方式が違う

資産残高はGET方式でリクエストを送りました。

取引はPOST方式でリクエストを送ります。

買うの?売るの?成行?指値?どのくらい?

取引を行うのに必要な情報を追加でリクエストにつけてやる必要があります。

最低限必要な情報は以下の4つです。

  • 何を買うか? BTC_JPY? ETH_BTC? FX_BTC_JPY?
  • 指値? 成行?
  • 買い? 売り?
  • どのくらい取引する?
  • 価格

価格は、指値で注文した場合のみ必要になってきます。

取引のコード

trade_api()に取引に必要な情報を引数として渡す、という形をとっています。

取引に必要な情報は、下の方にリスト形式で保持してるのでそこから選びます。


ほとんどは資産残高を取得するコードと同じです。

違う部分のみ解説をします。

  • #パラメーター情報
  • #パラメータに付与する情報をリスト形式に
#取引を行うAPI
def trade_api(product_code, child_order_type, side, size):

	#API keyとAPI secret
	api_key = "***********************"
	api_secret = b"**************************************"	

	#エンドポイントURL
	endpoint = "https://api.bitflyer.jp"

	#認証情報の作成
	method = "POST"
	path = "/v1/me/sendchildorder"
	timestamp = str(time.time())
	
	#パラメータ情報
	payload = {
		"product_code": product_code,
		"child_order_type" : child_order_type,
		"side" : side,
		"size" : size
	}

	text = timestamp + method + path + str(json.dumps(payload))
	sign = hmac.new(api_secret, text.encode('utf-8'), hashlib.sha256).hexdigest()


	#ヘッダーの情報
	headers = {
		"ACCESS-KEY": api_key,
		"ACCESS-TIMESTAMP": timestamp,
		"ACCESS-SIGN": sign,
		"Content-Type": "application/json"
	}

	response = requests.post(endpoint + path, data=json.dumps(payload), headers=headers)
	response = response.text

	return response

#パラメータに付与する情報をリスト形式に
product_code = ["BTC_JPY", "ETH_BTC", "FX_BTC_JPY"]
child_order_type = ["LIMIT", "MARKET"]
side = ["BUY", "SELL"]
#priceは指し値注文(LIMIT)にした場合のみ必須
price = []

response = trade_api(product_code[2], child_order_type[1], side[1], 0.01)
print(response)

パラメータ情報

ここに取引に必要な情報を格納します。

#パラメータ情報
payload = {
"product_code": product_code,
"child_order_type" : child_order_type,
"side" : side,
"size" : size
}


そして、リクエストに data=json.dumps(payload) として追加します。

requests.post(endpoint + path, data=json.dumps(payload), headers=headers)

パラメータに付与する情報をリスト形式に

trade_api()の外側です。

#パラメータに付与する情報をリスト形式に
product_code = ["BTC_JPY", "ETH_BTC", "FX_BTC_JPY"]
child_order_type = ["LIMIT", "MARKET"]
side = ["BUY", "SELL"]
#priceは指し値注文(LIMIT)にした場合のみ必須
price = []

response = trade_api(product_code[2], child_order_type[1], side[1], 0.01)

このリスト形式の中からこれらを選ぶことになります。

  • 何を買うか? BTC_JPY? ETH_BTC? FX_BTC_JPY?
  • 指値 → LIMIT 成行 → MARKET
  • 買い → BUY 売り → SELL
  • どのくらい取引する → ビットコインの単位を入力します
  • 価格 → 指値の場合のみ必要、今回は成行で注文を出します

このような感じで、値を選びながらリクエストを送ると、取引が可能になります。

このコードを使用すると、実際に取引ができるのでそこだけ注意してください。

次回からいよいよシステムトレードを作っていきます

システムトレードやろうよ 〜目次〜

www.stockdog.work