
トレンドベースの循環取引戦略は,トレンドの方向性を判断するために200日間のSMAに基づいて定量的取引戦略である. この戦略は,トレーダーの好みに応じて選択可能な”上昇傾向を追跡”と”下降傾向を追跡”の2つのモードを提供します. この戦略は,トレーダーにカスタマイズされたストップ・ロースとストップ・ポジションを許可し,より大きな柔軟性を提供します.
この戦略の核心指標は200日単行移動平均である.戦略は2つのモデルに分かれています.
上昇傾向パターンを追跡する:閉盘価格が200日移動平均より高いときに多額の取引を行う; ストップまたはストップが触発されたときに平仓する.
ダウントレンドのパターンを追跡する: 閉盘価格が200日移動平均より低いときに多額の取引; ストップまたはストップが触発されたときに平仓.
複数の条件を適用するlongCondition変数の定義は,閉盘価格と200日移動平均の関係に基づいています.平仓条件が通過closeCondition変数の定義は,ストップ・損失,ストップ・価格,移動平均の関係に基づいています.
複数の条件が満たされれば,strategy.entryポジションを開設し,平仓条件を満たす場合,通過strategy.exit落ち着いてくれ
この戦略の利点は以下の通りです.
取引の論理が明確で,理解しやすく,実行できます.
異なる市場状況に応じて適切なモデルを選択できる2つの選択可能なモデルを提供しています.
カスタムストップとストップを設定することで戦略を調整できるリスク・利益特征.
傾向の方向を判断するために,よく知られた技術指標である200日移動平均を使用します.
自動で取引信号を生成し,操作のリスクを低減する.
この戦略には以下のリスクもあります.
単一の技術指標に過度に依存すると,誤信号が生じやすい.MACD,KDJなどの他の指標を付加して検証することを考えることができます.
ストップ・ロズとストップ・ストップが小さすぎて,市場の波動によってストップされやすい.大きすぎて,理想的な退出点を逃す可能性がある.適切なテストと最適化パラメータを行う.
閉盤価格による判断信号方式を採用し,看板/下落偏差が存在する.K線実体判断に変更するか,信号生成後の次のK線確認を検討することができる.
取引費用の影響は考慮されていません. 固定ディスクでは一定の取引費用のスペースを予約する必要があります.
この戦略は以下の方向から最適化できます.
他の技術指標の検証信号を追加し,誤信号を避ける.例えばMACD指標.
止損停止パラメータを最適化して,最適なパラメータ組み合わせを見つけます.複数のパラメータを反測することで比較できます.
トレンドフィルターを追加し,トレンドが明確である場合にのみ取引する.例えばADX指標を導入する.
K線実体関係を考慮し,確認メカニズムに加入する.
取引量の影響を考慮する.大量出現時に信号の信頼性を検証する.
異なる移動平均のパラメータをテストし,最適なパラメータを探します.
概要として,この戦略の全体的な考え方は明確で分かりやすく,ある程度の実用的な価値がある。しかし,単一の指標のみに依存する特定の盲点が存在し,より多くの判断条件を追加して検証する必要があり,パラメータのテスト最適化も必要である.
/*backtest
start: 2022-11-10 00:00:00
end: 2023-11-16 00:00:00
period: 1d
basePeriod: 1h
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/
// © I11L
//@version=5
strategy("Cycle Position Trading", overlay=true, pyramiding=1, default_qty_value=100000, initial_capital=100000, default_qty_type=strategy.cash, process_orders_on_close=false, calc_on_every_tick=false)
// Input for selecting the mode
mode = input.string("Buy Uptrend", options = ["Buy Uptrend", "Buy Downtrend"])
// Input for customizing stop loss and take profit levels
stopLoss = input.float(0.9, title="Stop Loss (SL) level", step=0.01)
takeProfit = input.float(1.1, title="Take Profit (TP) level", step=0.01)
// Calculate the 200-day Simple Moving Average (SMA)
sma = ta.sma(close, 200)
// Plot the SMA on the chart
plot(sma)
// Define the conditions for entering a long position based on the selected mode
longCondition = mode == "Buy Uptrend" ? close > sma and close[5] > sma : close < sma
// Define the conditions for closing a position based on the selected mode
closeCondition = mode == "Buy Uptrend" ? (strategy.position_avg_price * stopLoss > close or strategy.position_avg_price * takeProfit < close or close < sma * 0.95) : (strategy.position_avg_price * stopLoss > close or strategy.position_avg_price * takeProfit < close or close > sma * 1.05)
// Execute a long position if the longCondition is met
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
// Close the position if the closeCondition is met
if (closeCondition)
strategy.exit("Exit", limit = close)