
Описание: Эта стратегия является классической торговой стратегией, основанной на пересечении средних линий, индикатор использует двойные средние линии, включая простые движущиеся средние ((SMA), показательные движущиеся средние ((EMA), линейные взвешенные движущиеся средние ((VWMA) и колебательные взвешенные движущиеся средние ((HMA)).
Принцип: Основная логика стратегии - это пересечение двух средних линий. При пересечении медленной средней линии над быстрой средней линией производится сигнал покупки, а при пересечении медленной средней линии под быстрой средней линией - сигнал продажи. Пересечение средней линии представляет собой переход между краткосрочными и долгосрочными тенденциями цены.
Анализ преимуществ: преимущества стратегии двойной равнолинейной скрещивания заключаются в том, что она проста и проста в использовании, с помощью одного сигнала можно узнать о самых основных тенденциях, без необходимости выбора и корректировки слишком много параметров, она очень подходит для начинающих трейдеров. Кроме того, различные типы равнолинейных скрещиваний имеют тестирование, для оптимизации которых можно выбрать различные комбинации.
Анализ риска: основной риск этой стратегии заключается в том, что в обычной стратегии пересечения средней линии может быть много ложных сигналов, что приводит к проблемам с небольшими прибылями и многократным закрытием позиций, что влияет на общую прибыль. Кроме того, фиксированная скоростная и медленная средняя длина линии может быть недействительна в некоторых циклах.
Направление оптимизации: 1) попытка различных циклических тестов для определения оптимального сочетания среднелинейных пересекающихся циклов; 2) рассмотрение параметров введения второй группы среднелинейных и вспомогательных суждений RSI, чтобы уменьшить ложные сигналы; 3) введение условного суждения, основанного на изменении прироста показателя MA, а не простой пересекающийся, чтобы получить более надежный пересекающийся суд.
Резюме: Эта стратегия использует традиционную линейную кросс-стратегическую структуру, проводит тестирование двумя линейными линиями, чтобы найти оптимальную комбинацию среднелинейных циклов, а также добавляет стоп-стоп, основанный на среднелинейной ROC и цене. В целом, это простая, простая в использовании и соответствующая количественной логике торговли двулинейная стратегия. Кроме того, богатые идеи оптимизации предоставляют пространство для последующего развития этой стратегии.
/*backtest
start: 2023-11-27 00:00:00
end: 2023-12-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(close, title="Source")
price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(5, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"])
ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"])
f_hma(_src, _length)=>
_return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))
price1 = if (type1 == "SMA")
sma(price, ma1)
else
if (type1 == "EMA")
ema(price, ma1)
else
if (type1 == "VWMA")
vwma(price, ma1)
else
f_hma(price, ma1)
price2 = if (type2 == "SMA")
sma(price, ma2)
else
if (type2 == "EMA")
ema(price, ma2)
else
if (type2 == "VWMA")
vwma(price, ma2)
else
f_hma(price, ma2)
//plot(series=price, style=line, title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line, title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)
longCondition = crossover(price1, price2)
if (longCondition) // and time>timestamp(2018,6,1,9,30)
strategy.entry("Long", strategy.long)
shortCondition = crossunder(price1, price2)
if (shortCondition) // and time>timestamp(2018,6,1,9,30)
strategy.entry("Short", strategy.short)
lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)
ma1up = false
ma1down = false
ma2up = false
ma2down = false
ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])
trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01
if crossover(roc1, trendStrength1)
ma1up := true
ma1down := false
if crossunder(roc1, -trendStrength1)
ma1up := false
ma1down := true
shortexitCondition = ma1up and ma1down[1]
if (shortexitCondition)
strategy.close("Short")
longexitCondition = ma1down and ma1up[1]
if (longexitCondition)
strategy.close("Long")