チャネルブレイクアウト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分経ったので今日はここまで。
↓次
この記事が気に入ったらサポートをしてみませんか?