チャネルブレイクアウトbotコード(by スナフキン氏)読解メモ30
の続きです。
題材コードは https://sshuhei.com/entry/channelbreakout/ です。
getSpecifiedCandlestickメソッドの続きから。
def getSpecifiedCandlestick(self, number, period, start_timestamp,
end_timestamp):
"""
number:ローソク足の数.period:ローソク足の期間(文字列で秒数を指定,
Ex:1分足なら"60").cryptowatchはときどきおかしなデータ(price=0)が含まれるので
それを除く
"""
# ローソク足の時間を指定
periods = [period]
# クエリパラメータを指定
query = {"periods": ','.join(periods),
"after": str(int(start_timestamp)),
"before": str(int(end_timestamp))}
# ローソク足取得
try:
res = json.loads(requests.get(
"https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc",
params=query).text)
res = res["result"]
except:
print(res)
# ローソク足のデータを入れる配列.
data = []
for i in periods:
row = res[i]
length = len(row)
for column in row[:length - (number + 1):-1]:
# dataへローソク足データを追加.
if column[4] != 0:
column = column[0:6]
data.append(column)
return data[::-1]
for i in periods:
row = res[i]
length = len(row)
for column in row[:length - (number + 1):-1]:
# dataへローソク足データを追加.
if column[4] != 0:
column = column[0:6]
data.append(column)
rowにはperiodで指定した分足のデータが入っています。
len(row)でその配列の長さを計算します。
row配列の後ろからlength - (number+1)まで1ステップずつさかのぼります。
numberで指定したローソク足の数ぶんloopが回ることになります。
column[4]はclose priceです。
終値が0出なければcolumn[0:6]つまりdate, open, high, low, closeをdata配列にいれます。
return data[::-1]
data配列には直近のローソクから順番に入っているので、時間順にするため配列を逆順に並び替えて返します。
describeResultメソッドに戻ります。
candleStick = self.getSpecifiedCandlestick(number, "60",
start_timestamp,
end_timestamp)
candleStickにnumberで指定した長さのローソク足が入りました。
else:
candleStick = self.readDataFromFile(fileName)
ファイル名が渡されている場合はそのファイルからローソク足を取得します。
readDataFromFileメソッドを見てみます。
# csvファイル(ヘッダなし)からohlcデータを作成.
def readDataFromFile(self, filename):
for i in range(1, 10, 1):
with open(filename, 'r', encoding="utf-8") as f:
reader = csv.reader(f)
header = next(reader)
for row in reader:
candleStick = [row for row in reader if row[4] != "0"]
dtDate = [datetime.datetime.strptime(data[0], '%Y-%m-%d %H:%M:%S') for
data in candleStick]
dtTimeStamp = [dt.timestamp() for dt in dtDate]
for i in range(len(candleStick)):
candleStick[i][0] = dtTimeStamp[i]
candleStick = [[float(i) for i in data] for data in candleStick]
return candleStick
# csvファイル(ヘッダなし)からohlcデータを作成.
ということなので、ヘッダを入れていると正しくパースされなさそうです。
def readDataFromFile(self, filename):
ファイル名を引数として渡します。
for i in range(1, 10, 1):
1から10未満の整数(=9)まで1ずつiに入れていきます。
with open(filename, 'r', encoding="utf-8") as f:
渡されたファイル名を指定してファイルをreadで開き、そのファイルをfとして管理します。
参考: https://python.civic-apps.com/file-io/
15分経ったので今日はここまで。
↓次
この記事が気に入ったらサポートをしてみませんか?