bookloveru2

2022年1月8日3 分

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

最終更新: 2022年3月6日

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

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

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

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

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

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

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

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


目次

①売買結果

②pythonコード


①売買結果

早速、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

以上。

さらば('ω')ノ

    11340
    2