複数の指標に基づく定量的な取引戦略

作者: リン・ハーンチャオチャン開催日:2023年10月25日 18:06:44
タグ:

img

概要

この戦略は,長期および短期取引の決定をするために複数の技術指標を組み合わせます.主にボリンジャーバンド,RSI,ADXおよび他の指標を使用し,トレンド方向を決定するために移動平均値を使用します.

戦略の論理

この戦略は,主にボリンジャー帯を使用して価格変動を判断する. 狭める帯は,ブレイクアウトにつながる可能性のある変動が減少することを表しています. RSIは,過剰購入および過剰販売状態を特定するために使用されます. RSIが70を超えると過剰購入され,30を下回ると過剰販売されます.帯が狭くなってRSIが限界に近づくと,逆取引が検討されます.

ADXは,トレンド強さを評価するために使用される.高 ADXは,トレンドトレードを好む強いトレンドを表す.低 ADXは,平均逆転を考えると,明確なトレンドを表さない.最後に,移動平均は,長期的なトレンド方向を定義する.アップトレンドは,ダウントレンドは,ショートに好む.

RSIは,低トレンドで短トレンドを加える.低トレンドでは短トレンドを加える.指標を組み合わせることでシステムの強度が向上する.

利点分析

多指標戦略には以下の利点があります

  1. インディケーターを組み合わせることで,正確性と信頼性が向上します.単一のインディケーターは誤った信号に易くなりますが,複数のインディケーターは信号を検証し,悪い取引を避けます.

  2. トレンド・トレードとレンジ・トレードの両方を考慮し,異なる市場条件に適応できる.トレンド・トレードは大きな動きを狙っている.レンジ・トレードは小さな利益を狙っている.

  3. ロングとショートでは 方向性リスクが低く 極端な動きは避けられます

  4. 取引がうまくいかない場合 損失を制限します

  5. パラメータ最適化は 変化する市場に適応することで 戦略を継続的に改善します

リスク分析

この戦略にはいくつかのリスクもあります:

  1. より多くの指標が複雑さを高め,不適切な設定が性能を低下させる.広範なテストと最適化が必要である.

  2. 基本的要素を無視しながら技術的要素に過度依存することは,不正確な信号を引き起こす可能性があります.指標の誤った信号は慎重に扱わなければなりません.

  3. 市場が既に動き始めている可能性があり 追いかけるリスクが浮上しています 引き下げを許すことは賢明です

  4. 双方向取引は頻度を増し,コストと圧力を高めます.ポジションのサイズ管理が必要です.

  5. カーブ・フィッティングのリスクは存在します. 耐久性は様々な市場でテストされるべきです.

リスクは,厳格なストップ・ロース,慎重なポジションサイズ,合理的なレバレッジなどによって管理できます. 全体として,この戦略は強力な実用的な価値を持っています.

増進 の 機会

戦略を最適化する方法:

  1. ステップバイス,ランダムまたは遺伝アルゴリズムを使用して最適な値を見つけるために異なるパラメータセットをテストします.

  2. 強力な指標を組み立てます 重要なのは

  3. ポジションサイズモデルを最適化して リスクを動的に管理する.

  4. 機械学習モデルを組み込み 価格動向と動向を予測する

  5. 適応性を向上させるため,異なる製品,時間枠,市場をテストします.

  6. 入口と出口のタイミングを精査して 傾向を早期に把握し 逆転前に退出します

  7. 利益を得たり 損失を制限したりします

  8. 基本的要因と市場構造分析を追加して技術信号をフィルタリングします

概要

この戦略は,複数の指標を解釈することで取引を自動化します.インジケータークロス検証,双方向取引,ストップ損失/利益を取ることなどから利益を得ます.過剰なフィッティングおよび誤った信号には注意が必要です.継続的な最適化とテストは,量子取引戦略の未来を代表する堅牢で実践的なシステムに変えることができます.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 2h
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/
// © The_Bigger_Bull
//@version=5
strategy("Best TradingView Strategy", overlay=true, margin_long=0, margin_short=0)
//Bollinger Bands
source1 = close
length1 = input.int(15, minval=1)
mult1 = input.float(2.0, minval=0.001, maxval=50)
basis1 = ta.sma(source1, length1)
dev1 = mult1 * ta.stdev(source1, length1)
upper1 = basis1 + dev1
lower1 = basis1 - dev1
//buyEntry = ta.crossover(source1, lower1)
//sellEntry = ta.crossunder(source1, upper1)

//RSI
ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "Bollinger Bands" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")

up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"

//plot(rsi, "RSI", color=#7E57C2)
//plot(rsiMA, "RSI-based MA", color=color.yellow)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")
bbUpperBand = plot(isBB ? rsiMA + ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Upper Bollinger Band", color=color.green)
bbLowerBand = plot(isBB ? rsiMA - ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Lower Bollinger Band", color=color.green)
fill(bbUpperBand, bbLowerBand, color= isBB ? color.new(color.green, 90) : na, title="Bollinger Bands Background Fill")

//ADX

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up1 = ta.change(high)
	down1 = -ta.change(low)
	plusDM = na(up1) ? na : (up1 > down1 and up1 > 0 ? up1 : 0)
	minusDM = na(down1) ? na : (down1 > up1 and down1 > 0 ? down1 : 0)
	truerange = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
	minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)




out = ta.sma(close, 14)

sma1=ta.sma(close,55)

ema200=ta.ema(close,200)



longCondition = (out>sma1) and ta.crossover(source1, lower1)

if (longCondition )
    strategy.entry("long", strategy.long)
    
shortCondition = (out<sma1) and ta.crossunder(source1, lower1)

if (shortCondition )
    strategy.entry("short", strategy.short)
    
    
stopl=strategy.position_avg_price-50
tptgt=strategy.position_avg_price+100
stopshort=strategy.position_avg_price+50
tptgtshort=strategy.position_avg_price-100

strategy.exit("longclose","long",trail_offset=5,trail_points=45,when=ta.crossover(sma1,out))
strategy.exit("shortclose","short",trail_offset=5,trail_points=45,when=ta.crossover(out,sma1))

    
//if strategy.position_avg_price<0
    
    
plot(sma1 , color=color.blue)
plot(out, color=color.green)
//plot(ema200,color=color.red)


    
    


もっと