トレーディングは芸術であり、芸術はインスピレーションから生まれるとよく言われます。そこで今日は、Inventor の定量データ再生機能を使用して、独自の取引のインスピレーションを見つける方法を皆さんにご紹介したいと思います。
私たちが通常インスピレーションと呼ぶものは、思考プロセス中に人々が即座に経験する創造的な状態を指します。トレーダーにとって、脳の左半球は戦略の作成、資本の配分、パラメータの設定など、一連のルールの策定を完了します。こうした取引のインスピレーションや市場感覚は、脳の右半球から生まれます。
「マーケットフィーリング」という言葉を聞いたことがある人は多いでしょう。それは、今起こっていることがまるで馴染み深いものであるかのような、なんとも言えない感覚です。取引の際、この第六感のような直感は、論理的推論や分析に基づくものではないものの、トレーダーが将来の市場動向を予感して売買の決定を下すよう促します。
市場感覚とは、部外者にとっては、何もしなくても勝てる不思議な才能であり、それがあれば市場で足場を築くことができるのです。実際、マーケットセンスは脳による主観的な取引経験の要約であり、何年にもわたるマーケットの観察を通じて得られた漠然とした予測感覚です。
厳密に言えば、インスピレーションは市場感覚と完全に同じではありませんが、市場で何千回も経験を積めば、誰もが市場をより深く理解し、戦略を立てることに長けるようになると私は信じています。したがって、この才能を身につけて、より多くの取引戦略を開発したい場合は、機会が得られるまで練習する以外に方法はありません。多数の取引を通じてのみ、取引システムを完成させることができます。
しかし、国内商品先物や株式は1日数時間しか取引時間がありません。実際の取引を通じて相場観を磨き、自分なりの利益モデルや取引ルールを作り、条件反射を無意識に鍛えれば、成功を達成するのは難しい。私にはそれができない。より長い時間コストを支払うことに加えて、ほとんどのトレーダーは資本損失のコストも負担しなければなりません。この問題を解決するために、発明者らはデータ再生機能を定量的に開発しました。
データ再生機能は取引所の取引時間に制約されることなくトレーニングでき、さまざまな商品先物やデジタル通貨の品種をサポートしています。市況は手動または自動で再生でき、過去の市況の開始時間と終了時間、再生速度を自由に設定できます。 Kラインデータ再生方式を一般的に使用する他のソフトウェアと比較して、Inventor Quantitativeはティックレベルのデータ再生方式を使用しており、これは実際の取引に非常に近いバックテスト環境であり、価格とボリュームデータを再現し、トレーダーが取引に没頭できるようにします。経験。
Inventor Quantitative の公式サイト (fmz.com) を開き、登録してログインした後、コントロール センターの [データ探索] をクリックして、データ再生機能ページを表示します。 4つのオプションボックスと選択ボタンがあります。まず、選択ボタンをクリックして、リアルタイム再生をサポートする品種のみを表示します。次に、左上隅で再生する品種を選択し、開始と終了を選択します。次の 2 つのオプション ボックスでデータの時間を指定します。データの時間範囲をリアルタイム再生として選択し、最後に右端の [Go] ボタンをクリックしてデータ再生機能を開始します。
データ ラベルの下に 3 つのセクションがあります。左側には取引履歴があり、実行されたすべての注文が時系列で表示されます。中央には、買いと売りの両方について 20 レベルの深さを持つ市場データがあります。右側にはデータ再生コントロール領域があり、メディア プレーヤーを使用するのと同じくらい簡単に、手動および自動のデータ再生方法を選択できます。
位置インデックスを前後にドラッグして、データ再生の開始時間をすばやく選択できます。
下部では、カーソルを右または左に動かすことで、データの再生速度を制御することもできます。時間単位はミリ秒です。データの再生を速くしたり遅くしたりできます。
価格変動に影響を与える要因は数多くありますが、その中には、世界経済環境、国家のマクロ経済政策、関連する産業政策、需給関係、国際情勢、金利と為替レート、インフレとデフレ、市場心理、未知の要因などがあります。 、最終的な市場状況上記の価格は、強気派と弱気派の競争の結果です。買い手が売り手より多い場合は、価格は上昇します。逆に、売り手が買い手より多い場合は、価格は下落します。その後は、取引戦略を立てるために価格を分析するだけです。
発明者による過去 1 か月間の Binance Exchange での btc_usdt 取引ペアの定量的な再生を通じて、市場が急騰または急落したとき、Tick データ注文帳のロング側とショート側の注文量は明らかに非対称であることがわかりました。市場が急上昇すると、ロング注文の量はショート注文の量よりも大幅に大きくなります。一方、市場が急落すると、ショート注文の量はロング注文の量よりも大幅に小さくなります。では、注文簿の注文数に基づいて、短期間での価格の上昇と下降を予測できるのでしょうか?
答えはイエスです。
ディープティックデータを収集し、ロング注文とショート注文の量を計算して比較することができます。ロング注文とショート注文の合計量が大きく異なる場合、それは潜在的な買いまたは売りの機会である可能性があります。例えば、ロング注文の数がショート注文のN倍である場合、市場のほとんどの人が強気であると想定でき、短期的に価格が上昇する確率が高まります。ショート注文の数がN倍である場合、ロング注文の2倍の価格で、現時点では市場のほとんどの人が弱気であると想定でき、今後短期的に価格が下落する可能性が高まります。
上記の戦略ロジックに従って、コードで実装を開始します。順番に開きます: fmz.com Web サイト > ログイン > コントロール センター > ポリシー ライブラリ > 新しいポリシー > 右上隅のドロップダウン メニューをクリックし、Python 言語を選択してポリシーの記述を開始します。この戦略は指導の出発点に過ぎないので、できるだけ簡潔にまとめるようにしました。以下のコード内のコメントに注意してください。
ステップ1: ポリシーフレームワークを作成する
# 策略主函数
def onTick():
pass
# 程序入口
def main():
while True: # 进入无限循环模式
onTick() # 执行策略主函数
Sleep(1000) # 休眠1秒
戦略を書くときは、家を建てるときに最初に骨組みを作り、次に壁を建てるのと同じように、大きなものから小さなものへと書く必要があります。このフレームワークでは、main 関数と onTick 関数の 2 つの関数を使用します。 main関数はプログラムのエントリポイントであり、ここからプログラムが実行され、その後無限ループモードに入り、onTick関数を繰り返し実行します。次に、戦略の内容を onTick 関数に書き込む必要があります。
ステップ2: グローバル変数を書く
vol_ratio_arr = [] # 多空挂单比率数组
mp = 0 # 虚拟持仓
vol_ratio_arrがグローバル変数として定義されている理由は、私の戦略ではティックデータの期間のロングとショートの注文の比率を収集する必要があるためです。onTick関数にvol_ratio_arr変数を配置すると、ループ。パターンでは、特定の条件が満たされた場合にのみ変数の値が変更されます。最も合理的なアプローチは、変数をループの外側に配置することです。
ポジション管理は売買ロジックに関わるため非常に重要であり、一般的にスポット取引では口座を取得して保有する通貨ペアを計算します。コードを簡素化するために、売買ロジックを制御するグローバル仮想ポジション変数がここで直接定義されています。
ステップ3: 現在のロングショート比率を計算する
depth = exchange.GetDepth() # 获取深度数据
asks = depth['Asks'] # 获取卖价数组
bids = depth['Bids'] # 获取买价数组
asks_vol = 0 # 所有卖价挂单
bids_vol = 0 # 所有买价挂单
for index, ask in enumerate(asks): # 遍历卖价数组
# 线性计算所有卖价挂单
asks_vol = asks_vol + ask['Amount'] * (20 - index)
for index, bid in enumerate(bids): # 遍历买价数组
# 线性计算所有买价挂单
bids_vol = bids_vol + bid['Amount'] * (20 - index)
bidask_ratio = bids_vol / asks_vol # 计算多空比率
ご存知のとおり、デジタル通貨には通常20段階のデプスデータがあるため、ロングとショートの注文を合計してロングとショートの比率を計算できます。この値が1より大きい場合、強気の人の方がショートの人よりも多くなります。弱気。これは、価格が将来的に短期的に上昇することを示しています。この値が1未満の場合は、弱気な人の数が強気な人の数より多いことを意味し、価格が将来的に下落することを示しています。将来的には短期的に。
しかし、1つだけ区別する必要があることがあります。保留中の注文が市場価格に近いほど、強気または弱気の感情が強くなります。たとえば、最初のレベルで出された買い注文は、2番目のレベルで出された買い注文よりも明らかに強い強気の感情を示しています。 20レベルです。したがって、保留中の注文を蓄積する際には、20 件の注文に線形に異なる重みを与える必要があり、それがより合理的になります。
ステップ4: 一定期間にわたるロングショート比率を線形計算する
global vol_ratio_arr, mp # 引入全局变量
vol_ratio_arr.insert(0, bidask_ratio) # 把多空比率放到全局变量数组里面
if len(vol_ratio_arr) > 20: # 如果数组超过指定长度
vol_ratio_arr.pop() # 删除最旧的元素
all_ratio = 0 # 临时变量,所有多空挂单比率
all_num = 0 # 临时变量,所有线性乘数
for index, vol_ratio in enumerate(vol_ratio_arr): # 变量全局变量数组
num = 20 - index # 线性乘数
all_num = all_num + num # 线性乘数累加
all_ratio = all_ratio + vol_ratio * num # 所有多空挂单比率累加
ratio = all_ratio / all_num # 线性多空挂单比率
ロングショート比率は、累積ロング注文を累積ショート注文で割ることで得られますが、これは1ティックのデータのみです。1ティックのデータのみに基づいて売買取引を決定することは賢明な選択ではないかもしれません。なぜなら、常に変化する市場では、ティックによって市場のトレンドが変わる可能性があるからです。ティックデータは説得力がありません。したがって、一定期間のティック データを収集し、線形計算を使用して公正価値を取得する必要があります。
ステップ5: 注文する
last_ask_price = asks[0]['Price'] # 最新卖一价,用于买入的价格
last_bid_price = bids[0]['Price'] # 最新买一价,用于卖出的价格
if mp == 0 and ratio > buy_threshold: # 如果当前无持币,并且比率大于指定值
exchange.Buy(last_ask_price, 0.01) # 买入
mp = 1 # 设置虚拟持仓的值
if mp == 1 and ratio < sell_threshold: # 如果当前持币,并且比率小于指定值
exchange.Sell(last_bid_price, 0.01) # 卖出
mp = 0 # 重置虚拟持仓的值
注文時に価格を指定する必要があるため、購入時には最新の売り価格、販売時には最新の入札価格を直接使用できます。最後に、注文が発注され取引が完了したら、仮想ポジションの値をリセットします。
上記は、データ再生機能に基づいて開発された線形注文フロー戦略のコード分析です。取引の初心者の場合、データ再生機能は、ゼロコストで取引を学習し、取引を理解する時間を短縮するのに役立ちます。通常、実際の取引やシミュレーション取引で取引を習得するには数年かかります。初期の結果が見えています。データ再生機能を使用すると、数週間で同じ効果が得られ、時間を無駄にすることなく損失を最小限に抑えた取引を習得できます。上級トレーダーにとって、動的レビューは過去の問題の分析、取引戦略の検証と改善、トレーダーの戦略に対する信頼の向上、新しい戦略のインスピレーションの創出に役立ちます。