この記事では,複数の移動平均値に基づいたトレンドトレード戦略を紹介しています.この戦略は主にナスダック先物市場に適用され,長期,中期,短期移動平均値との関係で価格位置を分析することによって上向きの市場傾向を把握します.また,すべてのポジションを毎日特定の時間に閉じる.
この戦略は,長期 (デフォルト200期),中期 (デフォルト21期),短期 (デフォルト9期) の3つの単純な移動平均値 (SMA) を採用している. 価格が長期および中期移動平均値を超え,短期移動平均値を超えると購入信号が発信される. オープンポジションがない場合に限ります. リスク管理のために固定ポイントストップ・ゲインとストップ・ロスのレベルも設定します. さらに,すべてのポジションは各取引日17:00に閉じる.
長期 (デフォルト200期),中期 (デフォルト21期),短期 (デフォルト9期) の単純な移動平均を計算する.
現在の価格が長期および中期移動平均値よりも高いかどうかを判断する.
現在の価格が短期移動平均値を超えているか確認します.
条件2と条件3の両方が満たされ,オープンポジションがない場合,買い信号が起動します.
購入後,固定値のストップ・ガインとストップ・ロスのレベルを設定し,価格がいずれかのレベルに達するとポジションを閉じる.
取引日 17:00 にすべてのポジションを閉じる.
シンプルで理解しやすい: 戦略は移動平均値に基づいているため,理解し実行するのが簡単です.
トレンドフォロー: 異なる期間の移動平均値と比較して価格の位置を分析することで,戦略は上向きの市場傾向を効果的に把握します.
リスク管理: 戦略には固定値のストップ・ガインとストップ・ロスのレベルが組み込まれ,個々の取引のリスクを管理するのに役立ちます.
オートマティック ポジション 閉鎖: 戦略は,毎取引日の特定の時間にすべてのポジションを自動的に閉鎖し,一夜間のリスクを回避します.
パラメータ最適化: 戦略のパフォーマンスは移動平均期のパラメータに敏感であり,異なる市場や楽器に最適化する必要があります.
不安定な市場: 不安定な市場環境では,頻繁なクロスオーバー信号は,戦略のパフォーマンスが最適ではない可能性があります.
スリップリスク: 市場が不安定な場合,固定ポイントのストップ・ガインとストップ・ロスのレベルが意図された通りに実行されない可能性があり,スリップリスクが生じる.
ダイナミックストップ・ガインとストップ・ロスト: リスク・リターン比を最適化するために,市場の変動や価格動向に基づいて,ストップ・ガインとストップ・ロスのレベルをダイナミックに調整する.
トレンドフィルター: ADX などの追加的な技術指標を組み込み,トレンドの強さを確認し,不安定な市場での誤った信号をフィルタリングします.
複数のインstrumentへの適応: 異なるフューチャー・インstrumentと市場の特徴に適応するための戦略を精査する.
資金管理:戦略の安定性を高めるため,ポジションのサイズとリスク管理などのより洗練された資金管理規則を導入する.
マルチムービング・平均トレンド・トレーディング・ストラテジーは,異なる期間の移動平均値と比較して価格の位置を分析することによって上向きの市場傾向を把握するシンプルで理解しやすいトレンドフォロー戦略である.この戦略は固定ポイントストップ・ガインとストップ・ロスのレベルを組み込み,リスクを管理するために毎日特定の時間に自動的にすべてのポジションを閉鎖する.しかし,戦略は不安定な市場で劣悪なパフォーマンスを発揮し,パラメータ最適化やスリップリスクなどの課題に直面する可能性があります.将来の最適化は,動的なストップ・ガインとストップ・ロスのレベル,トレンドフィルター,マルチ・インストルメーション,マネーマネジメントに焦点を当てて,戦略の安定性と適応性をさらに向上させることができます.
/*backtest start: 2024-04-01 00:00:00 end: 2024-04-30 23:59:59 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Médias Móveis de MarcosJR", overlay=true) // Inputs para data inicial e final start_year = input.int(2020, title="Ano Inicial") start_month = input.int(1, title="Mês Inicial") start_day = input.int(1, title="Dia Inicial") end_year = input.int(2020, title="Ano Final") end_month = input.int(12, title="Mês Final") end_day = input.int(31, title="Dia Final") // Convertendo dia, mês e ano para timestamp start_date = timestamp(start_year, start_month, start_day, 00, 00) end_date = timestamp(end_year, end_month, end_day, 23, 59) // Condição para verificar se a data está dentro do intervalo especificado date_within_range = true // Parâmetros para os períodos das médias móveis ma_short_period = input.int(9, title="MA Curta") ma_medium_period = input.int(21, title="MA Média") ma_long_period = input.int(200, title="MA Longa") // Definindo médias móveis ma_short = ta.sma(close, ma_short_period) ma_medium = ta.sma(close, ma_medium_period) ma_long = ta.sma(close, ma_long_period) // Plotando as médias móveis no gráfico com espessura aumentada plot(ma_short, color=color.blue, title="MA Curta", linewidth=2) plot(ma_medium, color=color.orange, title="MA Média", linewidth=2) plot(ma_long, color=color.red, title="MA Longa", linewidth=2) // Verificando se o preço está acima das médias móveis above_ma_long = close > ma_long above_ma_medium = close > ma_medium // Verificando se o preço tocou na média móvel curta touch_ma_short = ta.crossover(close, ma_short) // Condições de compra buy_condition = date_within_range and above_ma_long and above_ma_medium and touch_ma_short // Sinais de entrada e saída de compra var float entry_price = na if (buy_condition and strategy.opentrades == 0) // Verifica se não há operações em andamento entry_price := close // Define o preço de entrada ao comprar // Parâmetros para o tamanho do stop gain e stop loss em pontos stop_gain_points = input.int(100, title="Stop Gain (pontos)", minval=1) stop_loss_points = input.int(100, title="Stop Loss (pontos)", minval=1) // Calcular o preço de saída alvo (Stop Gain) e de stop loss target_price = entry_price + stop_gain_points * syminfo.mintick stop_loss_price = entry_price - stop_loss_points * syminfo.mintick // Sair da operação de compra quando o preço atingir o stop gain ou stop loss if (strategy.position_size > 0) strategy.exit("Venda", "Compra", limit=target_price, stop=stop_loss_price) // Sinais de entrada de compra if (buy_condition and strategy.opentrades == 0) // Verifica se não há operações em andamento strategy.entry("Compra", strategy.long) // Plotando setas de compra plotshape(series=buy_condition, title="Sinal de Compra", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small) // Função para verificar se é 17:00 do mesmo dia is_17_oclock_same_day = hour == 17 and minute == 0 and hour[1] < 17 // Sair de todas as operações às 17:00 do mesmo dia if (is_17_oclock_same_day) strategy.close_all()