top of page
  • 執筆者の写真bookloveru2

pythonで仮想通貨②【コピペでOK】coincheckで自動売買botを稼働。ボリンジャーバンドは儲かる!?

更新日:2022年3月7日



皆様、こんにちは。乞食です。


今回は、自作Botの紹介です。

自作と言っても、当然先人たちのコードを丸パクリしながら、ちょびっと改良してコードを書き換えただけです('ω')ノ


今回は、きむ公さん の記事を参考に(丸パクリ)させて頂きました。


※コインチェックに、FXはありません。

つまり、ショートからインすることが出来ない為、今回自作したBotは架空のものとなります。。。

しかし、コインチェックでFXが出来るようになった際には、何かの役に立つかもしれません。。おそらく。。。。多分。。きっと。。。



では、行ってみよう('ω')ノ




 

目次

 

①売買結果

早速、botを5分稼働させた結果です('ω')ノ

収益は▲208円でした!

5分間で208円失いました( `ー´)ノ

あざす!



エントリー総額:¥168,532-

決済金額:¥168,324-

差引利益:¥▲208-

トレード回数:8回

買いエントリー:7回

売りエントリー:0回

決済エントリー:1回


予想通り、悲しみを招く結果となりました💘

真似しないでください。。。(´;ω;`)ウッ…




こんな感じで売買状況を見れます👇


こんな感じで履歴をCSVファイルに保存できます👇





②pythonコード



!pip install coincheck

# @title CC_Bollband
from coincheck import market,order
import time
import pandas as pd


access_key = "ご自身のAPIコードを入力"
secret_key = "ご自身のAPIシークレットを入力"

#約何秒間botを起動させるか
working_time = 300

#何秒ごとに価格データを確認するか
interval_sec = 10

#初めの何回か(デフォルトでは25回)は取引をせずに価格データをただ集める
def price_data_collecting(how_many_samples=25):
    print("まずは今から"+str(how_many_samples*interval_sec)+"秒間、価格データを収集します。")
    price_list = []
    for i in range(how_many_samples):
        price_list.append(m1.ticker()["last"])
        time.sleep(interval_sec)

    print("収集が完了しました。")
    return price_list


m1 = market.Market()
o1 = order.Order(secret_key=secret_key,access_key=access_key)

#初めのサンプル価格データの収集
sample_data = price_data_collecting()

#空のデータフレーム作ってさっき集めたデータを入れる
df = pd.DataFrame()
df["price"] = sample_data
print(df)

#ボリンジャーバンドの期間。20とすることが多い
#今回の場合、要するに過去20個の価格サンプルの内、今の価格の偏差値が30以下の場合に買い注文をいれるということ
duration = 20
sigma = 2


for i in range(int(working_time/interval_sec)):

    #最新の価格を取ってくる
    price_now = m1.ticker()["last"]
    df = df.append({'price': price_now,}, ignore_index=True)

    ##この辺りのロジックを書き換えれば、自分の好きなアルゴリズムで自動売買botが作れる
    #移動平均と標準偏差を計算
    df["SMA"] = df["price"].rolling(window=duration).mean()
    df["std"] = df["price"].rolling(window=duration).std()

     #注目している σ区間の境界線(今回は下にsigma分、つまり偏差値30以下)
    df["buy_price"] = df["SMA"]-sigma*df["std"]
    df["sell_price"] = df["SMA"]+sigma*df["std"]

    #最新の値段がσ区間を超えているか判定
    #今回は 「低すぎる値なら下がり過ぎなので、その時の価格で買うべき」という考え方を想定
    I_should_buy = df.iloc[-1]["price"] < df.iloc[-1]["buy_price"]
    I_should_sell = df.iloc[-1]["price"] > df.iloc[-1]["sell_price"]


    if I_should_buy:
        print("買い注文を実行します。")
        # print(o1.buy_btc_jpy(rate=str(price_now),amount=0.005))
        print(str(df.iloc[-1]["buy_price"]) + "円で" + str(df.iloc[-1]["price"]*0.005) + "円分ロングしました")

    elif I_should_sell:
        print("売り注文を実行します。")
        # print(o1.sell_btc_jpy(rate=str(price_now),amount=0.005))
        print(str(df.iloc[-1]["sell_price"]) + "円で" + str(df.iloc[-1]["price"]*0.005) + "円分ショートしました")


    else:
        print("売買はありません。")

    #先頭行を削除してdfの長さを一定に保つ(長時間の運用時のメモリ対策)
    # df = df.drop(df.index[0])
    time.sleep(interval_sec)


print(str(df.iloc[-1]["price"]) + "円でポジションを全決済します")
# 作成したデータをcsvで保存 
df.to_csv("CC_Bollband.csv", encoding="utf-8-sig")
df


以上。

さらば('ω')ノ



閲覧数:1,129回0件のコメント
bottom of page