チャネルブレイクアウトbotコード(by スナフキン氏)読解メモ10

の続きです。
題材コードは https://sshuhei.com/entry/channelbreakout/ です。

row = res[i]
length = len(row)

rowにはcryptowatchAPIレスポンスのi秒足(例えば60秒足=1分足)データが入っています。
lenでrowの配列の長さを取得します。
この「配列の長さ」はrowにローソク足が何本入っているかを意味します。

for column in row[:length - (number + 1):-1]:

rowからある条件で値を取得してforブロック内の処理を繰り返します。
少し複雑ですが、row[start : end : step] というスライスの文法です。
start位置からend位置までをstepごとに要素取得します。
(start位置の値は含まれますがend位置の値は含まれないので注意が必要です。)

ここではstartが指定されていません。
stepが正の場合、範囲は先頭からとなります。
stepが負の場合、範囲は末尾からとなります。
例えば仮に

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

の場合、

>>> len(a)
10
>>> a[:6:1]
[1, 2, 3, 4, 5, 6]
>>> a[:6:-1]
[0, 9, 8]

となります。

endにはlength - (number + 1)が指定されています。
numberは引数で渡されているもので、getCandlestickメソッドで取得したいローソク足の数を意味します。
row配列の長さ - (取得したいローソク足の数 + 1) となります。
例えば length = 10, number = 3 だとすると、
10 - (3 + 1) = 6 となります。
この場合、

>>> a[:6:-1]
[0, 9, 8]

となるので、row配列の後ろから3つ取得することになります。
row配列の一番後ろには一番直近のローソク足が入っています。
なので `row[:length - (number + 1):-1]` は、一番直近のローソク足から過去に向かって順番に3つ取得することを意味します。

15分経ったので今日はここまで。

↓次


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