ダブル移動平均逆転取引戦略は,短期間と長期間の単純な移動平均を計算することによって取引信号を生成する.短期間移動平均が長期間移動平均を上回るときに長行し,短期間移動平均が長期間移動平均を下回るときに短行する.この戦略はトレンドフォロー戦略カテゴリーに属している.
この戦略は,入力パラメータを通じて異なる期間の長さの2つの単純な移動平均値を設定し,短期間MAは高速線と呼ばれ,長期間MAはスローラインと呼ばれます.高速線は価格変化に早く反応し,短期的なトレンドを捉え,スローラインは価格変化にゆっくり反応し,短期的な市場ノイズをフィルタリングし,主要なトレンドを捉えます.高速線がスローラインを越えると,上昇傾向が強化され,ロングポジションが取られます.高速線がスローラインを下に越えると,ダウントレンドが強化され,ショートポジションが取られます.
ストラテジーは,SMA (スローライン) とファストラインに結果を割り当て,SMA (スローライン) を使って2つのMAを計算する.MASは閉じる価格に基づいて計算される.閉じる価格がxSMAを超えると,ロングポジションを取られる.閉じる価格がxSMAを下回ると,ショートポジションを取られる.ストラテジーはまた,指定された時間範囲内でのみ取引信号を生成するように,取引時間範囲を制限する.
トレープ・プロフィートとストップ・ロストポイントは,各取引に設定され,価格がトレイプ・プロフィートまたはストップ・ロストレベルに達するとすぐに利益が取られ,またはストップ・ロスは起動される.一方,戦略は,バーカラー関数を使用してバー上で価格対MA関係をプロットする.バーは,ロングポジションでは緑色,ショートポジションでは赤色,フラットであれば青色である.
リスクは,MAパラメータを調整し,取利益/ストップ損失戦略を最適化し,時間制限を取り除くか,より合理的な取引時間期間を設定することによって軽減できます. フィルター条件として他の指標も組み込まれるので,誤った信号が多すぎないようにすることができます.
ダブル・ムービング・平均逆転取引戦略は,全体としてシンプルで実用的なトレンドフォロー戦略である.トレンド方向を特定するためにMAのスムージング効果を最大限に活用し,トレンド信号を生成するために高速/遅いMAを使用する.この戦略は明確な論理で実行しやすいし,初心者が理解するのに適している.しかし,過剰な誤った信号と遅延問題を発生させる可能性があります. 戦略をより堅牢にするためにパラメータ最適化,補助指標を追加などにより改善ができます.正しく使用した場合,この戦略は安定した利益をもたらし,包括的なテストと最適化に価値があります.
/*backtest start: 2023-09-15 00:00:00 end: 2023-10-15 00:00:00 period: 4h 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/ // © HPotter // Simple SMA strategy // // WARNING: // - For purpose educate only // - This script to change bars colors //@version=4 timeinrange(res, sess) => not na(time(res, sess)) ? 1 : 0 strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true) Resolution = input(title="Resolution", type=input.resolution, defval="D") Source = input(title="Source", type=input.source, defval=close) xSeries = security(syminfo.tickerid, Resolution, Source) Length = input(title="Length", type=input.integer, defval=14, minval=2) TriggerPrice = input(title="Trigger Price", type=input.source, defval=close) TakeProfit = input(50, title="Take Profit", step=0.01) StopLoss = input(20, title="Stop Loss", step=0.01) UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false) BarColors = input(title="Painting bars", type=input.bool, defval=true) ShowLine = input(title="Show Line", type=input.bool, defval=true) UseAlerts = input(title="Use Alerts", type=input.bool, defval=false) timeframe = input(title="Time Frame", defval="15") timerange = input(title="Time Range", defval="2300-0800") reverse = input(title="Trade Reverse", type=input.bool, defval=false) pos = 0 xSMA = sma(xSeries, Length) pos := iff(TriggerPrice > xSMA, 1, iff(TriggerPrice < xSMA, -1, nz(pos[1], 0))) nRes = ShowLine ? xSMA : na alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY') alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL') alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position') possig =iff(pos[1] != pos, iff(reverse and pos == 1, -1, iff(reverse and pos == -1, 1, pos)), 0) if (possig == 1 and timeinrange(timeframe, timerange)) strategy.entry("Long", strategy.long) if (possig == -1 and timeinrange(timeframe, timerange)) strategy.entry("Short", strategy.short) if (timeinrange(timeframe, timerange) == 0) strategy.close_all() if (UseTPSL) strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit") strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss") strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit") strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss") nColor = BarColors ? strategy.position_avg_price != 0 and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na barcolor(nColor) plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)