Это простая скользящая средняя тенденция, подходящая для Биткойна и Ethereum. Она сочетает в себе несколько индикаторов, таких как скользящие средние, MACD и RSI, чтобы определить направление тренда, и использует фиксированное размещение позиций для долгосрочного отслеживания тренда.
Основная логика стратегии заключается в том, чтобы пойти длинным, когда 20-дневная EMA пересекает 100-дневную SMA и 100-дневная SMA пересекает 200-дневную SMA; закрыть позиции, когда 20-дневная EMA пересекает 100-дневную SMA. То есть использовать три скользящих средних различных периодов для определения направления тренда.
В частности, стратегия рассчитывает значения 20-дневной EMA, 100-дневной SMA и 200-дневной SMA и сравнивает их величину для оценки тренда. Когда 20-дневная EMA пересекает 100-дневную SMA, это означает, что цены начали расти. В этот момент, если 100-дневная SMA также больше, чем 200-дневная SMA, это указывает на то, что среднесрочные и долгосрочные тенденции также растут. Это сильный длинный сигнал.
После входа в длинную позицию стратегия будет продолжать удерживать позицию, чтобы следовать тренду. Когда 20-дневная EMA снова пересекается ниже 100-дневной SMA, это указывает на то, что произошел короткосрочный сигнал обворота тренда. В этот момент стратегия выберет закрыть позиции, чтобы остановить потери.
Кроме того, стратегия также включает в себя такие индикаторы, как MACD и RSI, чтобы подтвердить тенденцию. Только когда линия DIF, линия DEMA и линия HIST MACD все растут, а индикатор RSI выше 50, он выберет возможность открыть длинные позиции.
Наибольшее преимущество этой стратегии заключается в том, что она формулирует четкие правила торговли трендом, которые могут эффективно отслеживать средне- и долгосрочные тенденции.
Используйте несколько скользящих средних в сочетании, чтобы судить о тренде, который является относительно надежным.
Принимать долгосрочные позиции, чтобы отслеживать движение тренда, не подвергаясь воздействию краткосрочных колебаний рынка.
Сочетание таких индикаторов, как MACD и RSI для подтверждения сигналов стратегии, может фильтровать ложные прорывы.
Используя золотой крест и смертельный крест линий EMA и SMA для определения пунктов входа и выхода, правила просты и ясны.
Может эффективно контролировать риски, ограничивая потери через стоп-лосс.
В этой стратегии также имеются некоторые риски. Основная проблема заключается в том, что она не может вовремя остановить потери, когда тенденция меняется.
Невозможность отслеживать моменты обратного движения тенденции во времени: сократить циклы скользящих средних или добавить больше показателей для всеобъемлющего суждения.
Долгое время удержания может легко привести к большим потерям: правильно сократить линии выхода для своевременной остановки убытков.
Индикаторы скользящей средней, как правило, отстают: добавить определенный процент линий стоп-лосса для активного стоп-лосса.
Эта стратегия также может быть оптимизирована в следующих аспектах:
Испытайте больше комбинаций циклов скользящих средних для поиска оптимальных параметров.
Попробуйте другие индикаторы или модели, чтобы судить о тенденциях и сроках входа.
Использовать машинное обучение и другие методы для динамической оптимизации параметров.
Включить показатели объема торговли, чтобы избежать ложных прорывов.
Разработка автоматических систем стоп-лосса и отслеживания стоп-лосса, которые могут регулировать позиции стоп-лосса на основе рыночных условий.
В общем, эта стратегия - это простая и простая стратегия, следующая за трендом. Она использует скользящие средние для определения направления тренда, MACD и RSI для фильтрации сигналов. Принимать относительно длительные периоды хранения для отслеживания движения тренда. Она может эффективно захватывать средне- и долгосрочные возможности тренда. В то же время, есть также риск отставания в выявлении обратных тенденций.
/*backtest start: 2024-01-16 00:00:00 end: 2024-01-17 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="BTC_Long_Only_TV01_200507", overlay=true) //////////// !!!!!!!!!!!!!!!! WORK BEST IN 2 HOURS for BTC, ETH and ETHXBT !!!!!!!!!!!!!!!!!!! ///////////////////// //280820 - After long esting this is the best script for ETHUSD in 4 hours. From 01/01/2020 til 28/08/2020 [macdLine, macdSignalLine, macdHist] = macd(close, 12, 26, 7) //_rsi_len = input(14, title="RSI length") _rsi_len = 14 NewValue = 0 PreviousValue = 0 leverage = 1 smaPercentageIncrease = 0.0 SMA_PERCENT_INCREASE = 0.0 float atrValue = 0 bool bPositionOpened = false float stockPositionSize = 0 float volatilityPercentage = 0.0 bool bDisplayArrow = false bool bEMAIsRising = false bool bSMAIsRising = false bool bSMASlowIsRising = false bool bMACDIsRising = false bool bMACDHistIsRising = false bool bMACDSignalIsRising = false float stopLoss = input (5, "StopLoss in %", type=input.float) //StopLoss associated with the order //Best for alt versus BTC float stopLoss = input (3, "StopLoss in %", type=input.float) //StopLoss associated with the order float positionSize = 1000 float currentPrice = close float stopLossPrice = 0 float entryPrice = 0 //----------------------------------------------------------- // === INPUT BACKTEST RANGE ONE YEAR //FromDay = input(defval = 01, title = "From Day", minval = 1, maxval = 31) //FromMonth = input(defval = 01, title = "From Month", minval = 1, maxval = 12) //FromYear = input(defval = 2020, title = "From Year", minval = 2017) FromDay = 01 FromMonth = 01 FromYear = 2020 //ToDay = input(defval = 01, title = "To Day", minval = 1, maxval = 31) //ToMonth = input(defval = 01, title = "To Month", minval = 1, maxval = 12) //ToYear = input(defval = 2023, title = "To Year", minval = 2017) ToDay = 14 ToMonth = 05 ToYear = 2029 // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" //FUNCTION DEFINITIONS //---------------------- IsRising(data, loopBack) => bIsRising = true for n = 1 to loopBack if data[n] > data[n-1] bIsRising := false continue bIsRising IsFalling(data, loopBack) => bIsFalling = true for n = 1 to loopBack if data[n] < data[n-1] bIsFalling := false continue bIsFalling // END OF FUNCTION DEFINITIONS // emaLength = 20 smaLength = 100 smaSlowLength = 200 ema = ema(close, emaLength) sma = sma(close, smaLength) smaSlow = sma(close, smaSlowLength) plot(sma, color=color.green) plot(smaSlow, color=color.orange) plot(ema, color=color.yellow) //reload previous values stopLossPrice := na(stopLossPrice[1]) ? 0.0 : stopLossPrice[1] entryPrice := na(entryPrice[1]) ? 0.0 : entryPrice[1] bPositionOpened := na(bPositionOpened[1]) ? false : bPositionOpened[1] positionSize := na(positionSize[1]) ? 1000 : positionSize[1] stockPositionSize := na(stockPositionSize[1]) ? 0 : stockPositionSize[1] //leverage := na(leverage[1]) ? 1 : leverage[1] bEMAIsRising := IsRising(ema, 2) bSMAIsRising := IsRising(sma, 3) bMACDIsRising := IsRising(macdLine, 3) bMACDHistIsRising := IsRising(macdHist, 1) bSMASlowIsRising := IsRising(smaSlow, 10) bMACDSignalIsRising := IsRising(macdSignalLine, 3) atrValue := atr(14) volatilityPercentage := (atrValue/currentPrice)*100 //calcute the volatility. Percentage of the actual price if (window()) //Check if we can open a LONG if (bPositionOpened == false and bSMASlowIsRising == true and bMACDIsRising == true and bEMAIsRising == true and bSMAIsRising == true and ema[0] > sma[0] and sma[0] < currentPrice) //Enter in short position stockPositionSize := (positionSize*leverage)/currentPrice //Calculate the position size based on the actual price and the position Size (in $) configured. //calculate exit values stopLossPrice := currentPrice*(1-stopLoss/100) strategy.entry("myPosition", strategy.long, qty=stockPositionSize, comment="BUY at " + tostring(currentPrice)) entryPrice := currentPrice //store the entry price bPositionOpened := true bDisplayArrow := true if (bPositionOpened == true and (currentPrice <= stopLossPrice or crossunder(ema[1], sma[1]))) strategy.close("myPosition", comment="" + tostring(currentPrice) ) //Stop //uncomment the below line to make the bot investing the full portfolio amount to test compounding effect. //positionSize := positionSize + ((stockPositionSize * currentPrice) - (positionSize*leverage)) //reset some flags bPositionOpened := false bDisplayArrow := true entryPrice := 0.0