Эта стратегия сочетает в себе скользящие средние показатели на нескольких временных отрезках, чтобы определить последовательность тренда и принимает скальпинг-акции в течение дня, чтобы следовать тренду и получать прибыль.
Эта стратегия использует 8-периодные и 20-периодные скользящие средние по 5-минутным, 15-минутным, 30-минутным и 60-минутным временным рамкам для генерации торговых сигналов. Сигнал покупки генерируется, когда 8-периодный MA пересекает 20-периодный MA. Сигнал продажи генерируется, когда 8-периодный MA пересекает 20-периодный MA.
Стратегия требует последовательных сигналов на всех четырех временных рамках перед выпуском торгового ордера.
После того, как позиция введена, стратегия устанавливает фиксированную цель прибыли для получения прибыли в течение суток.
В частности, стратегия использует функцию security (() для получения значений MA из разных временных рамок. Она вычисляет разницу между 8-периодными и 20-периодными MA на 5-минутных, 15-минутных, 30-минутных и 60-минутных диаграммах.
Сигналы покупки и продажи определяются тем, пересекает ли линия разницы линию нуля выше/ниже. Для записи сигнала на каждом временном диапазоне используются несколько флагов islong и isshort. Заказы размещаются при выполнении условий islong и isshort.
После вступления в сделку, стратегия используетstrategy.exit() для установления фиксированной целевой прибыли для скальпинга.
Преимущества этой стратегии включают:
Многочасовая конструкция фильтрует шум и уменьшает частоту торговли.
Внутренний скальпинг с оптимизацией прибыли накапливает небольшие прибыли последовательно.
Ясная структура кода, легкая для понимания и оптимизации.
Разумные условия помогают контролировать риск.
Потенциальные риски этой стратегии:
Многочасовые рамки могут пропустить тонкие изменения тренда.
Частые скальпинг сделки увеличивают затраты.
Цель фиксированной прибыли не имеет гибкости.
Зависит от показателей, риск обмануть.
Возможные оптимизации:
Добавьте больше временных рамок для более надежных сигналов.
Динамическая цель прибыли, основанная на ATR.
Дополнительные фильтры, такие как увеличение объема или экстремальные истории.
Оптимизировать периоды MA для наилучших параметров.
Добавьте машинное обучение для оценки надежности сигнала.
В целом, это типичная стратегия отслеживания трендов на многочасовые рамки с использованием внутридневного скальпинга. Логика ясна и код хорошо структурирован. При надлежащей оптимизации он может стать очень практичным шаблоном стратегии скальпинга.
/*backtest start: 2022-11-09 00:00:00 end: 2023-11-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title="PeBAS $JPY Scalper 15m ",overlay=true) zeigeallebars= input(false, title="Zeige alle (Show all) Candles/Bars?") profitwert=input(52, title="Profit") myatr= input(title="ATR", type=float, defval=0.00002, minval=0.00001,step=0.00001) //Plot EMA-Differenz Aktueller Timeframe dif=(ema(close,8)+ema(close,20))/2 mcolor=ema(close,8) > ema(close,20) ? green : red bs = ema(close,8) > ema(close,20) ? true : false ThisATR=atr(16) //trans = zeigeallebars == true ? 00 : 100 //plot(dif,"dif",color=mcolor,linewidth=6,transp=trans) //1M EMA htf_ma1Mema8 = ema(close, 5) htf_ma1Mema20 = ema(close, 20) ema81m=request.security(syminfo.tickerid, "1", htf_ma1Mema8) ema201m=request.security(syminfo.tickerid, "1", htf_ma1Mema20) dif1M = (ema81m + ema201m) / 2 Close1M = request.security(syminfo.tickerid, "1", close) color1=ema81m > ema201m ? green : red //plot(dif1M,"dif",color1,linewidth=6) //plotshape(1, style=shape.cross, color=color1,location=location.top) ls1 = ema81m > ema201m ? 1 : 0 //5M EMA htf_ma5Mema8 = ema(close, 8) htf_ma5Mema20 = ema(close, 20) ema85m=request.security(syminfo.tickerid, "5", htf_ma5Mema8) ema205m=request.security(syminfo.tickerid, "5", htf_ma5Mema20) dif5M = (ema85m + ema205m) / 2 color5=ema85m > ema205m ? green : red plot(dif5M,"dif",color5,linewidth=5) ls5 = ema85m > ema205m ? 1 : 0 alert1= ema85m > ema205m and ema85m[1] < ema205m[1] ? 1 : 0 islong5 = ema85m > ema205m ? 1 : 0 isshort5 = ema85m < ema205m ? 1 : 0 //15M EMA htf_ma15Mema8 = ema(close, 8) htf_ma15Mema20 = ema(close, 20) ema815m=request.security(syminfo.tickerid, "15", htf_ma15Mema8) ema2015m=request.security(syminfo.tickerid, "15", htf_ma15Mema20) dif15M = (ema815m + ema2015m) / 2 color15=ema815m > ema2015m ? green : red plot(dif15M,"dif",color15,linewidth=3) ls15= ema815m > ema2015m ? 1 : 0 alert2= ema815m > ema2015m and ema815m[1] < ema2015m[1] ? 1 : 0 islong15 = ema815m > ema2015m ? 1 : 0 isshort15 = ema815m < ema2015m ? 1 : 0 //30M EMA htf_ma30Mema8 = ema(close, 8) htf_ma30Mema20 = ema(close, 20) ema830m=request.security(syminfo.tickerid, "30", htf_ma30Mema8) ema2030m=request.security(syminfo.tickerid, "30", htf_ma30Mema20) dif30M = (ema830m + ema2030m) / 2 color30=ema830m > ema2030m ? green : red ls30= ema830m > ema2030m ?1 : 0 islong30 = ema830m > ema2030m ? 1 : 0 isshort30 = ema830m < ema2030m ? 1 : 0 //60M EMA htf_ma60Mema8 = ema(close, 8) htf_ma60Mema20 = ema(close, 20) ema860m=request.security(syminfo.tickerid, "60", htf_ma60Mema8) ema2060m=request.security(syminfo.tickerid, "60", htf_ma60Mema20) dif60M = (ema860m + ema2060m) / 2 color60=ema860m > ema2060m ? green : red ls60= ema860m > ema2060m ?1 : 0 islong60 = ema860m > ema2060m ? 1 : 0 isshort60 = ema860m < ema2060m ? 1 : 0 plot(dif60M,"dif",color60,linewidth=3,transp=70) islong = islong5 ==1 and islong15 ==1 and islong60 ==1 and year > 2017 ? 1 : 0 isshort = isshort5 ==1 and isshort15 ==1 and isshort60 ==1 and year > 2017 ? 1 : 0 condition2l= 0 condition2s = 0 c= alert1 == alert2 and alert1[1] != alert2[1] ? 1 : 0 alertcondition(c, title='Da tat sich was ', message='Da tat sich was!') strategy.entry("enter long", strategy.long,1,when = islong ==1 and islong[1] == 0 ) strategy.entry("enter short", strategy.short,1,when = isshort == 1 and isshort [1] == 0) strategy.exit("close",profit=profitwert) strategy.exit("close",profit=profitwert)