
この記事では,複数の移動平均に基づいてトレンド取引戦略を紹介する.この戦略は,長,中,短移動平均の位置に対する価格を分析することによって,市場の上昇傾向を捕捉し,特定の時間帯にすべてのポジションを平準化するために,主にNasdaq期貨市場に適用される.
この戦略は,三つの単純な移動平均 (SMA) を使用します. 長期 (デフォルト200サイクル),中期 (デフォルト21サイクル) と短期 (デフォルト9サイクル). 価格が長期および中期平均線より高く,短期平均線で交差すると,戦略は買入シグナルを誘発します. 同時に,戦略は,リスクを制御するために固定ポイントのストップとストップを設定します. さらに,この戦略は,取引日の17:00にすべてのポジションをクリアします.
長期 (デフォルト200サイクル),中期 (デフォルト21サイクル),短期 (デフォルト9サイクル) の単純な移動平均を計算する.
現在の価格が長期平均線と中期平均線より高いかどうかを判断する.
現在の価格が短期平均線上を横切っているかどうかを判断する.
条件2と条件3が同時に満たされ,現時点でポジションがない場合,買取シグナルをトリガーします.
購入後,固定ポイントのストップとストップの位を設定し,価格がストップまたはストップの位に達すると平仓する.
各取引日の17:00に,すべてのポジションを平仓する.
シンプルで理解しやすい: 戦略は移動平均に基づいています. 原則はシンプルで,理解しやすく実行できます.
トレンド・トラッキング:異なる周期平均線に対する価格の位置を分析することによって,戦略は市場の上昇傾向を効果的に捉えることができる.
リスク管理:戦略は,単一取引のリスクを制御するのに役立つ固定ポイントのストップとストップを設定します.
自動平仓:この戦略は,毎取引日の特定の時間に自動的に平仓し,一夜間のリスクを回避する.
パラメータ最適化:戦略のパフォーマンスは平均線周期パラメータに敏感であり,異なる市場と品種に応じて最適化する必要があります.
揺れ市場: 揺れ市場の環境では,頻繁に交差するシグナルが,戦略の不良なパフォーマンスを引き起こす可能性があります.
スリップポイントリスク: 市場の波動が激しいとき,固定ポイントのストップとストップは,予想通り実行できない可能性があり,スリップポイントのリスクが生じます.
ダイナミックストップ・ストップ・損失:市場の変動や価格動向に応じて,リスク・利益比を最適化するために,ストップ・ストップとストップ・損失の位置を動的に調整する.
トレンドフィルター:トレンドの強さを確認するためにADXなどの他の技術指標を導入し,揺れ市場における偽信号をフィルターします.
多品種適応:異なる期貨品種と市場の特徴に合わせて戦略を改良する.
資金管理:ポジション管理やリスク管理などのより複雑な資金管理規則を導入し,戦略の安定性を向上させる.
“多均等線に基づくトレンド取引戦略”は,価格の異なる周期平均線に対する位置を分析することによって,市場の上昇傾向を捕捉する簡単なトレンド追跡戦略である.この戦略は,固定ポイントのストップ・ロスを設定し,リスクを制御するために毎日特定の時間に自動的に平衡する.しかし,戦略は,不安定な市場で不良なパフォーマンスを発揮し,パラメータ最適化や滑落リスクなどの問題に直面する可能性がある.
/*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()