定時オーダー戦略の主な考え方は,ユーザーによって定義された時間点で売買取引を行うことである.この戦略は,ユーザーが正確な時間点を設定できるようにする.この時点で,まず現在のポジションを売却し,その後,現在の価格を下回る1%の制限購入オーダーを配置する.これは,毎日の特定の時間に定期的な再バランスを行うことを可能にします.
この戦略は,最初に入力関数を用いて,ユーザーによって定義されたカスタム時間と分を取得し,その後タイムスタンプ関数を用いてオーダー実行時間を生成します.現在の時間が指定された時間点の後であれば,販売および購入操作が起動されます.
具体的には,この戦略は,まず現在の時間がユーザーによって定義された開始日期範囲内にあるかどうかをチェックします.もしそうであれば,指定されたオーダー実行時間点に達すると,まず現在のポジションを市場価格で販売し,その後現在の価格の99%で制限購入オーダーをします.これは,特定の時間点の現在の価格より1%低い価格で再バランスを達成します.
この戦略の最大の利点は,手動的な介入なしに特定の時間点でポジションを定期的に再バランスすることができ,労働コストを削減することです.また,各再バランスでは,現在の価格よりも少し低い価格で購入し,非常に低い購入優位性を得ることができます.
具体的利点には,以下が含まれます.
完全自動操作で 手作業コストを削減します
特定のタイミングでポジションを定期的に再バランスさせる.
超低価格の購入機会を獲得し,各リバランスで,現在の価格より約1%下回る.
調整可能な再バランス時間,柔軟な調整.
リバランスサイクルのための開始・終了日付をカスタマイズできます.バックテストの最適化に便利です.
この戦略には,注意すべきいくつかのリスクもあります.
定期的な再バランスのタイミングが正しくない場合 より良い購入機会を逃すか 不適切なタイミングで売り切れる可能性があります
購入価格が販売価格より1%だけ低い場合,各リバランスサイクルで十分な非常に低い購入価格の差が上昇しない可能性があります.
売買と購入の両方が市場オーダーであり,一定の格差を伴う可能性があります.
戦略が特定のタイミングでしか機能しない場合,そのタイミングの間には市場管理ができない.
頻繁に再バランスを取ると,比較的高い取引手数料がかかります.
対応する解は:
適切な再バランス時刻を選択し,他の技術指標と組み合わせる.
購入価格のスプレッドパラメータを適度に増加させる.
深い水と低気温の製品を選びます
リスク管理の他の戦略と組み合わせて,再バランス期間の間
利害と取引コストを均衡させるため,再バランスの頻度を適切に制御する.
戦略は以下の側面で最適化できます.
取引製品の日内サイクル特性をベースに再バランス時間選択を最適化する.
不利なタイミングで再バランスを避けるために,他の技術指標を追加します.例えば,移動平均傾向指標を組み合わせます.
利潤と取引コストをバランスさせる 超低価格の購入パラメータを最適化します
リバランス間のポジションを管理するために,ストップ・ロスを引き継ぐ/利益を得ることを採用する.
機械学習アルゴリズムを使用して 履歴データでトレーニングし 自動的に再バランスタイムポイントを最適化します
株式分割や配当などに調整を加えれば タイミングの変化に追いつくことができます
一般的に,タイムオーダー戦略は,定期的な再バランスによって取引プロセスを自動化し,手動操作コストを削減することができます.再バランス時間ポイント選択,購入パラメータ設定,ストップ損失/利益の取得,アルゴリズム改善などの分野で最適化のための大きな余地があります.また,特定の取引リスクの注意を払い,適切なリスク管理措置をとる必要があります. 全体的に,この戦略は効率的な自動再バランスを求める定量的なトレーダーに適しています.
/*backtest start: 2023-08-28 00:00:00 end: 2023-09-27 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © ytrevor //@version=4 strategy("Order At Specified Time", overlay=true) // -- These inputs are for customizing the times of your desired orders -- // customHour = input(title="Hour for Order Execution", type=input.integer, defval=01, minval=00, maxval=24) // customMinute = input(title="Minute for Order Execution", type=input.integer, defval=00, minval=00, maxval=59) targetTime = timestamp("UTC", year, month, dayofmonth, customHour, customMinute, 00) //Order executes at this time inDateRange = (time >= targetTime) and (time <= targetTime) //Orders are placed everyday at 01:00 UTC, or any other time specified via input // -- These inputs are for back testing. Feel free to change the start and end dates via input -- // startDay = input(title="Start Day", type=input.integer, defval=10, minval=1, maxval=31) startMonth = input(title="Start Month", type=input.integer, defval=2, minval=1, maxval=12) startYear = input(title="Start Year", type=input.integer, defval=2021) endDay = input(title="End Day", type=input.integer, defval=22, minval=1, maxval=31) endMonth = input(title="End Month", type=input.integer, defval=3, minval=1, maxval=12) endYear = input(title="End Year", type=input.integer, defval=2021) betweenDates = true // -- Order execution -- // if betweenDates buyPrice = close*0.99 //Buy at 1% lower than selling price strategy.entry("Sell", strategy.short, when=inDateRange) //Sell at 01:00 UTC, or at any other time specified via input strategy.entry("Buy", strategy.long, limit=buyPrice, when=inDateRange) //Buy limit order placed at the same time, 1% lower than selling price