移動平均と移動平均に基づく、徹底的なストッププロフィットとストップロス戦略


作成日: 2023-12-21 12:26:18 最終変更日: 2023-12-21 12:26:18
コピー: 0 クリック数: 625
1
フォロー
1623
フォロワー

移動平均と移動平均に基づく、徹底的なストッププロフィットとストップロス戦略

概要

この戦略は,均線と移動平均の金叉デッドフォークをベースにポジションを開設し,横断の方法を使用してストップ・ストローを設定します.主な特徴は:

  1. 均線システムで市震をフィルターする
  2. モバイルストップ・ロスを採用し,ダイナミックなマネジメントを実現
  3. 配置可能なポジションフィルターで,一方的なポジション開設を防ぐ

戦略原則

この戦略は主に4つの部分から構成されています.

  1. 均線システム

平均線の黄金のクロスとデッドフォークを使ってトレンドを判断し,波動市場をフィルターします.

  1. 移動停止停止

利潤をロックし,リスクを制御するために一定割合の移動ストップ・ロスを使用し,資金のダイナミックな管理を実現します.

  1. ポジションフィルター

ポジションのフィルターを開くかどうかを設定する. 前回のポジションが多頭であれば,次のシグナルが空頭でポジションを開く必要があります.

  1. ATRの停止

ATRを使用すると,最大ストップの範囲を制限し,過剰なストップを避ける.

具体的には,戦略は,まず均線を計算し,均線に黄金の交差点が現れたときに多行し,死叉時に空きをする.入場後,一定の割合で移動ストップとストップラインを設定する.価格がストップラインに触れた場合はストップする.ストップラインに触れた場合やATRのストップ範囲を超えた場合はストップする.

戦略的優位性

この戦略の利点は以下の通りです

  1. 構成可能

戦略の多くのパラメータは構成可能であり,ユーザーは自分の取引スタイルに応じて調整することができます.

  1. 資金管理の良さ

モバイルストップストップとATRストップを使用し,単一のストップの幅を効果的に制御し,優れた資金管理を実現します.

  1. トレンドマーケットに適している

平均線戦略は,それ自体により傾向が強い市場に適しており,波動を効果的にフィルターすることができる.

リスクと対策

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

  1. トレンド判断の誤り

平均線自体は,複雑な状況の判断は完璧ではないので,誤判が発生する可能性がある.このとき,平均線パラメータを適切に調整するか,または他の指標と組み合わせて判断するべきである.

  1. 被害を抑えるのは過激すぎる

移動止損は震動中に否定される可能性があり,ATRパラメータと組み合わせて止損範囲を設定する.

  1. 独占のリスク

ポジションのフィルターを開設することは取引頻度に影響を与え,長期にわたって単独のポジションを保持することは追加のリスクをもたらす可能性があります.

戦略最適化の方向性

この戦略の主要な最適化方向は以下の通りです.

  1. パラメータ最適化

平均線期数,ATRパラメータ,ストップ・ストップ・損失比率などのパラメータを調整し,戦略の効果を最適化する.

  1. 追加した指標

CMF,OBVなどの指標を追加して,資金の流れを判断し,過度の止損を避ける.

  1. 他の戦略を組み合わせる

トレンドが安定した後に追跡するブレイクなどの戦略を組み合わせれば,よりよい効果が得られます.

要約する

この戦略は,全体として,均線フィルターと移動ストップ・ストップの方法によって,トレンドベースのダイナミックな資金管理を実現している.配置性が強く,合理性のある投資家が自分のスタイルに合わせて使用する.一般的な定量化戦略として,最適化の余地が広く,深入な研究に値する.

ストラテジーソースコード
/*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)