この戦略は,移動平均値の金十字と死十字をベースにポジションを開き,フロアクロスで利益とストップ損失をセットします. その主な特徴は:
戦略は4つの部分からなる.
移動平均系
移動平均値の黄金十字と死十字を使用してトレンドを決定しショックをフィルターします.
引っ越し は 利益 を もたらし,損 を 止める
利益とリスクを制御し,動的な資本管理を実現するために,一定の割合で利益とストップロスを使用します.
位置フィルタリング
位置フィルタリングを有効にするかどうかを設定できます. 前回の位置が長い場合,次の信号は片側保持を避け,位置を開くために短くなければなりません.
ATRストップ損失
ATRを使用することで,ストップ損失の最大範囲を制限し,過剰なストップ損失を避ける.
具体的には,戦略はまず移動平均値,黄金クロスでのロング,死亡クロスでのショートを計算します. 入力後,移動する取利益とストップ損失ラインを一定の割合で設定します.価格が取利益ラインに触れた場合,利益を取ります.ストップ損失ラインに触れた場合,またはATRストップ損失範囲を超えた場合,ストップ損失を設定します.
この戦略の主な利点は以下の通りです.
高度な構成可能性
戦略の多くのパラメータは,ユーザーが取引スタイルに基づいて調整できるように設定できます.
善良な資本管理
移動して利益とストップ損失とATRストップ損失を導入することで,単一のストップ損失の幅を効果的に制御し,優れた資本管理を達成することができます.
トレンドする市場に適しています
移動平均戦略自体は,強いトレンド市場において,ショックを効果的にフィルタリングするのに適しています.
この戦略にはいくつかのリスクもあります:
トレンドの誤った判断
複雑な市場における移動平均値の判断は完璧ではなく,誤った判断が起こる可能性があります.この時点で,移動平均値のパラメータをそれに応じて調整するか,他の指標を組み合わせて動向を判断することができます.
過剰なストップ損失
動いたストップ損失はショックで否定される.ストップ損失範囲を設定するためにATRパラメータを組み合わせなければならない.
単方向の開設リスク
ポジションフィルタリングを有効にすることは,取引頻度に何らかの影響を与える.長期間の片方持有は,追加のリスクをもたらす可能性があります.
主な最適化方向は以下の通りである.
パラメータ最適化
移動平均周期,ATRパラメータ,利益とストップ損失比率,その他のパラメータを調整して戦略のパフォーマンスを最適化します.
インディケーターを追加
CMFやOBVのような指標を追加して 資本流動を判断し 過剰なストップロスを避ける
他の戦略と組み合わせる
傾向が安定した後にトレンドをフォローするためにブレークアウト戦略と組み合わせて より良い結果を得ます
概要すると,移動平均フィルターと移動取利益とストップ損失を通じて,この戦略はトレンドに基づくダイナミックな資本管理を実現する.合理的な投資家が自分のスタイルに従って調整し使用するのに適した高度な構成性があります.普遍的な定量戦略として,最適化の可能性は依然として高く,深入的な研究に値します.
/*backtest start: 2023-11-20 00:00:00 end: 2023-12-11 00:00:00 period: 1h 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/ // © MGULHANN //@version=5 //İchimoku Leading Span 2 Hesaplaması ve Girişleri strategy("Stairs Gain Strategy - MG", overlay=true, margin_long=100, margin_short=100) laggingSpan2Periods = input.int(52, minval=1, title="Leading Periot") displacement = input.int(1, minval=1, title="Displacement") donchian(len) => math.avg(ta.lowest(len), ta.highest(len)) leadLine2 = donchian(laggingSpan2Periods) p2 = plot(leadLine2, offset = displacement - 1, color=#EF9A9A, title="Leading Span B") // İşlem Tekrarını Filtrele filtreUygula = input.bool(true,title="Pozisyon Sıra Filtresi Uygula") //Kar Al / Zarar Durdur Seviyeleri Girişleri zararDurdurmaYuzde = input.float(1.0, title='Zarar Durdurma %', step=0.01) / 100 karAlmaYuzde = input.float(2.0, title='Kar Alma %', step=0.01) / 100 //ATR Hesaplaması atrCarpani = input.float(0.3, title="ATR Çarpanı", step= 0.01) atrDegeri = ta.atr(14) * atrCarpani //ATR Değer Girişleri atrbuyukdeger = input.float(0.01, title="ATR Üst Limit", step=0.01) atrkucukdeger = input.float(0.06, title="ATR Alt Limit", step=0.01) //Buy ve Sell Şartları buycross = ta.crossover(close,leadLine2[displacement-1]) ? atrDegeri > atrbuyukdeger : strategy.position_size == 0 sellcross = ta.crossover(leadLine2[displacement-1],close) ? atrDegeri < atrkucukdeger : strategy.position_size == 0 //KONTROL var sonPozisyonYonu = 0 //Son kapanan pozisyon long ise degiskenin degerini 1 olarak ata if strategy.position_size[1] > 0 and strategy.position_size == 0 sonPozisyonYonu := 1 //Son kapanan pozisyon short ise degiskenin degerini -1 olarak ata if strategy.position_size[1] < 0 and strategy.position_size == 0 sonPozisyonYonu := -1 //eger filtre uygulama seçiliyse ve son pozisyon yönü long ise 'longFiltreSonuc' degiskenine false degeri ata ve bir sonraki pozisyonun long olmasını engelle longFiltreSonuc = filtreUygula ? sonPozisyonYonu == 1 ? false : true : true //eger filtre uygulama seçiliyse ve son pozisyon yönü short ise 'shortFiltreSonuc' degiskenine false degeri ata ve bir sonraki pozisyonun short olmasını engelle shortFiltreSonuc = filtreUygula ? sonPozisyonYonu == -1 ? false : true : true //LONG GİRİŞ strategy.entry("Long", strategy.long, when=buycross and longFiltreSonuc) longKarAl = strategy.position_avg_price * (1 + karAlmaYuzde) longZararDurdur = strategy.position_avg_price * (1 - zararDurdurmaYuzde) strategy.exit("Long Exit","Long",limit=longKarAl, stop=longZararDurdur) //SHORT GİRİŞ strategy.entry("Short", strategy.short, when=sellcross and shortFiltreSonuc) shortKarAl = strategy.position_avg_price * (1 - karAlmaYuzde) shortZararDurdur = strategy.position_avg_price * (1 + zararDurdurmaYuzde) strategy.exit("Short Exit","Short",limit=shortKarAl, stop=shortZararDurdur) //Kar Al ve Zarar Durdur Seviyelerinin Grafikte İşaretlenmesi plot(strategy.position_size != 0 ? strategy.position_avg_price : na, color=color.navy, linewidth=2, style=plot.style_linebr, title="İşleme Giriş Seviyesi") plot(strategy.position_size > 0 ? longKarAl : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Long Kar Alım Seviyesi") plot(strategy.position_size > 0 ? longZararDurdur : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Long Zarar Durdurma Seviyesi") plot(strategy.position_size < 0 ? shortKarAl : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Short Kar Alım Seviyesi") plot(strategy.position_size < 0 ? shortZararDurdur : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Short Zarar Durdurma Seviyesi") //plotshape(buycross,size=size.small,style=shape.labelup,location=location.belowbar,color=color.green,text="Al", offset = displacement-1, textcolor=color.white) //plotshape(sellcross,size=size.small,style=shape.labeldown,location=location.abovebar,color=color.red,text="Sat", offset = displacement-1, textcolor=color.white)