Эта стратегия использует индикаторы Moving Average Convergence Divergence (MACD) и Relative Strength Index (RSI) для выявления торговых сигналов для криптовалют.
Вычислить 12-дневную и 26-дневную EMA как краткосрочные и долгосрочные скользящие средние.
Рассчитайте разницу между короткими и длинными EMA как гистограмму MACD.
Вычислить 9-дневную ЭМА MACD как линию сигнала.
Вычислить 14-дневный RSI для оценки уровня перекупленности/перепроданности.
Сигнал покупки отображается, когда MACD пересекает линию сигнала, а RSI больше 81.
Показать сигнал продажи, когда MACD пересекается ниже линии сигнала, а RSI меньше 27.
Используйте встроенный модуль стратегии для входа и выхода.
MACD может идентифицировать тенденции и изменения, RSI показывает уровни перекупа/перепродажи.
MACD выше/ниже нулевой линии показывает направление/силу краткосрочного и долгосрочного тренда.
RSI на высоком/низком уровне указывает на возможное перегрев/перепродажи.
Ясные и простые торговые сигналы, легко выполнять сделки систематически.
Настраиваемые параметры для оптимизации и адаптации к различным рыночным условиям.
Данные MACD и RSI, склонные к ложным прорывам и аномалиям, могут генерировать неверные сигналы.
Фиксированные параметры могут не адаптироваться к изменяющимся рынкам, требуют оптимизации.
Сигналы могут задерживаться, не способные торговать в поворотные моменты.
Только длинные/короткие, не в состоянии получать прибыль на различных рынках.
Испытайте различные комбинации параметров, чтобы найти оптимальные настройки.
Добавьте фильтры, чтобы избежать ложных сделок.
Добавить стоп-лосс для ограничения потерь на односторонних рынках.
Управлять размером позиций, увеличением тенденций и уменьшением диапазонов.
Соедините с другими индикаторами для получения более точных сигналов.
Испытания на различных приборах и сроках.
Эта стратегия использует взаимодополняющие силы MACD и RSI для выявления тенденций и торговых сигналов. Прекрасные параметры настройки и добавление фильтров могут улучшить надежность и прибыльность. Корректировка остановок и размеров позиций также помогает максимизировать прибыль и минимизировать риск.
/*backtest start: 2023-09-11 00:00:00 end: 2023-09-12 04:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // Revision: 5 // Author: @Hugo_Moriceau //study("Thesis_EMLYON_Withdate-strategies-Daily_Crypto_Moriceau_indicator",overlay=true) // Pyramide 10 order size 100, every tick strategy("Daily_Crypto_Moriceau_indicator",overlay=true) // === GENERAL INPUTS === fast = 12, slow = 26 fastMA = ema(close, fast) slowMA = ema(close, slow) macd = fastMA - slowMA signal = sma(macd, 9) rsi = rsi(close,14) tradeInvert = input(defval = false, title = "Invert Trade Direction?") // === LOGIC === // is fast ma above slow ma? aboveBelow = fastMA >= slowMA ? true : false // are we inverting our trade direction? tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false // === Plot Setting === //plot(fastMA,color=red) //plot(slowMA,color=blue) //barcolor(color=iff(fastMA > slowMA, yellow, na)) //barcolor(color=iff(fastMA < slowMA, black, na)) barcolor(color=iff(macd > 0.12*close , fuchsia, na)) barcolor(color=iff(macd < -0.1*close , lime, na)) dataS= macd > 0.125 and rsi>81 and fastMA > slowMA dataB= macd < -0.1 and rsi<27 and fastMA< slowMA plotchar(dataB, char='B',color=black,size = size.tiny,location = location.belowbar,transp= 0) plotchar(dataS, char='S',color=black,size = size.tiny,location = location.abovebar,transp= 0) // === BACKTEST RANGE === FromMonth = input(defval = 01, title = "From Month", minval = 1) FromDay = input(defval = 01, title = "From Day", minval = 1) FromYear = input(defval = 2017, title = "From Year", minval = 2014) ToMonth = input(defval = 2, title = "To Month", minval = 1) ToDay = input(defval = 10, title = "To Day", minval = 1) ToYear = input(defval = 2019, title = "To Year", minval = 2018) // === STRATEGY RELATED INPUTS ===+ // the risk management inputs inpTakeProfit = input(defval = 20000, title = "Take Profit", minval = 0) inpStopLoss = input(defval = 1500, title = "Stop Loss", minval = 0) inpTrailStop = input(defval = 100, title = "Trailing Stop Loss", minval = 0) inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0) // === RISK MANAGEMENT VALUE PREP === // if an input is less than 1, assuming not wanted so we assign 'na' value to disable it. useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na // === STRATEGY - LONG POSITION EXECUTION === enterLong() => not tradeDirection[1] and tradeDirection exitLong() => tradeDirection[1] and not tradeDirection strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in strategy.close(id = "Long", when = exitLong()) // ...and when to get out // === STRATEGY - SHORT POSITION EXECUTION === enterShort() => tradeDirection[1] and not tradeDirection exitShort() => not tradeDirection[1] and tradeDirection strategy.entry(id = "Short", long = false, when = enterShort()) strategy.close(id = "Short", when = exitShort()) // === STRATEGY RISK MANAGEMENT EXECUTION === // finally, make use of all the earlier values we got prepped strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset) strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)