
Эта стратегия использует индикатор скользящего среднего значения в комбинации с несколькими временными рамками для определения согласованности тенденций между различными временными рамками, а также для использования стратегии скальпирования в течение дня для получения прибыли от трендов.
Эта стратегия использует 8- и 20-срочные скользящие средние для построения торговых сигналов в четырех временных фрагментах: 5 минут, 15 минут, 30 минут и 60 минут. Сигнал покупки возникает при прохождении 20-дневного скользящего среднего над более коротким 8-дневным скользящим средним, сигнал продажи - при прохождении 20-дневного скользящего среднего ниже 8-дневного скользящего среднего.
Стратегия требует, чтобы торговые сигналы в 5-минутных, 15-минутных, 30-минутных и 60-минутных временных рамках должны совпадать, прежде чем выпускать торговые указания. То есть, покупка или продажа совершается только тогда, когда движущаяся средняя всех четырех временных рамок соответствует сигналу покупки или продажи.
После вхождения в позицию, стратегия устанавливает стоп-оферты с фиксированным преимуществом котировки, чтобы осуществить внутридневную операцию скальпирования.
В частности, стратегия получает данные о движущихся средних за различные временные рамки путем вызова функции security. Вычисляет разницу в среднем за 5 минут, 15 минут, 30 минут и 60 минут на 8 и 20 дней и начертает кривую разницы.
Судить о сигналах покупки и продажи в зависимости от того, пересекает ли нулевую ось кривая разности. И установить несколько знаков islong и isshort для записи сигналов торговли в каждом временном периоде. В конечном итоге, входящие и исходящие указания будут выпущены, когда состояние islong и isshort соответствует требованиям.
После входа в систему, стратегия устанавливает фиксированные точки с помощью функции strategy.exit, чтобы реализовать операции скальпирования.
Эта стратегия имеет следующие преимущества:
Дизайн многократных временных рамок позволяет эффективно отфильтровывать фальсификации и уменьшать частоту сделок с помощью комплексного анализа различных циклических показателей.
С помощью стратегии внутридневного скальпирования, оптимизация прибыли позволяет получать небольшую прибыль в течение длительного периода времени.
Структура кода ясна, каждая часть имеет четкие функции, которые легко понять и оптимизировать.
Условия должны быть разумными, чтобы эффективно контролировать риски сделки.
Однако есть и риски:
Несмотря на то, что многократные временные рамки могут отфильтровывать часть шума, они также могут пропустить некоторые детали, которые могут привести к неочевидным изменениям тенденций.
Внутренний скальпинг приводит к частым сделкам, поэтому необходимо учитывать контроль стоимости сделки.
Фиксированная точка остановки не является достаточно гибкой и не может корректироваться в соответствии с изменениями рынка.
В то же время, если вы используете индикатор для получения торговых сигналов, вы можете быть обмануты.
Эта стратегия может быть оптимизирована в следующих аспектах:
Добавление большего количества показателей для различных периодических временных рамок, что делает сигнал более стабильным и надежным.
Оптимизируйте стратегию остановки, устанавливая точку остановки в соответствии с динамикой ATR.
Добавление дополнительных условий для фильтрации времени входа, таких как увеличение объема торговли, достижение исторических максимумов и т. Д.
Оптимизировать периодические параметры для скользящих средних, чтобы найти оптимальную комбинацию параметров.
Добавление модели машинного обучения для оценки надежности индикаторных сигналов, чтобы избежать арбитража.
Эта стратегия в целом является типичной многовременной стратегией отслеживания тенденций, которая использует методы внутридневного скальпирования для получения прибыли. Идея стратегии ясна, структура кода разумна, и она заслуживает дальнейшего тестирования и оптимизации. С помощью некоторых оптимизированных корректировок эта стратегия может стать очень практичным шаблоном стратегии внутридневного скальпирования.
/*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)