Botプログラム修正/BOTリトライ!

BitMEX純正ライブラリを使ったPython製の自動売買プログラムとの生活記録。My Bot プログラム修正済み

投稿日:2019/03/12    カテゴリ:AutoTrade

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 のプログラムを実行した様子。上手く稼いでくれるのかな。。。

 



コメント

コメント数 0

まだコメントはありません