Эта стратегия идентифицирует сигналы покупки и продажи, рассчитывая перекресток двойных скользящих средних показателей MACD. Она графически отображает стрелки на графике для обозначения торговых сигналов.
Стратегия сначала рассчитывает быструю линию (EMA с 12 периодами), медленную линию (EMA с 26 периодами) и разницу MACD. Затем она определяет длинные и короткие сигналы на основе скрещивания быстрых и медленных линий, а также положительное/отрицательное значение разницы MACD:
Чтобы отфильтровать ложные сигналы, код также проверяет сигнал предыдущей свечи. Текущий сигнал запускается только в том случае, если у предыдущей свечи есть противоположный сигнал (купить против продажи или наоборот).
Кроме того, на графике изображены формы стрелок, которые указывают на сигналы покупки и продажи.
Преимущества этой стратегии включают:
Некоторые риски этой стратегии:
Некоторые способы улучшения стратегии:
Стратегия с двумя скользящими средними пересекающимися стрелками довольно проста и практична. Используя пересечение двух скользящих средних и фильтрацию различий MACD, он идентифицирует входы и выходы во время среднесрочных и долгосрочных тенденций, избегая пропущенных переворотов цен. Сигналы стрелки также обеспечивают четкое руководство в работе. Дальнейшее улучшение стабильности и прибыльности может быть достигнуто посредством настройки параметров, дополнительных фильтров и адаптивной оптимизации.
/*backtest start: 2022-11-14 00:00:00 end: 2023-11-20 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //Daniels stolen code strategy(shorttitle="Daniels Stolen Code", title="Daniels Stolen Code", overlay=true, calc_on_order_fills=true, pyramiding=0) //Define MACD Variables fast = 12, slow = 26 fastMACD = ema(hlc3, fast) slowMACD = ema(hlc3, slow) macd = fastMACD - slowMACD signal = sma(macd, 9) hist = macd - signal currMacd = hist[0] prevMacd = hist[1] currPrice = hl2[0] prevPrice = hl2[1] buy = currPrice > prevPrice and currMacd > prevMacd sell = currPrice < prevPrice and currMacd < prevMacd neutral = (currPrice < prevPrice and currMacd > prevMacd) or (currPrice > prevPrice and currMacd < prevMacd) //Plot Arrows timetobuy = buy==1 and (sell[1]==1 or (neutral[1]==1 and sell[2]==1) or (neutral[1]==1 and neutral[2]==1 and sell[3]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and sell[4]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and sell[5]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and neutral[5]==1 and sell[6]==1)) timetosell = sell==1 and (buy[1]==1 or (neutral[1]==1 and buy[2]==1) or (neutral[1]==1 and neutral[2]==1 and buy[3]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and buy[4]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and buy[5]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and neutral[5]==1 and buy[6]==1)) plotshape(timetobuy, color=blue, location=location.belowbar, style=shape.arrowup) plotshape(timetosell, color=red, location=location.abovebar, style=shape.arrowdown) //plotshape(neutral, color=black, location=location.belowbar, style=shape.circle) //Test Strategy // strategy.entry("long", true, 1, when = timetobuy and time > timestamp(2017, 01, 01, 01, 01)) // buy by market if current open great then previous high // strategy.close("long", when = timetosell and time > timestamp(2017, 01, 01, 01, 01)) strategy.order("buy", true, 1, when=timetobuy==1 and time > timestamp(2019, 01, 01, 01, 01)) strategy.order("sell", false, 1, when=timetosell==1 and time > timestamp(2019, 01, 01, 01, 01)) // strategy.entry(id = "Short", long = false, when = enterShort()) // strategy.close(id = "Short", when = exitShort()) //strategy.entry("long", true, 1, when = open > high[1]) // enter long by market if current open great then previous high // strategy.exit("exit", "long", profit = 10, loss = 5) // ge