MACD、RSI、FIBを組み合わせた定量的なビットコイン取引戦略


作成日: 2023-12-26 17:08:03 最終変更日: 2023-12-26 17:08:03
コピー: 0 クリック数: 932
1
フォロー
1623
フォロワー

MACD、RSI、FIBを組み合わせた定量的なビットコイン取引戦略

概要

この策略は,黄金のクロスフィンチ策略と呼ばれるもので,移動平均の技術指標MACD,相対的に強い指標RSI,および黄金の分割線原理のフィボナッチ・リトラクション/拡大理論を組み合わせ,ビットコインなどの暗号通貨に対する量的な取引を実現する.

戦略原則

  1. MACDの指標は買い値と売り上げを判断する
  • MACD快線と慢線を設定したEMA周期は 15 と 30
  • 短線は買点,短線は売点と判断する
  1. RSIは偽信号をフィルターする
  • RSIのパラメータを 50 サイクルに設定します.
  • RSI指標は,MACDが与える偽信号の一部をフィルターするのに役立ちます.
  1. Fibonacci 理論は SUPPORT/RESISTANCE を決定する
  • 最近の最高値と最低値を組み合わせた (例えば38K線)
  • 黄金の分割線の0.5フィボナッチ回帰と拡大位を計算する
  • サポートとレジスタンス位置を判断するために使用できます.
  1. 平均線とRSIは 超買いと超売りを判断します
  • 50周期平均線は,現在超買超売状態にあるかどうかを判断します.
  • RSIは 超買いと超売れを判断する指標です
  1. 逆開拓メカニズム
  • ユーザーに返済するかどうかを選択するオプション
  • マルチ空白ロジックは,ユーザの選択に応じて柔軟に調整できます.

優位分析

この戦略の最大の利点は,全天候で稼働でき,人手操作コストを大幅に削減できることです.また,複数の指標の組み合わせによって勝利率を上げることができ,特に牛市で効果が顕著です.具体的利点は以下の通りです.

  1. 7 について*24時間,自動で,人工の介入なしの取引量
  2. MACDは買い物や売却のタイミングを正確に判断する.
  3. RSIは偽の信号をフィルターします
  4. フィボナッチ理論は取引の意思決定の基盤を高めています
  5. 50 平均線とRSIが超買いと超売りを判断する
  6. 市場変化に適応する為の反動的な調整

リスク分析

この戦略にはいくつかのリスクも存在し,主に大幅の市場情勢の逆転から生じ,このとき止損は効果を発揮することが困難である.さらに,長期間ポジションを保持することにも一定のリスクがある.主なリスクポイントは以下のとおりである.

  1. ストップダメージは近すぎ,防護は難しい
  2. 長期保有によるシステムリスク

対応方法は以下の通りです.

  1. 停止距離を適切に緩め,停止が十分に効果を発揮することを保証する.
  2. ポジション保持サイクルを最適化し,長期にわたるポジション保持のリスクを低減する

最適化の方向

この戦略は以下の方向から最適化できます.

  1. MACD指標のパラメータを最適化して,買入シグナルの正確性を向上させる
  2. RSIのパラメータを最適化し,その実用性を向上させる
  3. 周期を測るフィボナッチ理論の値化
  4. 偽信号の確率をさらに低減するために,さらに多くの波指標を追加しました.
  5. 市場動向を判断する大周期指数

要約する

この戦略は,購入や売却のタイミングを判断する複数の定量指標を統合し,暗号通貨市場の取引を24時間自動化することができる.各指標のパラメータを最適化し,より多くの補助指標を追加することにより,戦略の収益性をさらに向上させることが期待される.この戦略は,ユーザーに大量の人工操作時間のコストを節約することができ,定量化トレーダーは深入な研究と適用に値する.

ストラテジーソースコード
/*backtest
start: 2023-12-18 00:00:00
end: 2023-12-25 00:00:00
period: 10m
basePeriod: 1m
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/
// © onurenginogutcu

//@version=4
strategy("STRATEGY R18-F-BTC", overlay=true, margin_long=100, margin_short=100)

///////////default girişler 1 saatlik btc grafiği için geçerli olmak üzere - stop loss'lar %2.5 - long'da %7.6 , short'ta %8.1

sym = input(title="Symbol", type=input.symbol, defval="BINANCE:BTCUSDT") /////////btc'yi indikatör olarak alıyoruz

lsl = input(title="Long Stop Loss (%)",
     minval=0.0, step=0.1, defval=2.5) * 0.01
     
ssl = input(title="Short Stop Loss (%)",
     minval=0.0, step=0.1, defval=2.5) * 0.01
     
longtp = input(title="Long Take Profit (%)",
     minval=0.0, step=0.1, defval=7.6) * 0.01
     
shorttp = input(title="Short Take Profit (%)",
     minval=0.0, step=0.1, defval=7.5) * 0.01
     
capperc = input(title="Capital Percentage to Invest (%)",
     minval=0.0, maxval=100, step=0.1, defval=90) * 0.01
     
choice = input(title="Reverse ?", type=input.bool, defval=false)

symClose = security(sym, "", close)
symHigh = security(sym, "", high)
symLow = security(sym, "", low)

i = ema (symClose , 15) - ema (symClose , 30) ///////// ema close 15 ve 30 inanılmaz iyi sonuç verdi (macd standartı 12 26)
r = ema (i , 9)

sapust = highest (i , 100) * 0.729 //////////0.729 altın oran oldu 09.01.2022
sapalt = lowest (i , 100) * 0.729  //////////0.729 altın oran oldu 09.01.2022

///////////highx = highest (close , 365) * 0.72 fibo belki dahiledilebilir
///////////lowx = lowest (close , 365) * 1.272 fibo belki dahil edilebilir
simRSI = rsi (symClose , 50 ) /////// RSI DAHİL EDİLDİ "50 MUMLUK RSI EN İYİ SONUCU VERİYOR"


//////////////fibonacci seviyesi eklenmesi amacı ile koyuldu fakat en iyi sonuç %50 seviyesinin altı ve üstü (low ve high 38 barlık) en iyi sonuç verdi
fibvar = 38
fibtop = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50)
fibbottom = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50)

///////////////////////////////////////////////////////////// INDICATOR CONDITIONS

longCondition = crossover(i, r) and i < sapalt and symClose < sma (symClose , 50) and simRSI < sma (simRSI , 50) and symClose < fibbottom
shortCondition = crossunder(i, r) and i > sapust and symClose > sma (symClose , 50) and simRSI > sma (simRSI , 50)  and symClose > fibtop

////////////////////////////////////////////////////////////////

///////////////////////////////////////////STRATEGY ENTRIES AND STOP LOSSES /////stratejilerde kalan capital için strategy.equity kullan (bunun üzerinden işlem yap)


if (choice == false and longCondition)
    strategy.entry("Long", strategy.long , qty = capperc * strategy.equity / close ,   when = strategy.position_size == 0)
   

if (choice == false and shortCondition)
    strategy.entry("Short" , strategy.short , qty = capperc * strategy.equity / close ,  when = strategy.position_size == 0)

if (choice == true and longCondition)
    strategy.entry("Short" , strategy.short , qty = capperc * strategy.equity / close ,  when = strategy.position_size == 0)

if (choice == true and shortCondition)
    strategy.entry("Long", strategy.long , qty = capperc * strategy.equity / close ,   when = strategy.position_size == 0)
    

if (strategy.position_size > 0)
    strategy.exit("Exit Long", "Long", stop=strategy.position_avg_price*(1 - lsl) , limit=strategy.position_avg_price*(1 + longtp))

if (strategy.position_size < 0)
    strategy.exit("Exit Short", "Short", stop=strategy.position_avg_price*(1 + ssl) , limit=strategy.position_avg_price*(1 - shorttp))


////////////////////////vertical colouring signals
bgcolor(color=longCondition ? color.new (color.green , 70) : na)
bgcolor(color=shortCondition ? color.new (color.red , 70) : na)