この戦略は,複数の移動平均値とモメント指標に基づいたトレンドフォロー取引システムである.主に20日,50日,150日,および200日間のシンプルムービング平均値 (SMA) の間の動的関係を活用し,日々のタイムフレームで強い上昇傾向とトレンドが弱くなるときに出口ポジションを把握するために,ボリュームとRSI指標と組み合わせます.この戦略は,誤った信号を効果的にフィルタリングし,複数の技術指標の協調的な使用を通じて取引精度を向上させます.
基本論理には次の主要な要素が含まれます.
購入条件は次のとおりです
販売条件には以下が含まれます.
リスク 管理 の 提案:
この戦略は,複数の技術指標の協調的な使用を通じて強力なトレンド機会を効果的に把握する厳格に設計されたトレンドフォロー戦略である.この戦略の主な利点は,包括的な信号確認メカニズムと厳格なリスク管理システムにある.一定の遅れがある一方で,合理的なパラメータ最適化とリスク管理を通じて,戦略は長期間の運用で安定したパフォーマンスを維持することができる.投資家は,市場環境の適応性,合理的な位置制御,およびライブ取引で戦略を適用する際に実際の状況に基づいて標的の最適化を行うことをお勧めする.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-11 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Micho's 150 (1D Time Frame Only)", overlay=true) // Define the length for the SMAs and RSI sma20Length = 20 sma50Length = 50 sma150Length = 150 sma200Length = 200 volumeMaLength = 20 rsiLength = 14 rsiSmaLength = 14 smaCheckLength = 40 // Check the last month of trading days (~20 days) requiredRisingDays = 25 // Require SMA to rise in at least 16 of the past 20 days sma150AboveSma200CheckDays = 1 // Require SMA150 > SMA200 for the last 10 days // Calculate the SMAs for price sma20 = ta.sma(close, sma20Length) sma50 = ta.sma(close, sma50Length) sma150 = ta.sma(close, sma150Length) sma200 = ta.sma(close, sma200Length) // Calculate the 20-period moving average of volume volumeMA20 = ta.sma(volume, volumeMaLength) // Calculate the 14-period RSI rsi = ta.rsi(close, rsiLength) // Calculate the 14-period SMA of RSI rsiSMA = ta.sma(rsi, rsiSmaLength) // Check if most of the last 5 days are buyer days (close > open) buyerDays = 0 for i = 0 to 9 if close[i] > open[i] buyerDays := buyerDays + 1 // Check if at least 1 day has volume higher than the 20-period volume MA highVolumeDays = 0 for i = 0 to 9 if close[i] > open[i] and volume[i] > volumeMA20 highVolumeDays := highVolumeDays + 1 // Define the new RSI condition rsiCondition = (rsi >= 55) or (rsiSMA > 50 and rsi > rsi[1]) // Check if the 50-day SMA has been rising on at least 16 of the last 20 trading days risingDays = 0 for i = 1 to smaCheckLength if sma50[i] > sma50[i + 1] risingDays := risingDays + 1 // Check if the SMA has risen on at least 16 of the last 20 days sma50Rising = risingDays >= requiredRisingDays // Check if the price has been above the SMA150 for the last 20 trading days priceAboveSma150 = true for i = 1 to smaCheckLength if close[i] < sma150[i] priceAboveSma150 := false // Check if the SMA150 has been above the SMA200 for the last 10 days sma150AboveSma200 = true for i = 1 to sma150AboveSma200CheckDays if sma150[i] < sma200[i] sma150AboveSma200 := false // Define the conditions for the 150-day and 200-day SMAs being rising sma150Rising = sma150 > sma150[1] sma200Rising = sma200 > sma200[1] // Check if most of the last 5 days are seller days (close < open) sellerDays = 0 for i = 0 to 9 if close[i] < open[i] sellerDays := sellerDays + 1 // Check if at least 1 day has seller volume higher than the 20-period volume MA highSellerVolumeDays = 0 for i = 0 to 9 if close[i] < open[i] and volume[i] > volumeMA20 highSellerVolumeDays := highSellerVolumeDays + 1 // Check in the last N days the price below 150 priceBelowSma150 = true for i = 0 to 0 if close[i] > sma150[i] priceBelowSma150 := false // Restrict the strategy to 1D time frame if timeframe.isdaily // Buy condition: // - Most of the last 5 days are buyer days (buyerDays > 2) // - At least 1 of those days has high buyer volume (highVolumeDays >= 1) // - RSI SMA (14-period) between 45 and 50 with RSI >= 55, or RSI SMA > 50 and RSI rising // - 50-day SMA > 150-day SMA and 150-day SMA > 200-day SMA // - 50-day SMA has been rising on at least 16 of the last 20 trading days // - The price hasn't been below the 150-day SMA in the last 20 days // - 150-day SMA has been above the 200-day SMA for the last 10 days // - 150-day and 200-day SMAs are rising buyCondition = (close > sma150 and buyerDays > 4 and highVolumeDays >= 1 and rsiCondition and sma50 > sma150 and sma50Rising and sma150Rising and sma200Rising and priceAboveSma150) // Sell condition: // - Price crossing below SMA 150 // - Seller volume (current volume > volume MA 20) // - 150-day SMA crosses below 200-day SMA // - Most of the last 5 days are seller days (sellerDays > 2) and at least 1 day of higher seller volume (highSellerVolumeDays >= 1) sellCondition = (priceBelowSma150 and (sma50 < sma150 or (sellerDays >5 and highSellerVolumeDays >= 5))) // Execute buy when all conditions are met if (buyCondition) strategy.entry("Buy", strategy.long) // Execute sell when all conditions are met if (sellCondition) strategy.close("Buy")