BF注文サンプルコードpython編
python人気みたいなんで勉強して書き直しました、、、w
トレール以外の注文に対応(後で追加しておきます)
python初心者なんでコードが汚いです、、、?
#Order
import requests
import time
import hmac
import hashlib
#Assist
import json
###############
class Order:
def __init__(self):
self.key = "キー"
self.secret = "シークレット"
self.symbol = "FX_BTC_JPY"
self.api = BitFlyer(self.key, self.secret)
self.assist = Assist()
def sendOrder(self, type, body):
if type == "special":
path = "/v1/me/sendparentorder"
else:
path = "/v1/me/sendchildorder"
response = None
while (response is None):
try:
response = self.api.requestStart("POST", path, body)
except:
print("retry")
pass
time.sleep(3)
return self.assist.purseJSON(response)
def createOrderBody(self, params = {}):
if params["type"] == "LIMIT":
body = {
"product_code": self.symbol,
"condition_type": "LIMIT",
"side": params["side"],
"price": params["price"],
"size": params["size"]
}
elif params["type"] == "STOP":
body = {
"product_code": self.symbol,
"condition_type": "STOP",
"side": params["side"],
"trigger_price": params["trigger"],
"size": params["size"]
}
elif params["type"] == "MARKET":
body = {
"product_code": self.symbol,
"condition_type": "MARKET",
"side": params["side"],
"price": 0,
"size": params["size"]
}
elif params["type"] == "STOP_LIMIT":
body = {
"product_code": self.symbol,
"condition_type": "STOP_LIMIT",
"side": params["side"],
"price": params["price"],
"trigger_price": params["trigger"],
"size": params["size"]
}
elif params["type"] == "TRAIL":
body = {
"product_code": self.symbol,
"condition_type": "TRAIL",
"side": params["side"],
"offset": params["offset"],
"size": params["size"]
}
else:
print("Type ERROR")
return
return body
def createSIMPLEOrder(self, order1 = {}, minute_to_expire = 99999, time_in_force = "GTC"):
print("Order : SIMPLE")
if order1["type"] == "LIMIT":
bodys = {
"product_code": self.symbol,
"child_order_type": "LIMIT",
"side": order1["side"],
"price": order1["price"],
"size": order1["size"],
"minute_to_expire": minute_to_expire,
"time_in_force": time_in_force
}
return self.sendOrder("nomal", bodys)
elif order1["type"] == "MARKET":
bodys = {
"product_code": self.symbol,
"child_order_type": "MARKET",
"side": order1["side"],
"size": order1["size"],
"minute_to_expire": minute_to_expire,
"time_in_force": time_in_force
}
return self.sendOrder("nomal", bodys)
else:
bodys = {
"order_method": "SIMPLE",
"minute_to_expire": minute_to_expire,
"time_in_force": time_in_force,
"parameters": [self.createOrderBody(order1)]
}
return self.sendOrder("special", bodys)
def createIFDOrder(self, order1 = {}, order2 = {}, minute_to_expire = 99999, time_in_force = "GTC"):
print("Order : IFD")
bodys = {
"order_method": "IFD",
"minute_to_expire": minute_to_expire,
"time_in_force": time_in_force,
"parameters": [self.createOrderBody(order1), self.createOrderBody(order2)]
}
return self.sendOrder("special", bodys)
def createOCOOrder(self, order1 = {}, order2 = {}, minute_to_expire = 99999, time_in_force = "GTC"):
print("Order : OCO")
bodys = {
"order_method": "OCO",
"minute_to_expire": minute_to_expire,
"time_in_force": time_in_force,
"parameters": [self.createOrderBody(order1), self.createOrderBody(order2)]
}
return self.sendOrder("special", bodys)
def createIFDOCOOrder(self, order1 = {}, order2 = {}, order3 = {}, minute_to_expire = 99999, time_in_force = "GTC"):
print("Order : IFDOCO")
bodys = {
"order_method": "IFDOCO",
"minute_to_expire": minute_to_expire,
"time_in_force": time_in_force,
"parameters": [self.createOrderBody(order1), self.createOrderBody(order2), self.createOrderBody(order3)]
}
return self.sendOrder("special", bodys)
class BitFlyer:
def __init__(self, key, secret):
self.key = key
self.secret = secret
self.url = "https://lightning.bitflyer.jp"
def requestStart(self, method, path, params):
if method == 'POST':
url = self.url + path
timestamp = str(int(time.time()))
json_data = json.dumps(params).encode("utf-8")
sign = self.createSign(timestamp, method, path, json.dumps(params))
headers = {
'ACCESS-KEY': self.key,
'ACCESS-TIMESTAMP': timestamp,
'ACCESS-SIGN': sign,
'Content-Type': 'application/json',
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
}
r = requests.post(url, data=json_data, headers=headers)
elif method == 'GET':
url = self.url + path
json_data = json.dumps(params).encode("utf-8")
r = requests.get(url, params=json_data)
return r.text
def createSign(self, timestamp, method, path, params):
text = timestamp + method + path + params
return hmac.new(self.secret.encode('utf-8'), text.encode('utf-8'), hashlib.sha256).hexdigest()
class Assist:
def purseJSON(self, line):
obj = None
while (obj is None):
try:
obj = json.loads(line)
except:
line = {"error" : "purseJSON error", "value" : line}
pass
return obj
if __name__ == '__main__':
print("START")
#注文オブジェ order = Order()
orderbody1 = {"type" : "LIMIT", "side" : "SELL", "price" : 999999, "size" : 0.001}
orderbody2 = {"type" : "LIMIT", "side" : "BUY", "price" : 666666, "size" : 0.001}
orderbody3 = {"type" : "STOP", "side" : "BUY","trigger" : 1111111, "size" : 0.001}
#orderbody = {"type" : "STOP_LIMIT", "side" : "BUY", "price" : 999999, "trigger" : 1111111, "size" : 0.001}
#orderbody = {"type" : "MARKET", "side" : "BUY", "size" : 0.001}
re = order.createIFDOCOOrder(orderbody1, orderbody2, orderbody3)
print(re)
#re = order.createIFDOrder(orderbody1, orderbody2)
#re = order.createOCOOrder(orderbody1, orderbody2)
#re = order.createSIMPLEOrder(orderbody1)
#トレール 現在より5000変動で注文
orderbodyByTrail = {"type" : "TRAIL", "side" : "SELL", "offset" : 5000, "size" : 0.001}
result = order.createSIMPLEOrder(orderbodyByTrail)
print(result)
コメントアウトしてるやつを使えばトレール以外全て網羅できます
詳しい説明は省略します、というか言わなくてもつかえるようになってほしいです!
本当に困ったらツイッターで聞いてください
この記事が気に入ったらサポートをしてみませんか?