ブレイクアウトフォロートレンド戦略


作成日: 2023-12-08 17:16:34 最終変更日: 2023-12-08 17:16:34
コピー: 1 クリック数: 573
1
フォロー
1621
フォロワー

ブレイクアウトフォロートレンド戦略

概要

この戦略は,価格が突破する高点と低点を設定することで,暗号通貨価格のトレンドを追跡する.価格が最高点を突破するときに多行し,価格が最低点を突破するときに空白し,トレンドのキャプチャを実現する.

戦略原則

この策略は,主に平滑移動平均法加重法によって価格が明らかな上昇または下落の傾向にあるかどうかを判断する.具体的には,それは,一定の周期内の最高価格と最低価格を統計的に計算し,実際の取引価格が統計上の最高価格を超えると,上昇の傾向があると判断し,それを多めにする.実際の取引価格が統計上の最低価格より低ければ下落の傾向があると判断し,それを空にする.

多空の開場価格は,入力パラメータENTRYで設定され,平場価格は,EXITで設定されます.反測時期もパラメータで設定できます.このため,パラメータを調整して最適なコンボの組み合わせを探することができます.

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

  1. 統計の一定周期 (設定可能な) の最高値と最低値
  2. 実際の取引価格が最高価格より高いかどうかを判断する
    1. ENTRY のパラメータで設定された価格レベルで多額のポジションを開きます.
    2. 実際の取引価格が最低価格より低い場合,空白の機会が発生し,EXITパラメータで設定された価格レベルに基づいて空白ポジションを開きます.
  3. 複数のポジションを開設した後,価格がEXITパラメータで設定された価格を下回ると平仓
  4. 空のポジションの開設後,価格がENTRYパラメータで設定された価格より高いときの平仓

この論理回路は,価格の上昇と下降のトレンドを捉え,トレンド追跡を実現します.

戦略的優位性

この戦略の最大の利点は,パラメータの調整により,価格の動向を自動的に捉えることができ,人工的にトレンドの方向を判断する必要はありません.パラメータを適切に設定すれば,暗号通貨の価格変動を自動的に追跡できます.

また,この戦略は量的な取引に適しており,注文を簡単に自動化できます.人工操作を必要とせず,感情的な取引のリスクを軽減し,取引効率を大幅に向上させることができます.

最後に,この戦略は,パラメータを調整することで最大化することもできます.異なるENTRYとEXITパラメータをテストすることで,最適なパラメータを見つけ,最大化することができます.

戦略リスク

この戦略の最大のリスクは,パラメータを正しく設定しないことによって,取引頻度が高くなり,取引費用が増加し,スライドポイントが失われる可能性があることです.ENTRYが低すぎ,EXITが高すぎると,偽の取引信号が生じる可能性があります.

また,パラメータの調整が不適切であれば,価格の傾向を間に合うように捉えることができず,取引の機会を逃してしまうこともあります.これは,大量の反省によって最適なパラメータを見つける必要があります.

最後に,この戦略は,短期市場のノイズに過度に敏感であり,誤った取引信号を生じさせることがあります.これは,適切な取引時間周期パラメータを設定することによって回避する必要があります.

戦略最適化の方向性

この戦略は,以下の方向で改善できる:

  1. ストップロジックを増やします. 損失が一定比率に拡大すると,ストップロジックで退出し,より大きな損失を回避できます.

  2. 移動平均などの技術指標のフィルタリングを追加します. MA,KDJなどの指標を使用して大トレンドを判断し,短期的な騒音が過剰な取引を誘導することを避ける.

  3. 最適化パラメータ設定の論理. ENTRY,EXITパラメータの自適化変化機構を,静的設定ではなく,市場環境に応じてパラメータを調整できるように設定できます.

  4. 機械学習訓練の最適なパラメータを利用する.大量の歴史データ訓練により,現在の市場環境に最適なENTRYとEXIT設定を取得する.

要約する

この戦略は,価格動向を捉えることで取引を自動化する.最大の利点は,取引に対する人間の感情の影響を軽減し,リスクを低減し,効率を向上させることです.また,パラメータを調整して最高の利益のポイントを見つけることができます.

策略の主なリスクは,パラメータの設定が不適切であり,市場のノイズに過度に敏感である.これは,ストーピング,指標フィルタリング,パラメータの自己適応最適化などの手段によって改善する必要がある.

全体として,この戦略はシンプルで効果的なトレンド追跡戦略であり,量化および自動取引に適しています.継続的な最適化により,戦略の安定性をさらに向上させることができます.

ストラテジーソースコード
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
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/
// © JstMtlQC

//@version=4
strategy("Trend Following Breakout",calc_on_order_fills=true,calc_on_every_tick =false, overlay=true, initial_capital=2000,commission_value=.1,default_qty_type = strategy.percent_of_equity, default_qty_value = 100)


/////////////// INPUT ENTRY EXIT
entry= input(100, "ENTRY H/L")
exit= input(50, "EXIT H/L")

/////////////// Backtest Input
FromYear = input(2015, "Backtest Start Year")
FromMonth = input(1, "Backtest Start Month")
FromDay = input(1, "Backtest Start Day")
ToYear = input(2999, "Backtest End Year")
ToMonth = input(1, "Backtest End Month")
ToDay = input(1, "Backtest End Day")

/////////////// Backtest Setting
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => time >= start and time <= finish ? true : false 

/////////////// BUY OPEN PLOT
highestpricelong = highest(high,entry)[1]
plot(highestpricelong, color=color.green, linewidth=2)

/////////////// BUY CLOSE PLOT
lowestpricelong = lowest(high,exit)[1]
plot(lowestpricelong, color=color.green, linewidth=2)

/////////////// SHORT OPEN PLOT
lowestpriceshort = lowest(low,entry)[1]
plot(lowestpriceshort, color=color.red, linewidth=2)

/////////////// SHORT CLOSE PLOT
highestpriceshort = highest(low,exit)[1]
plot(highestpriceshort, color=color.red, linewidth=2)

///////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// CONDITION LONG SHORT //////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////

/////////////// SHORT 

entryshort= crossunder(close, lowestpriceshort)
exitshort= crossover(close,highestpriceshort)

/////////////// LONG 

exitlong= crossover(close, lowestpricelong)
entrylong= crossover(close,highestpricelong)

///////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// LONG and SHORT ORDER //////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////

/////////////// LONG 

if (entrylong)
    strategy.entry("LongEntry", strategy.long, when = window())
if (exitlong or entryshort)
    strategy.close("LongEntry", when=window())

/////////////// SHORT 

if (entryshort)
    strategy.entry("short", strategy.short, when = window())
if (exitshort or entrylong)
    strategy.close("short", when=window())