見出し画像

Pythonでトレードデータを集めるまでの備忘録Note

※”今のところ”全部無料で読めます→読めなくなりました笑
※予告なく加筆訂正することがあります。
※予告なく購入値段が変わります。
※予告して記事を削除することがあります。→記事を削除しても購入者は読めます

こんにちは。いちろう(@syo_mizukawa)です。
このNoteは固体物理学と医学の知識しかない素人が仮想通貨トレードの優位性を保つためにPythonで各取引所のデータ分析をするための備忘録Noteです。先日消去したOIのNoteがきっかけで他にも優位性のありそうなデータが有るのではないかと思い、Pythonでデータ分析を始めることにしました。
プログラミングの知識0なので、何からやっていけばいいかわかりませんが、とりあえず始めていきます。
※プログラミングのお作法を全く知らないので間違えることが多いと思います。ごめんなさい、という前置きを始める前に置いておきます。

取り組みやすいように、Google colaboratoryでPythonを動かして、各取引所からデータを引っ張ってきてGoogleスプレッドシートに吐き出すことを最終目標にしていますが、そもそもそんなことができるか分かりません笑。

一応Google colaboratoryの導入方法を置いておきます。

まずは何から始めるか→Progateやれ

ProgateのPython講座をやりましょう。プログラム初心者でもめちゃくちゃ分かりやすいので。これから始めたほうが時間効率上がると思います。おすすめ。

Progate | プログラミングの入門なら基礎から学べるProgate

自分は時間効率重視してるので有料会員になりました。
課金して勉強します笑。

Progate終わってからUdemyとかで勉強しましょう

Google colaboratoryを入れてネットに落ちているコードをコピペして吐き出してみても、何をやっているのかイマイチ分かりません笑。バカなので。
なのでUdemyのPython講座とgoogle colaboratory講座を買いまくりました。今ブラックフライデーで安いので。
まずは、基本的な知識をブチ込んでから始めていきたいと思います。→Progateから始めましょう笑

画像1

基本的な知識をブチ込むまでしばらくお待ち下さい(作曲とか画像生成とか関係ないものもありますが気にしないでください)。

何も知らないならまず知っておいたほうがいいこと

Pythonで制御構文を始める前に知っておいたほうがいいことをまとめます。Pythonでは代入した値によって、整数ならint、文字列ならstrというふうにデータの型が決まっています。
下記に図解!Python データ型を徹底解説!(確認・変換・指定方法と種類一覧)から主なPythonのデータ型を引用します。


画像2

また、メソッドと関数の違いについても知っておくとよいかなと思います。単独で呼び出しできるのが関数(print()など)で、変数や値に付けて呼び出すのがメソッドと考えればよさそうです。
メソッドはデータ型に紐付いた関数なのでデータ型であるlist型とdict型では呼び出せるメソッドが変わってきます。

画像3

以上を押させて上で制御文を学んでいくとよいでしょう。

CCXTでBTC/USDTのチャートを描画させてみる

CCXTとは複数の仮想通貨取引所のAPI操作を一つのライブラリに集約させたものです。PythonにCCXTをインストールすることで様々な取引所のAPI操作を簡単に行うことができます。CCXTのライブラリ構造は次のようになっています。内容の深堀は別途記載予定です。

CCXTのライブラリ構造

それではGoogle colaboratoryでPythonを触ってみることを目的として、BinanceからBTC/USDTのデータを引っ張ってきてグラフを描出してみましょう。コードを下記に示します。

!pip install ccxt

import ccxt
binance = ccxt.binance () 
binance.load_markets ()

import matplotlib.pyplot as plt
plt.style.use ('seaborn-white')
plt.rcParams["figure.figsize"] = [15,6]

import pandas as pd
from datetime import datetime

symbol = 'BTC/USDT'

ohlcv = binance.fetch_ohlcv (symbol, timeframe = '1d')

prices = [x[4] for x in ohlcv]

dates = [datetime.fromtimestamp (x[0] // 1000) for x in ohlcv]

data = pd.Series (prices , dates) 

data.plot ()

実際に動かしてみると下記のような結果を得ることができます。

BTC/USDT

ではコードに書かれている意味を1つ1つ見ていきましょう。

!pip install ccxt

import ccxt
binance = ccxt.binance () 
binance.load_markets ()

CCXTをインストールしてBinanceからマーケット情報を取得するためのおまじないです。

import matplotlib.pyplot as plt

Pythonでグラフを描画するためのおまじないです。

matplotlib: データビジュアライゼーションパッケージの全体を指す。
pyplot: matplotlibパッケージ内のモジュールを指す。欲しいプロットを作るために暗黙的かつ自動的に図形や軸を作成するインターフェース。基本的にはこのモジュール越しにmatplotlibの機能を活用する。
参考:matplotlibでのプロットの基本

plt.style.use ('seaborn-white')
plt.rcParams["figure.figsize"] = [15,6]

matplotlibのstyleの決定。
参考:matplotlibのstyleを変える

import pandas as pd

PandasとはPythonのデータ解析用ライブラリの1つです。Pandasをインストールすることで、データの読み込み、グラフ化、データ分析に関する処理が容易になります。念仏のように唱えましょう。
参考:データ分析のライブラリ!Pandasとは【初心者向け】|現役エンジニアが解説

from datetime import datetime

Pythonで日付を扱うためにdatetimeモジュールを使用します。

datetimeモジュールには下記の型が含まれます。
date
time
datetime
timedelta
tzinfo
timezone
ここで混乱を招く要素として、datetimeモジュールの中にdatetimeクラスが存在する、ということです。ですので、使用する場合は、上記のようにインポートする必要があります。
参考:Pythonで日付操作を完全マスター!!
※一部改変

symbol = 'BTC/USDT'

BTC/USDTのデータをsymbolに格納します。ここをETH/USDTに変更するとETH/USDTのグラフを書くことができます。ためにしBinanceに上場しているUSDT建ての通貨に変更してグラフを書いてみましょう。

ohlcv = binance.fetch_ohlcv (symbol, timeframe = '1d')

CCXTのfetch_ohlcvを用いてBinanceからsymbolとtimeframeを取得しohlcvに格納します。ohlcvとはopen(始値)、high(高値)、low(安値)、close(終値)、volume(出来高)の頭文字です。

prices = [x[4] for x in ohlcv]

内包表記です。内包表記とは、リストや辞書などのイテラブルオブジェクトのループ処理を簡単に記述できる方法です。リスト内包表記、セット内包表記、辞書内包、ジェネレータ式があり、内容としてはリスト内包表記の割合が大きいとされます。
リスト内包表記は以下のように書きます。

[式 for 変数名 in イテラブルオブジェクト]

リストやタプルなどのイテラブルオブジェクトの各要素に対して式が評価され、その結果を要素とする新たなリストが返されます。
※リスト:任意の型(整数、浮動小数点数、文字列など)のデータを格納できる。要素には順序があり、インデックスを用いて要素を指定できる。リストの要素は変更可能。
※リストの要素には、前から順に「0, 1, 2,・・・」と数字が割り振られている。これをインデックス番号という。インデックス番号は0から始まる点に注意。

リストの各要素は、リスト[インデックス番号]とすることで取得することができます。ohlcvをprint()してみると各要素は[1596326400000, 11801.17, 12123.46, 10518.5, 11071.35, 97553.077604]と表されます。各要素は[UNIX時間, open(始値), high(高値),low(安値) ,close(終値) , volume(出来高)]となります。
※UNIX時間とは、コンピューター上での時刻表現方法の一つ。 「1970年1月1日午前0時(UTC)」からの経過秒数で表します。気をつけるべきは単位がsecとmsecがあり、今回UNIX時間の単位がmsecであるためsec似直すために1000で除しています。

今回の場合、ohlcvの要素から4番目の要素(要素は0スタート)、close(終値)を取り出してpricesに格納することになります。

dates = [datetime.fromtimestamp (x[0] // 1000) for x in ohlcv]

これも上と同じで内包表記。
今回の場合、ohlcvの要素から0番目の要素、UNIX時間を1000で除したものを取り出して、Pythonの標準ライブラリdatetimeを用いてローカルタイムなら.fromtimestamp()として変更し格納する。

data = pd.Series (prices , dates) 

Pandas(パンダス、pd)には1つの主要なデータ構造があり、Series(シリーズ)が1次元のデータ、DataFrame(データフレーム)が2次元のデータに対応する。1次元データとは、1つの観測対象に対して、1つの測定値があるデータのことで、2次元データとは、1つの観測対象に対して、2つの測定値があるデータのこと。Seriesは、リスト、ディクショナリ、NumPyのndarrayなどから作成することができ、下記のように定義します。

pd.Series (data=データの配列, index=インデックスの配列, name=列名)

今回は上記で取得したpricesとdatesをSeriesによって1次元データとして新しくdataに格納します。print()した結果を下記に示します。

print(data)の結果
data.plot ()

pandas.Series, pandas.DataFrameのメソッドとしてplot()がある。Pythonのグラフ描画ライブラリMatplotlibのラッパーで、簡単にグラフを作成できる。
参考:pandasのplotメソッドでグラフを作成しデータを可視化
---

閑話休題(プログラム勉強方法アップデート)

ここから先は

285字 / 2画像

¥ 1,000

この記事が気に入ったらサポートをしてみませんか?