移動平均クロスオーバー戦略は,非常に古典的で一般的に使用される技術分析戦略である.この戦略の基本的なアイデアは,異なる期間の移動平均間のクロスオーバーを取引信号として使用することです.短期移動平均が下から長期移動平均を上回ると,購入信号が生成されます.短期移動平均が上から長期移動平均を下に回ると,販売信号が生成されます.
この戦略は,入力を使用して移動平均の種類 (SMA,EMA,WMA,RMA) と期間,およびバックテストの時間帯を設定します.
変数関数では様々な種類の移動平均が計算され,計算された移動平均はma変数に保存されます.
閉じる価格がmaを超えると,買い信号が生成されます.閉じる価格がmaを下回ると,売り信号が生成されます.
ストップ・ロスを設定するには, 14 期間の平均真の範囲 atr を計算します.クロスオーバーポイントを基準として,ストップ・ロスの範囲として 2 倍 atr を加算または減算します.
具体的エントリーと出口ロジックは次のとおりです
長いエントリー:ma の上,バックテストの時間範囲内で接近点を横切る.ストップ・ロストポイントはエントリー・ポイントを接近する.
ロング エクシート:ストップ ロス エクシートでは,ma 未満のクロスを2倍割る,またはメリット エクシートでは,最高価格がエントリーポイントを2倍割る.
短入口:ma未満でバックテスト時間範囲内での近点交差,ストップ損失ポイントは入口点に近い
ショート エクシート:ストップ ロス エクシートでは,ma+2x atrの上のクロスを閉じる.または,メリット エクシートでは,エントリー ポイントより低い最低価格を閉じる-2x atrを閉じる.
リスクに対処するために,次の側面で最適化を行うことができます:
この戦略は,次の側面で最適化できます.
移動平均クロスオーバー戦略は,非常に典型的で一般的に使用される技術分析戦略である. 戦略の核心構想はシンプルで,実装が容易で,さまざまな市場に適しており,エントリーレベルの量子取引戦略の1つである. しかし,この戦略には頻繁な信号を生成し,ストップ損失に傾向があるなどの問題もある.適切な最適化により,パフォーマンスは大幅に改善できる. 全体的に,移動平均クロスオーバー戦略は戦略開発のための非常に良い枠組みを提供し,定量的な取引戦略学習の礎石である.
/*backtest start: 2023-10-03 00:00:00 end: 2023-11-02 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("MA Cross Strategy", overlay=true,commission_value = 0.1) type = input(defval = "WMA", title = "MA Type: ", options=["RMA", "SMA", "EMA", "WMA"]) length = input(28) source = close // === INPUT BACKTEST RANGE === FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromYear = input(defval = 2000, title = "From Year", minval = 2000) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(9999, 1, 1, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" variant(type, src, len) => v1 = sma(src, len) // Simple v2 = ema(src, len) // Exponential v5 = wma(src, len) // Weighted v7 = rma(src, len) // Smoothed type=="EMA"?v2 : type=="WMA"?v5 : type=="RMA"?v7 : v1 ma = variant(type,source, length) atr = security(syminfo.tickerid, "D", atr(14)) range = valuewhen(cross(close,ma), (atr*2), na) ep = valuewhen(cross(close,ma), close, na) plot(ma,color=ma>ma[1]?color.blue:color.red,transp=0,linewidth=1) plot(ep,color=#2196f3,transp=100,trackprice=true, offset=-9999) plot(ep+range,color=#2196f3,transp=100,trackprice=true, offset=-9999) plot(ep-range,color=#2196f3,transp=100,trackprice=true, offset=-9999) strategy.entry("Long Entry", true, when = crossover(close,ma) and window() , stop = ep ) strategy.exit("Long Exit", "Long Entry", stop = ep-range) strategy.exit("Long Exit", "Long Entry", when = high > ep+range ,stop = ep[1] ) strategy.entry("Short Entry", false, when = crossunder(close,ma) and window() , stop = ep ) strategy.exit("Short Exit", "Short Entry", stop = ep+range) strategy.exit("Short Exit", "Short Entry", when = low < ep-range ,stop = ep[1] )