
Эта стратегия является типичной стратегией для отслеживания трендов путем вычисления движущихся средних за три различных периода и в сочетании с ценовым прорывом образует торговый сигнал. Эта стратегия предназначена для отслеживания среднесрочных тенденций на рынке и может применяться к различным сортам и торговым условиям с помощью динамически корректируемых параметров.
Стратегия включает в себя три скользящих средних: MA1, MA2 и MA3. Между MA1 и MA2 образуются торговые каналы, пересечения которых дают торговые сигналы; MA3 используется для фильтрации сигналов.
Когда быстрый средний MA1 пересекает среднесрочный MA2, это указывает на усиление краткосрочной тенденции, в то время как если цена выше долгосрочного среднего MA3, то возникает сигнал о пересечении; наоборот, если MA1 пересекает MA2 и цена ниже MA3, то возникает сигнал о пересечении.
MA3 отфильтровывает краткосрочный рыночный шум и дает сигнал только после определения тренда в среднесрочной и долгосрочной фазе. Эта стратегия позволяет искать оптимальную комбинацию параметров в разных рынках, динамически регулируя параметры трех движущихся средних.
Можно оптимизировать параметры выбора различных сортов путем корректировки цикла MA; оптимизировать стратегию остановки убытков, контролировать одиночные потери; в сочетании с другими техническими показателями подтвердить эффективность сигнала, снизить вероятность ошибочного сигнала.
Эта стратегия является типичной стратегией отслеживания тенденций с использованием быстрого и медленного сочетания мыслей, используя три скользящих средних и наблюдая за перекрестным генерированием торговых сигналов. Эта стратегия может применяться для разных сортов путем оптимизации параметров, но существует риск подстраховки и пропускания поворотных точек. В будущем стратегия может быть оптимизирована путем введения других технических показателей, таких как эффективность сигналов, разработка механизмов оптимизации динамических параметров и т. Д.
/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Meesemoo
//@version=4
strategy("Custom MA Strategy Tester", overlay = true)
MA1Period = input(13, title="MA1 Period")
MA1Type = input(title="MA1 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"])
MA1Source = input(title="MA1 Source", type=input.source, defval=close)
MA1Visible = input(title="MA1 Visible", type=input.bool, defval=true)
MA2Period = input(50, title="MA2 Period")
MA2Type = input(title="MA2 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"])
MA2Source = input(title="MA2 Source", type=input.source, defval=close)
MA2Visible = input(title="MA2 Visible", type=input.bool, defval=true)
MA3Period = input(200, title="MA3 Period")
MA3Type = input(title="MA3 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"])
MA3Source = input(title="MA3 Source", type=input.source, defval=close)
MA3Visible = input(title="MA3 Visible", type=input.bool, defval=true)
ShowCrosses = input(title="Show Crosses", type=input.bool, defval=true)
MA1 = if MA1Type == "SMA"
sma(MA1Source, MA1Period)
else
if MA1Type == "EMA"
ema(MA1Source, MA1Period)
else
if MA1Type == "WMA"
wma(MA1Source, MA1Period)
else
if MA1Type == "RMA"
rma(MA1Source, MA1Period)
else
if MA1Type == "HMA"
wma(2*wma(MA1Source, MA1Period/2)-wma(MA1Source, MA1Period), round(sqrt(MA1Period)))
else
if MA1Type == "DEMA"
e = ema(MA1Source, MA1Period)
2 * e - ema(e, MA1Period)
else
if MA1Type == "TEMA"
e = ema(MA1Source, MA1Period)
3 * (e - ema(e, MA1Period)) + ema(ema(e, MA1Period), MA1Period)
MA2 = if MA2Type == "SMA"
sma(MA2Source, MA2Period)
else
if MA2Type == "EMA"
ema(MA2Source, MA2Period)
else
if MA2Type == "WMA"
wma(MA2Source, MA2Period)
else
if MA2Type == "RMA"
rma(MA2Source, MA2Period)
else
if MA2Type == "HMA"
wma(2*wma(MA2Source, MA2Period/2)-wma(MA2Source, MA2Period), round(sqrt(MA2Period)))
else
if MA2Type == "DEMA"
e = ema(MA2Source, MA2Period)
2 * e - ema(e, MA2Period)
else
if MA2Type == "TEMA"
e = ema(MA2Source, MA2Period)
3 * (e - ema(e, MA2Period)) + ema(ema(e, MA2Period), MA2Period)
MA3 = if MA3Type == "SMA"
sma(MA3Source, MA3Period)
else
if MA3Type == "EMA"
ema(MA3Source, MA3Period)
else
if MA3Type == "WMA"
wma(MA3Source, MA3Period)
else
if MA3Type == "RMA"
rma(MA3Source, MA3Period)
else
if MA3Type == "HMA"
wma(2*wma(MA3Source, MA3Period/2)-wma(MA3Source, MA3Period), round(sqrt(MA3Period)))
else
if MA3Type == "DEMA"
e = ema(MA3Source, MA3Period)
2 * e - ema(e, MA3Period)
else
if MA3Type == "TEMA"
e = ema(MA3Source, MA3Period)
3 * (e - ema(e, MA3Period)) + ema(ema(e, MA3Period), MA3Period)
p1 = plot(MA1Visible ? MA1 : na, color=color.green, linewidth=1)
p2 = plot(MA2Visible ? MA2 : na, color=color.yellow, linewidth=1)
p3 = plot(MA3Visible ? MA3 : na, color=color.red, linewidth=2)
fill(p1, p2, color.silver, transp=80, title="Fill")
start = timestamp(2019, 1, 1, 1, 0)
end = timestamp(2025, 1, 1, 1, 0)
if time >= start and time <= end
longCondition = crossover(MA1, MA2) and close > MA3
if (longCondition)
strategy.entry("Long", strategy.long)
shortCondition = crossunder(MA1, MA2) and close < MA3
if (shortCondition)
strategy.entry("Short", strategy.short)