bot開発

第6回 移動平均線のGC/DCで売り買いするbot開発方法を解説!サルでも分かる仮想通貨botの作り方!

投稿日:

移動平均bot表紙

こんばんは。

なおき(@naoki_finance)です。

今回から相場の状況を判断して売買を行うbotを作っていきます。

5分足10本分の移動平均を算出し、現在値がそれを上回ったらロング、下回ったらドテンしてショートという簡単なbotです。

今回からは、仮想通貨FXで人気の高いBitMEX取引所を使っていきます。

なぜBitMEXかというとBitMEXはテストネットというデモ口座があるため、実際の資金を入れずにbotのテストをし放題だからです。

簡単なプログラムであればいきなり本番の口座で動作させても問題ないかもしれませんが、プログラムが複雑になればなるほどいきなり本番の口座で動作させると大事な資金が吹っ飛んでしまう可能性もあります。

必ずデモ口座でテストを行いましょう。

スポンサーリンク

アドセンス




準備

1.BitMEXのテストネットの口座を開設します。

口座の開設方法は、先日投稿した仮想通貨FXはデモ口座で練習が必須!海外FX取引所BitMEXをご紹介!の記事を参照ください。

2.APIキーの取得

例のごとく、今回も売買を行うにはAPIキーが必要になりますので取得しておきます。

テストネットへのログイン後、API→APIキーの管理をクリックします。

APIキーの管理

任意の名前を付け、キーのアクセス許可を注文に設定し、APIキーを作成をクリックします。

APIキー作成

APIキーと秘密鍵が作成されます。

APIキー生成後

プログラミング

いよいよプログラミングに入っていきます。

プログラムのポイント

・何回も使いそうな処理を関数化してプログラムを見やすく、保守性をアップ!

・NumPy(ナンパイ)ライブラリを使用し、無駄な計算処理をしない!

移動平均値を計算する関数

まずは、移動平均の値を計算する関数を作っておきます。

今回は、単純移動平均(SMA)を使用します。

関数は、計算など何度も使用する処理をまとめて定義しておくものです。

同じ処理をいろいろな箇所に記述していると視認性も悪いですし、修正が入った場合に何か所も修正する必要があるため、同じ処理はなるべくまとめて関数化しておくことが重要になります。

新しいファイル(MA.py)を作り、このコードを記述します。


import ccxt
import numpy as np

#--------------------------------
# 単純移動平均(SMA)を取得する関数
#--------------------------------
def getMA( timeframe, num ):

    # bitMEX使用宣言
    bitmex = ccxt.bitmex()
    # テストネット使用宣言(本番時はコメントアウトする)
    bitmex.urls["api"] = bitmex.urls["test"]

    # タイムスタンプ取得
    time = bitmex.fetch_ticker(symbol="BTC/USD")["timestamp"]

    # どの時間のローソク足のデータを取得したいかで処理分け
    if "1d" == timeframe:
        msec = 24 * 60 * 60 * 1000
    elif "4h" == timeframe:
        msec = 4 * 60 * 60 * 1000
    elif "1h" == timeframe:
        msec = 60 * 60 * 1000
    elif "30m" == timeframe:
        msec = 30 * 60 * 1000
    elif "15m" == timeframe:
        msec = 15 * 60 * 1000
    elif "5m" == timeframe:
        msec = 5 * 60 * 1000
    elif "3m" == timeframe:
        msec = 3 * 60 * 1000
    elif "1m" == timeframe:
        msec = 1 * 60 * 1000
    else:
        return "error"

    time = time - num * msec

    # ローソク足のデータ取得
    candles = bitmex.fetch_ohlcv(symbol="BTC/USD", timeframe = timeframe, since = time)

    tmp = []
    # ローソク足のデータから終値のみを取り出す
    for candle in candles:
        tmp.append( candle[4] )

    ar = np.array( tmp )

    # 平均値計算
    ma = np.average( ar ) 

    return ma

この関数getMAは、パラメータのtimeframeには、取得したい移動平均の時間軸をnumには、ローソク足何本分の移動平均とするかを渡すことで移動平均値を返すものです。

計算方法を変えることで加重移動平均や指数平滑移動平均の値を求めることも可能です。

計算方法は、こちらの記事をご覧ください。

今回新しく使用しているNumPyというライブラリですが、計算処理を簡単に行うことができるものです。

今回は平均値を出しているだけなのであまり恩恵を受けられていない感じがしますが標準偏差などを計算するときも簡単です。

メインプログラム

メインプログラムは、このようにしています。


import ccxt
import MA #MA.pyをインポート
from time import sleep

# bitMEX使用宣言
bitmex = ccxt.bitmex({
"apiKey": "XXXXXXXXXXXXXXXXXXX",
"secret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
})
# テストネット使用宣言(本番時はコメントアウトする)
bitmex.urls["api"] = bitmex.urls["test"]



while( True ):
    # 現在のポジション取得
    tmp = bitmex.private_get_position()
    pos = tmp[0]['currentQty'] # posには現在のポジションサイズが入ります。

    # 5分足10本分移動平均値取得
    data = MA.getMA( "5m", 10 )
    if "error" == data:
        # 移動平均値を取得できなかった
        continue

    # 現在データ取得
    now = bitmex.fetch_ticker(symbol="BTC/USD")

    amount = 0
    # 現在の価格が移動平均値を上回ったか?
    # 同方向にポジションを持っている場合は、売買しない
    if data < now["ask"]: side = "buy" if 0 == pos: # ポジションを持ってない amount = 1 elif 0 > pos:
            # ショートポジションを持っている
            amount = 2

    elif data > now["bid"]:
        side = "sell"
        # 現在の価格が移動平均値を下回った
        if 0 == pos:
            # ポジションを持ってない
            amount = 1
        elif 0 < pos:
            # ロングポジションを持っている
            amount = 2

    if 0 != amount:
        res = bitmex.create_order( symbol="BTC/USD", type="market", side=side, amount=str(amount) )
        print("オーダー amount = " + str(amount) )
    else:
        print("発注無し")

    # 5分スリープ
    sleep( 60 * 5 )


※各APIキーはご自身のものに置き換えてください。

今回のプログラムでは、これまで紹介した例外処理やTwitterはプログラムが複雑になり、理解しづらくなるので入れていません。

これまでのものを参考に改造してみてください。

簡単なプログラムですのでこのまま使用しても利益は出せませんが、これを参考に時間軸や移動平均の本数などを工夫し、プログラムを改造していってください。

スポンサーリンク

アドセンス




まとめ

今回は、移動平均1本だけで判断材料に売買しましたが、移動平均を算出するプログラムは関数化してありますのでよくある短期と長期の移動平均を2本使った場合の処理も簡単に構築することが可能です。

これらの売買ロジックやパラメータは一概にどれが良いとは言えないのでご自身の売買ロジックを探していろいろ試してみて下さい。

不明点などありましたらご質問もお気軽にどうぞ。

 

ではまた。

 

前回の記事はこちら↓

第5回 Twitterとbotを連携して外出先でも手軽に状況をチェックしよう!サルでも分かる仮想通貨botの作り方!

こんばんは。 なおき(@naoki_finance)です。 次回まで作っていたbotでは、外出先でbotが動いているのか止まっているのか把握できません。 そこで今回は稼動状況をTwitterにTwee ...

続きを見る

次回の記事はこちら↓

TA-Libライブラリアイキャッチ
第7回 TA-Libライブラリで簡単にテクニカル分析!サルでも分かる仮想通貨botの作り方!

こんばんは。 なおき(@naoki_finance)です。 前回は、移動平均線の値を自動で計算する関数を作成しました。 自分でインジケータの値を算出する関数を作るとそのインジケータの理解も深まりますし ...

続きを見る

 

今回の内容をYouTubeにもアップしています。

アドセンス




アドセンス




  • この記事を書いた人
なおき

なおき

2017年7月から仮想通貨投資を行っている兼業トレーダーのなおきと申します。 仮想通貨投資の前はFX(為替)をやっていました。 FXで得た知識を生かして悠々自適な生活を目標としています。 まずは億り人になり、脱サラを目指します!! このブログでは、仮想通貨投資で実際に稼ぐことができるのか、私の投資状況など生の声をお届けしていきます! 私の投資経験などの詳しいプロフィールはこちらTwitterもやっていますのでぜひフォローしてください!

おすすめ記事

1

こんばんは。 なおき(@naoki_finance)です。 この記事をご覧いただいている方は仮想通貨投資で一財築きたい!と考えている方だと思います。 ただ、一口に仮想通貨投資といってもいろいろな投資ス ...

2

こんばんは。 なおき(@naoki_finance)です。 これまでもBANKERAの配当(レベニューシェア)報告をさせていただいていましたが、毎週同じような記事ができてしまうので、これからはこの記事 ...

3

こんにちは。 なおき(@naoki_finance)です。 これまでZaifコイン積立を推してきたにも関わらず、ちゃんとZaifコイン積立のやり方の記事を書いていなかったのでここで記事にしておこうと思 ...

-bot開発
-, , , , ,

Copyright© 5 万円で始めた仮想通貨トレード、ほんとに稼げる? , 2018 All Rights Reserved.