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

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

pubnubThread = threading.Thread(target=pubnub.start)
pubnubThread.start()

threadingは並列処理のための実装です。
pubnubで価格を取得しながら取引するための処理です。
targetにthreadで実行したいメソッドを渡します。
pubnub.startは、pubnubでの受信開始メソッドです。
ドキュメント( https://www.pubnub.com/docs/python/api-reference-configuration#init )によると、`You must call start() to initiate the PubNub Client API in Python V4.` とのこと。

なぜpubnubで価格を取得するかというと、restAPIで取得するよりも早く情報を得ることができるからです。
早く情報を得られれば遅い人やbotよりも有利な注文ができます。
また、restAPIの頻度制限を回避するという目的もあります。
public API (bitflyer lightningの取引インターフェイスから利用されているAPI)のsignalr接続が最も速いという話もありましたが、最近のTLを追っていると今は正式APIで遜色ないスピードが出ているようです。

loopメソッドに戻ります。

# pubnubが回り始めるまで待つ.
time.sleep(20)

pubnub通信が開始されるのを待ちます。
sleepに渡している数字の単位は秒です。
小数を渡すこともできます。

pos = 0
pl = []
pl.append(0)
lastPositionPrice = 0
lot = self.lot
originalLot = self.lot
waitTerm = 0

変数たちを定義しています。
後で使われるはずなのでその時に意味を読解します。

try:
    candleStick = self.getCandlestick(50, "60")
except:
    print("Unknown error happend when you requested candleStick")

candleStickなる変数をgetCandlestickメソッドで生成しています。

def getCandlestick(self, number, period):
   """
   number:ローソク足の数.period:ローソク足の期間(文字列で秒数を指定,
   Ex:1分足なら"60").cryptowatchはときどきおかしなデータ(price=0)が含まれるのでそれを除く.
   """

引数としてnumber, periodを渡しています。
コメントにあるように、
numberはローソク足の数、
periodはローソク足の期間を意味しています。
どうやらこのメソッドはローソク足情報を生成するようです。

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

↓つづき


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