二重移動平均戦略に基づく


作成日: 2024-02-21 14:43:26 最終変更日: 2024-02-21 14:43:26
コピー: 0 クリック数: 606
1
フォロー
1617
フォロワー

二重移動平均戦略に基づく

概要

この戦略は,トレンドの方向を捉えるために二重移動平均を用いてチャネルを形成する.価格がチャネルを突破すると取引シグナルを生成する.また,RSI指標のフィルターによる偽の突破を組み合わせる.ロンドン取引時間のみで,最大5枚,最大損失は2%を超えない.

戦略原則

この戦略は,2つの長さ5の移動平均を用いて,1つは最高価格から計算され,1つは最低価格から計算され,価格チャネルを形成する. 閉盘価格がチャネルを突破する上沿いに多し,チャネルを突破する下沿いに空しする.

偽のブレイクをフィルターするために,RSI指標を導入し,超買超売判断する. RSIが80以上である場合にのみ多出し,20未満の時に空出する.

また,戦略はロンドン取引時間 (午前3時~11時) のみで取引され,最大1日5回のオーダーで,最大損失は株式権益の2%を超えない.

優位分析

トレンドを捉える

双動平均線は,トレンドチャネルを構成し,価格のトレンド方向をよりよく判断します. 価格が上方へチャネルを突破すると,価格の上昇傾向を捉えます. 価格が下方へチャネルを突破すると,価格の下降傾向を捉えます.

偽の突破を減らす

RSIと結合して,超買いと超売り領域を判断することで,価格の揺れによる偽突破を一定程度減らすことができます.

リスクのコントロール

戦略は,主要アクティブな取引時間帯のみで取引し,毎日最大5つの注文で取引頻度を効果的に制御し,最大損失を2%に設定することで,1日の最大損失を許容範囲で制御します.

リスク分析

価格の変動が大きい場合の偽突破のリスク

価格の大幅な波動が発生すると,ある種の偽の突破シグナルが発生し,不必要な取引損失を引き起こす可能性があります.パラメータを調整して最適化するか,フィルタリング条件を追加することで,このリスクを軽減することができます.

固定ストップは リスクをとるのを止めます

戦略は固定数のポイント数ストップスロープを採用し,価格が大幅な波動が発生すると,固定ポイント数ストップスロープは,パーセントまたはダイナミックストップスロープを使用して,設定されやすい.

取引時間制限のリスク

戦略は,固定取引時間のみでポジションを開設し,その時間帯でシグナルが生じなければ,他の時間帯の潜在的な取引機会を逃してしまう.適切な取引時間を拡張するか,リアルタイム状況に応じて動的に調整することを考慮することができます.

最適化の方向

パラメータ最適化

移動平均の長さ,RSIパラメータ,固定ストップストップポイントなどの最適化により,最適なパラメータの組み合わせを見つけることができます.

フィルタリング条件を追加

他の指標や条件を追加して,取引量を増やしたり,ブリンライン通路を縮小したりなど,偽の突破を減らすように,突破シグナルを二次検証することができます.

ダイナミック・ストップ・ストップ

パーセンテージ・ストップやダイナミック・ストップの戦略は,単純に固定ポイント・ストップではなく,一方的な動きのリスクをカバーする上で有効である.

人工的な判断と組み合わせて

信号を人工的にチェックするか,突破が確認された後に入場するだけで,罠を避ける.

要約する

この戦略は,全体的に比較的シンプルで,トレンドの方向を判断するための二重移動平均の経路を構築します.同時に,RSI指標は,部分的な偽突破を効果的にフィルターできます.リスク管理の面では,取引時間を制限し,最大損失は,全体的なリスクを制御できます.最適化スペースは比較的大きく,パラメータ最適化,止損機構のアップグレードなどの面で改善することができます.

ストラテジーソースコード
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-16 23:59:59
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/
// © SoftKill21
//@version=4
strategy(title="Moving Average", shorttitle="MA", overlay=true)
timeinrange(res, sess) => time(res, sess) != 0
len = input(5, minval=1, title="Length")
src = input(high, title="Source")
offset = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
out = sma(src, len)
plot(out, color=color.white, title="MA", offset=offset)

len2 = input(5, minval=1, title="Length")
src2 = input(low, title="Source")
offset2 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
out2 = sma(src2, len2)
plot(out2, color=color.white, title="MA", offset=offset2)

length = input( 5 )
overSold = input( 10 )
overBought = input( 80 )
price = input(close, title="Source RSI")

vrsi = rsi(price, length)

longcond= close > out and close > out2 and vrsi > overBought
shortcont = close < out and close < out2 and vrsi < overSold
tp=input(150,title="tp")
sl=input(80,title="sl")


strategy.entry("long",1,when=longcond)
//strategy.close("long",when= close < out2)
strategy.exit("long_exit","long",profit=tp,loss=sl)

strategy.entry("short",1,when=shortcont)
//strategy.close("short",when=close >out)
strategy.exit("short_exit","short",profit=tp,loss=sl)

// maxOrder = input(6, title="max trades per day")
// maxRisk = input(2,type=input.float, title="maxrisk per day")
// strategy.risk.max_intraday_filled_orders(maxOrder)

// strategy.risk.max_intraday_loss(maxRisk, strategy.percent_of_equity)


// strategy.close_all(when =not timeinrange(timeframe.period, "0300-1100"))