Стратегия двойного отслеживания пересечения скользящих средних

Автор:Чао Чжан, Дата: 2023-09-11 15:27:45
Тэги:

Эта стратегия рассчитывает перекресток между двумя группами скользящих средних SMA и EMA для определения направления тенденции рынка для отслеживания сделок.

В частности, он использует одну быструю и одну медленно движущуюся среднюю пару. Он длинный, когда быстрая линия пересекает над медленной линией, и идет короткий на нисходящем перекрестке. Выходы происходят, когда цена опускается ниже медленной линии или поднимается выше быстрой линии.

Преимущество этой стратегии двойного MA заключается в простом и ясном использовании правил, основанных на двух динамических MA. Использование EMA обеспечивает большую чувствительность при обнаружении отклонений.

В целом, стратегия двойного перекрестного отслеживания MA подходит для трендовых рынков для торговли в направлении импульса. Но правильная настройка параметров, строгий стоп-лосс и размещение позиций имеет решающее значение для долгосрочной стабильности этой стратегии.


/*backtest
start: 2023-08-11 00:00:00
end: 2023-09-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// strategy("Moving Average Strategy of BiznesFilosof", shorttitle="MAS of BiznesFilosof", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.15, pyramiding=0)

//Period
startY = input(title="Start Year", defval = 2011)
startM = input(title="Start Month", defval = 1, minval = 1, maxval = 12)
startD = input(title="Start Day", defval = 1, minval = 1, maxval = 31)
finishY = input(title="Finish Year", defval = 2050)
finishM = input(title="Finish Month", defval = 12, minval = 1, maxval = 12)
finishD = input(title="Finish Day", defval = 31, minval = 1, maxval = 31)
//finish = input(2019, 02, 28, 00, 00)
timestart = timestamp(startY, startM, startD, 00, 00)
timefinish = timestamp(finishY, finishM, finishD, 23, 59)
window = time >= timestart and time <= timefinish ? true : false // Lenghth strategy

lma1 = input(title="Length MA1", defval = 21, minval=1)
exponential1 = input(false, title="exponential")
lma2 = input(title="Length MA2", defval = 1, minval=1)
exponential2 = input(false, title="exponential")
lbars = input(title="Length bars close", defval = 0, minval=0)

ma1 = exponential1 ? ema(close, lma1) : sma(close, lma1)
ma2 = exponential2 ? ema(close, lma2) : sma(close, lma2)

//source = close
source = ma2

//open
strategy.entry("LongEntryID", strategy.long, comment="LONG", when = crossover(ma2, ma1) and window)
strategy.entry("ShortEntryID", strategy.short, comment="SHORT", when = crossunder(ma2, ma1) and window)

if crossunder(source, ma1) and strategy.position_size > 0
    strategy.close_all()
if crossunder(ma2[lbars], ma1[lbars]) and strategy.position_size > 0 and lbars != 0
    strategy.close_all()    
if crossover(source, ma1) and strategy.position_size < 0
    strategy.close_all()
if crossover(ma2[lbars], ma1[lbars]) and strategy.position_size < 0 and lbars != 0
    strategy.close_all()      

src = close
src1 = high
src2 = low
maH = exponential1 ? ema(src1, lma1) : sma(src1, lma1)
maL = exponential1 ? ema(src2, lma1) : sma(src2, lma1)
maColor = src>maH ? green : src<maL ? red : blue

plot(ma1, title="MA1", color=maColor, linewidth=2, style=line)
plot(ma2, title="MA2", color=gray, linewidth=1, style=line)



Больше