QuantZoneでできそうなこと①
QuantZoneを多用することになると思うので、何ができそうかを調べてみました。
とりあえず、使えそうなものを抜き出して並べてみます。他の全ての数式については、最後のほうに画像添付します。
その後、できそうなこと・難しそうなことを考察します。
マーケットに関するデータ
現在価格系
price("BTC-PERP")・・・現在価格。おそらくマーケットプライス※1。
last_trade_price("BTC-PERP")・・・最終約定価格。
price("BTC-PERP", n)・・・n分前の価格。
price("BTC-PERP", 60*24*365)・・・このように、数年前の価格も取得できる。
price("BTC-PERP", 60*24*365*10)・・・このように、10年前の価格 とかありえない過去だと、上場時価格が入るぽい。BTC-PERPだと10564.25ドル固定となる。
※1 FTXのマーケットプライスは、ベストAsk価格・ベストBid価格・最終約定価格の中央値です。
平均価格(MA)系
average_price("BTC-PERP", n)・・・直近n分間における平均価格。
ewma_price("BTC-PERP", n)・・・直近n分間の指数平滑移動平均価格。
最大価格・最小価格系
max_price("BTC-PERP", n)・・・過去n分間における高値。
min_price("BTC-PERP", n)・・・過去n分間における安値。
板系
bid_price("BTC-PERP")・・・ベストBid価格(最良買い気配価格)。
offer_price("BTC-PERP")・・・ベストAsk価格(最良売り気配価格)。
インデックス系
index_price("BTC-PERP", n)・・・n分前のBTC-PERPのインデックス価格。
average_index_price("BTC-PERP", n)・・・インデックス価格の平均。
ewma_index_price("BTC-PERP", n)・・・インデックス価格の指数平滑移動平均。
あとは、Volumeを取得できるのと、MOVE系商品に関するもの(今回一切使わない)があります。
アカウントに関するデータ
詳しくは省略しますが、以下のようなものを取得できます。
証拠金の多寡や維持率
ポジションサイズ
現在レバレッジ
現在ポジションの損益
ポジションサイズを取得するとき、以下に注意したほうがよいでしょう。
position("BTC-PERP")・・・ポジション数量を正の数で返す。つまり、ロングポジションもショートポジションも、その絶対量が返ってくる。
position_net("BTC-PERP")・・・ショートポジションをマイナスで取得したいなら、こっちを使う。
position_side("BTC-PERP")・・・ロングポジションを持っている場合は1、ショートポジションの場合は-1が返ってくる。ポジなしだと0。
あと、現物の保有量はポジションとして取得することはできません。「残高」として以下で取得できます。
balance("BTC")・・・BTC現物の残高が返ってくる。
その他
数学関数
abs(x)・・・絶対値。
max(x, y)・・・最大値。3個以上指定可能。
min(x, y)・・・最小値。同じく3個以上指定可能。
floor(x), ceil(x)・・・整数に切り捨てと切り上げ。小数点以下桁数は指定できないぽい。
sign(x)・・・符号。プラスなら1、マイナスなら-1、0なら0。
日付関連
time・・・UNIX時刻。1970年1月1日からの経過秒数。
minute・・・現在時刻の分(0~59)。
hour・・・現在時刻の時間(0~23、UTC時刻)。
day_of_week()・・・曜日。月曜が0、日曜が6。
あとは論理演算子(andとかor)、算術演算子(+とか)、比較演算子(<とか)などが存在します。省略します。
所感
価格は、基本的には「〇〇分前の価格」しか取得できません。
現状だと、たとえばOHLC(4本値、ローソク足)によるバックテストを行ったとしても、精度よく実際の運用に乗せるのは難しいでしょう。
また、QuantZoneは約15秒に1回実行されます(最近では約1分に1回になっている、という情報を頂きましたので、別記事で検証します)。
このタイミングによって現在価格がずれたりするでしょうし、不利な執行をせざるを得ないかもしれません(たとえば、00分00秒ぴったりに執行したほうが、00分10秒で執行するよりも有利、ということはよくあります)。
これらの制約から、精度が必要なストラテジーではなく、ざっくりとした適当な運用でも問題ない「おおらかなストラテジー」を検討する必要があるでしょう。
執行面で言うと、おそらく成行で約定させるような方法だと、ストラテジーの成績が良いものほど劣化が進みやすい気がします。
指値を離したところに置くようなストラテジーのほうがやりやすいでしょう。
どのみち、コスト計測をしっかり行い、劣化度合いをしっかりウォッチする必要があると思います。
できそうなこと・難しそうなこと
正直、移動平均を求めるのも厳しいです。平均価格は分単位でしか求められません。
このため、例えば1時間足の24期間移動平均求めようとすると、以下のような辛い状況になります。
(
price("BTC-PERP", 60*0)+
price("BTC-PERP", 60*1)+
price("BTC-PERP", 60*2)+
price("BTC-PERP", 60*3)+
price("BTC-PERP", 60*4)+
price("BTC-PERP", 60*5)+
price("BTC-PERP", 60*6)+
price("BTC-PERP", 60*7)+
price("BTC-PERP", 60*8)+
price("BTC-PERP", 60*9)+
price("BTC-PERP", 60*10)+
price("BTC-PERP", 60*11)+
price("BTC-PERP", 60*12)+
price("BTC-PERP", 60*13)+
price("BTC-PERP", 60*14)+
price("BTC-PERP", 60*15)+
price("BTC-PERP", 60*16)+
price("BTC-PERP", 60*17)+
price("BTC-PERP", 60*18)+
price("BTC-PERP", 60*19)+
price("BTC-PERP", 60*20)+
price("BTC-PERP", 60*21)+
price("BTC-PERP", 60*22)+
price("BTC-PERP", 60*23)
)/24
これを実行してみると、文字数制限によりある時点の長さからエラーになります。
おそらくこの文字数制限の他にも、使っている関数・変数の数にも制限がありそうです(50個で限界ぽい)。
例えこれがエラーにならなかったとしても、最大値・最小値は「直近〇〇分の最大値(最小値)」でしかとれないため、単純にはできそうにありません(変数を使ったやり方でできないかを次回検証してみます)。
このように、いわゆるOHLC(始値・高値・安値・終値)を取得するのも一苦労です。
タイムフレーム(1分足、15分足、1時間足とか)を指定した4本値を使いたくてたまりません。
一方、以前QuantZoneで回転ボットを作ったときは、〇時間の最高値から〇%下がったところに指値を出す、みたいなことをやっていました。
このような価格の騰落率をベースにした単純なものであれば、QuantZoneのみで実行できます。
この先、本企画ではできることの中から選択してやっていくのですが、一縷の望みを賭けてFTXチームにQuantZoneの拡張をお願いしてみようと思います。
頼んだで、FTXさん…!!
FTXにお願いしてみること
4本値を取得したい。
open_price("BTC-PERP", "1h", 3) みたいにして3本前の1時間足のOpen価格をとれる、みたいな。max_price、min_price、average_priceにオフセットがほしい。
max_price("BTC-PERP", 60, 15) みたいにして15分前の段階からの60分間の最高値をとれる、みたいな。floor関数とceil関数は小数点桁数を指定したい。
floor(x, 2) みたいにして小数点以下桁数を指定して切り捨て、みたいな。average_priceは、タイムフレームを指定できたらなぁ
average_price("BTC-PERP", "1h", 24) みたいなベスト板は、厚みを取得したい。
bid_size("BTC-PERP") みたいなDepth(ある枚数を取引するのにどのくらいの板が必要か)を取得したい。
bid_depth("BTC-PERP", 10) みたいにして10枚成行したいときの板の枚数(あるいはベスト価格からその板までの差分)を取得できたらなぁ
とりあえず以上。
QuantZone数式一覧
QuantZoneの数式一覧のスクリーンショットです。
・・・
追記(2022年11月9日)
本企画の運用で利用しているFTX Japanの母体であるFTXの経営状況が不透明になっています。
筆者の観測によれば、FTXおよび関連会社のAlameda ResearchがFTTトークン(FTXが発行したトークン)を担保に運用を行っており、リーク記事やBinance CEOによるFTT売却ツイートを発端に資金引き出しの取り付け騒ぎが起こった模様です。
11/9現在、FTXはBinanceによる救済合併に舵を切っています。
FTX Japanは日本国内で登録済みの暗号資産交換事業者ですので、顧客資産は分別管理・保護されています。
本企画自体は続行する予定(場合によってはFTX以外を利用します)ですが、状況に応じて方針を転換する可能性があります。
この記事が気に入ったらサポートをしてみませんか?