ダイナミック・キャンドル・ディレクション・戦略

作者: リン・ハーンチャオチャン開催日:2023年10月25日 16:57:05
タグ:

img

概要

この戦略は,過去N個のキャンドルの開通価格と比較して閉じる価格を分析することによって,将来のキャンドルの方向性を決定します.キャンドルの方向信号に基づいて,ロングまたはショートポジションを取ります.

戦略の論理

この戦略の基本的な論理は

  1. 解析するキャンドルの数を決定するために NUM_CANDLES パラメータを設定します.

  2. 単一のキャンドルの方向を決定する関数 candle_dir を定義します. close>openは上昇, close

  3. 過去の NUM_CANDLES ろうそくで特定の方向を持つろうそくの数を数えるために関数 count_candles を定義する.

  4. 過去の NUM_CANDLES ろうそくの上昇,下落,中性ろうそくの数を数え,アップ,dns,neu に保存する.

  5. インディックインジケーターを定義します その値はups-dns plus/minus neu に等しいです

  6. 長期/短期エントリをインディック指標に基づいて決定する.

特定の数のキャンドルのキャンドル方向を分析することによって,この戦略は,取引決定のための将来のキャンドル方向の確率を推定する.NUM_CANDLESは,戦略の感度を調整するためにサンプルサイズを制御する.

利点分析

  1. 戦略の論理は明確で 理解し,解釈し,検証しやすい.

  2. 計算コストを削減するだけです

  3. NUM_CANDLES パラメータを調節して感度を調整する.

  4. すべての製品と時間枠に適用され,高度な適応性があります.

  5. 最良の組み合わせを見つけるためにパラメータを最適化します

リスク分析

  1. 市場を操作できず 取引が過剰になる可能性があります

  2. 適切なサンプル期間は信号遅延を引き起こす可能性があります. NUM_CANDLESは注意深く調整する必要があります.

  3. トレンド逆転に適応できず トレンド逆転で損失のリスク

  4. 過剰な取引を避けるため,取引コストの影響は考慮する必要があります.

  5. パラメータ最適化で過剰なフィッティングを注意し,マルチマーケットの検証が必要です.

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

  1. ストップ・ロスを制限・ロストに追加してみてください

  2. 逆トレンド取引を避けるためにトレンドインジケーターと組み合わせる.

  3. 安定性を高めるため サンプルサイズを増やしたり 短い時間枠を使用します

  4. 勝率を向上させるために 多市場複合を検討します

  5. 自動パラメータ最適化のために機械学習を利用します

結論

この戦略は,明快で単純な論理で,キャンドル方向を分析することによって取引方向を決定する. センシビリティはパラメータチューニングを通じて制御できる. 利点は単純性,低要求,幅広い適応性だが,いくつかのリスクが存在し,安定性を向上させるためにさらなる最適化が必要である. 全体的に,この戦略は定量的な取引のためのシンプルで実践的なアプローチを提供します.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Refined CandleCounter Strategy by origo", overlay=true)

// how many candles to count
NUM_CANDLES = 7

// determine candle direction
candle_dir = close > open ? 1 : (round(close-open) == 0 ? 0 : -1)

// return # of candles with a given direction
count_candles(dir, max) =>
    count = 0
    for i = 0 to max
        if candle_dir[i] == dir
            count := count + 1
    count

ups = count_candles(1, NUM_CANDLES)
dns = count_candles(-1, NUM_CANDLES)
neu = count_candles(0, NUM_CANDLES)

indic = ups-dns


if indic > 0
    indic := indic+neu
else
    indic := indic-neu

plotarrow(neu, title="UP vs DN")

longCondition = (indic) > 0
shortCondition = (indic) <= 0

strategy.entry("buy", strategy.long, 1, when = longCondition and not shortCondition)
strategy.entry("sell", strategy.short, 1, when = shortCondition and not longCondition)


もっと