img: tradingview.com
取引内容
時刻 | ペア | ポジション | 量 | 価格 | 手数料 | 損益 | |
---|---|---|---|---|---|---|---|
Mar 12, 2019, 9:55:54 PM | XBTUSD | Buy | 100 | 3868 | 0.00001938 XBT | - 0.0001 XBT | |
Mar 12, 2019, 8:47:38 PM | XBTUSD | Sell | 100 | 3861 | 0.00001942 XBT |
プログラム修正
もし ポジションなし で
MACD も Signal も プラス領域
そしてSignal > MACD
さらに 価格が前の 15分足より下回ったら、新規売り注文
もし ポジションなし で
MACD も SIgnal も マイナス領域
そして Signal < MACD
さらに 価格が前の 15分足より上回ったら、新規買い注文
市場
やっぱり下げています。。。早くプログラムしないともったいない!
プログラム例
import bitmex
import talib
import pandas as pd
import time
from datetime import datetime
import calendar, requests
import json
from strategy import Strategy
from trader import Trader
import csv
TIME = datetime.now()
TEST_EXCHANGE = False
API_KEY = "自分のAPIキー"
API_SECRET = "自分のシークレットキー"
AMOUNT_MONEY_TO_TRADE = 100 # $
LEVERAGE = 1 # $100
TIMEFRAME = '5m'
client = bitmex.bitmex(
test=TEST_EXCHANGE,
api_key=API_KEY,
api_secret=API_SECRET
)
strategy = Strategy(client, timeframe=TIMEFRAME)
trader = Trader(client, strategy, money_to_trade=AMOUNT_MONEY_TO_TRADE, leverage=LEVERAGE)
now = datetime.utcnow()
unixtime = calendar.timegm(now.utctimetuple())
since = unixtime - 60 * 1200
param = {"period": 5, "from": since, "to": unixtime}
url = "https://www.bitmex.com/api/udf/history?symbol=XBTUSD&resolution={period}&from={from}&to={to}".format(
**param)
res = requests.get(url)
data = res.json()
df = pd.DataFrame({
"timestamp": data["t"],
"open": data["o"],
"high": data["h"],
"low": data["l"],
"close": data["c"],
"volume": data["v"],
}, columns=["timestamp", "open", "high", "low", "close", "volume"])
df["datetime"] = pd.to_datetime(df["timestamp"], unit="s")
df = df.set_index("datetime")
pd.to_datetime(df.index, utc=True)
df = df.resample("15T").agg({
"timestamp": "first",
"open": "first",
"high": "max",
"low": "min",
"close": "last",
"volume": "sum",
})
df.set_index(['timestamp'], inplace=True)
macd, signal, hist = talib.MACD(df.close.values,
fastperiod=12, slowperiod=26, signalperiod=9)
MACD_Data = macd[-1]
Signal_Data = signal[-1]
# pandas型のリストデータ抽出
# df.iloc[-1, 0]) # open
# df.iloc[-1, 1]) # high
# df.iloc[-1, 2]) # low
# df.iloc[-1, 3]) # close
# df.iloc[-1, 4]) # volume
prev_low_price = df.iloc[-2, 2] # 前足の安値
now_price = df.iloc[-1,0]
client = bitmex.bitmex(test=False, api_key=API_KEY,
api_secret=API_SECRET)
result = client.Position.Position_get(filter=json.dumps({'symbol': 'XBTUSD'})).result()
myPosition = result[0][0]['currentQty']
print("現在のポジション")
print(myPosition)
if myPosition==0:
if MACD_Data > 0 and Signal_Data > 0:
if Signal_Data > MACD_Data:
if now_price < prev_low_price:
print ("add-order-sell")
trader.execute_trade_add_order_sell()
TIME1 = datetime.now()
print(TIME1)
print("----- end time 1-----\n\n\n")
time.sleep(1)
else:
trader.execute_trade()
print("ノーポジ")
TIME1 = datetime.now()
print(TIME1)
print("----- end time 2-----\n\n\n")
time.sleep(3)
else:
trader.execute_trade()
print("ノーポジ")
TIME1 = datetime.now()
print(TIME1)
print("----- end time 3-----\n\n\n")
time.sleep(3)
elif MACD_Data < 0 and Signal_Data < 0:
if Signal_Data < MACD_Data:
if now_price > prev_low_price:
print ("add-order-buy")
trader.execute_trade_add_order_buy()
TIME1 = datetime.now()
print(TIME1)
print("----- end time 4-----\n\n\n")
time.sleep(1)
else:
trader.execute_trade()
print("ノーポジ")
TIME1 = datetime.now()
print(TIME1)
print("----- end time 5-----\n\n\n")
time.sleep(3)
else:
trader.execute_trade()
print("ノーポジ")
TIME1 = datetime.now()
print(TIME1)
print("----- end time 6-----\n\n\n")
time.sleep(3)
else:
trader.execute_trade()
print("ノーポジ")
TIME1 = datetime.now()
print(TIME1)
print("----- end time 7-----\n\n\n")
time.sleep(3)
上記プログラムだけでは動きません。別途 trader.py などが必要。
また本番環境で実行する際は、 while文内でループ処理してあげる必要が。
実行結果の様子
とりあえず end time 6 のプログラムを実行した様子。上手く稼いでくれるのかな。。。