ダイナミックなピラミッド戦略

作者: リン・ハーンチャオチャン開催日:2023年12月22日14時36分30秒
タグ:

img

概要

ダイナミックピラミディング戦略は,価格が下がるときに追加ポジションをピラミディングすることによって平均保有コストを下げることを目的としています.価格が反転すると損失を軽減し,追加の利益を得るのに役立ちます.この戦略は,ピラミディング条件が引き起こすときに特定の量と間隔で追加ポジションを開きます.一方,リスクを制限するために最大数のピラミディングが設定されています.

戦略の論理

この戦略の基本論理には,次のことが含まれます.

  1. オープンポジション:現在のポジションが0である場合,指定価格でロングポジションを開く.

  2. ピラミッド条件: 現在のピラミッド時間は最大値未満で,価格が前もって設定されたパーセントで最後のエントリー価格を下回る場合,トリガーピラミッド.

  3. ピラミッド方式:ピラミッド量を前者のスケーリング因数で増加させ,スケーリング因数で間隔を減らす.

  4. 利益を得る条件:平均保有価格に基づく利益目標が起動した場合,すべてのポジションを閉じる.

この戦略は,価格の下落でピラミッド化することで,平均コストを動的に低下させる. 傾向が逆転するときに損失を効率的に停止し,利益のためにより多くの余地を残します. 利益を得る条件が起動すると,すべてのポジションは利益で終了します.

利点分析

この戦略の最大の利点は,ピラミッド構造を用いた平均保有コストを下げることで,受け入れられる損失で利益の可能性を高めることです.主な利点は以下の通りです.

  1. 保有コストを大幅に削減することで,損失を止める能力が向上します.引き下げが起こると,低価格で追加買い注文を追加することで,戦略は以前の高いエントリを減らし,全体的なコストを下げます.

  2. コストを下げる後に利益範囲を拡大します.価格が反発すると,利益の可能性は拡大し,利益を得る道を開きます.

  3. 増量,量,間隔等に関するパラメータを設定することによってピラミッド論理のための柔軟なカスタマイズ

  4. 最大ピラミッド回数を制限することで 制御可能なリスクです

リスク分析

この戦略はピラミッド構築により より多くの利益を得る可能性を可能にしますが いくつかのリスクには注意が必要です:

  1. 損失リスク - 前提はピラミディングによる一定損失を承担することである.傾向が持有物に逆行し続ける場合,損失は拡大する可能性があります.

  2. 崖っぷちダイブリスク - 崖っぷちダイブなどの極端な場合,損失は受け入れられる範囲を超えることがあります.合理的なピラミッド設定と停止損失ポイントは重要です.

  3. 遅れたり損なわれたりした利益 - 価格リバウンドは必ずしも利益を得る条件を誘発するわけではありません.これは戦略の欠点です.

  4. パラメータ調整リスク - ピラミッド系数や利益率などのパラメータを不適切な設定すると失敗する可能性があります.

以下 の 措置 は リスク を 軽減 する 助け に なり ます.

  1. 単一のエントリ損失額を制御するために,より低いインクリメントスケール.

  2. ピラミッドの距離を絞り,コスト削減を迅速にする.

  3. ストップ・ロストポイントを 緩やかすぎないように 適切に設定します

オプティマイゼーションの方向性

ピラミッド化により利益の獲得の可能性が高まるという性質を考えると,最適化方向は主にリスク管理の改善と収益性の向上に焦点を当てています.

  1. ピラミッドロジックを改善し,エントリをよりスマートにし,市場状況に適応できるようにします.エントリー信号は変動,価格格差,より多くのメトリックに依存することができます.

  2. 効率を高めるために利益を引き出すメカニズムを最適化します.例えば,利益を引き継ぐ,部分的な閉鎖など,価格の反転を逃す可能性を減らす.

  3. パラメータの自動調整を可能にする機械学習アルゴリズムを導入する. キーパラメータはリアルタイムフィードバックに基づいて静的ではなく動的になります.

  4. ストップ・ロスのメカニズムを追加し,ストップ・ロスの遅れやプロフィート・ストップの注文などの最大損失を制限します.極端な市場イベント下で損失が制御不能になるのを防ぐことができます.

結論

ダイナミック・ピラミッド戦略は,平均保有コストを追加のエントリで低下させ,受け入れられる損失耐性を考慮してより高い利益の可能性を可能にします.この種の戦略は,比較的高いリスク欲求を持つ投資家に有利です.将来の最適化方向は,よりスマートなピラミッド論理,より効率的な利益メカニズムなどにまつわるでしょう.


/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-18 19:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy("DCA Bot Emulator", overlay=true, pyramiding=99, default_qty_type=strategy.cash, commission_value = 0.02)

// Date Ranges
from_month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
from_day   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
from_year  = input(defval = 2021, title = "From Year")
to_month   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
to_day     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
to_year    = input(defval = 9999, title = "To Year")
start  = timestamp(from_year, from_month, from_day, 00, 00)  // backtest start window
finish = timestamp(to_year, to_month, to_day, 23, 59)        // backtest finish window
window = time >= start and time <= finish ? true : false // create function "within window of time"

// Strategy Inputs
price_deviation = input(2, title='Price deviation to open safety orders', maxval=0)/100
take_profit = input(1.5, title='Target Take Profit', minval=0)/100

// base order
base_order  = input(100000, title='base order') 
safe_order  = input(200, title='safe order') 
safe_order_volume_scale  = input(2, title='Safety order volume scale') 
safe_order_step_scale  = input(1, title='Safety order step scale') 

max_safe_order = input(10, title='max safe order') 
var current_so = 1
var initial_order = 0.0

// Calculate our key levels
pnl = (close - strategy.position_avg_price) / strategy.position_avg_price

take_profit_level = strategy.position_avg_price * (1 + take_profit)

// First Position
if(strategy.position_size == 0 and window)
    strategy.entry("Long", strategy.long, qty = base_order/close)
    initial_order := close
    current_so := 1

// Average Down!
if current_so > 0 and close  < initial_order * (1 - price_deviation * current_so * safe_order_step_scale) and current_so <= max_safe_order
    so_name = "SO " + tostring(current_so) 
    strategy.entry(so_name, long=strategy.long , qty = safe_order * safe_order_volume_scale /close)
    current_so := current_so + 1
    
// Take Profit!
strategy.close_all(when=take_profit_level <= close  and strategy.position_size > 0)


もっと