Стратегия торговли с перемещающейся средней

Автор:Чао Чжан, Дата: 2023-11-06 16:38:22
Тэги:

img

Обзор

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

Логика стратегии

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

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

Когда цена закрытия переходит ниже выходной скользящей средней, генерируется сигнал продажи. Это указывает на обратный тренд, поэтому мы должны выйти из позиции.

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

Анализ преимуществ

Преимущества этой стратегии:

  1. Просто и легко внедряется.

  2. Настраиваемые параметры соответствуют различным рыночным условиям.

  3. Движущиеся средние фильтруют шум и фиксируют основную тенденцию.

  4. Может включать другие технические показатели, такие как тренд, поддержка / сопротивление для дальнейшей оптимизации.

  5. Контролируемое соотношение риск-вознаграждение, имеет механизм остановки потерь.

Анализ рисков

Риски:

  1. Склонность к ложным сигналам на рынках консолидации, не имеющих тенденций.

  2. Неправильное настройка параметров может привести к отсутствию тенденций или слишком большому количеству недействительных сделок.

  3. Неправильное размещение стоп-лосса может увеличить убытки.

  4. Неудачный побег может привести к потерям.

  5. Параметры необходимо своевременно корректировать в соответствии с изменениями рынка.

Решения включают оптимизацию параметров, включение других фильтров, корректировку остановок, ожидание подтверждения тренда перед торговлей и т. Д.

Руководство по оптимизации

Эта стратегия может быть улучшена путем:

  1. Разработка механизмов определения тренда и торговля только после подтверждения тренда.

  2. Добавление фильтров, таких как объем или волатильность, для фильтрации сигналов.

  3. Динамическая оптимизация скользящих средних периодов.

  4. Оптимизация механизма остановки потери для использования остановки задержки.

  5. Включение поддержки/сопротивления и других индикаторов для дальнейшего подтверждения сигналов.

  6. Корректировка параметров на основе различных продуктов и временных рамок.

Заключение

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


/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 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/
// © TwoChiefs

//@version=4
strategy("John EMA Crossover Strategy", overlay=true)
////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////

//CREATE USER-INPUT VARIABLES

periodShort = input(13, minval=1, title="Enter Period for Short Moving Average")
smoothingShort = input(title="Choose Smoothing Type for Short Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])

periodLong = input(48, minval=1, title="Enter Period for Long Moving Average")
smoothingLong = input(title="Choose Smoothing Type for Long Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])

periodExit = input(30, minval=1, title="Enter Period for Exit Moving Average")
smoothingExit = input(title="Choose Smoothing Type for Exit Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])


src1 = close
pivot = (high + low + close) / 3

//MA CALCULATION FUNCTION
ma(smoothing, src, length) => 
    if smoothing == "RMA"
        rma(src, length)
    else
        if smoothing == "SMA"
            sma(src, length)
        else 
            if smoothing == "EMA"
                ema(src, length)
            else 
                if smoothing == "WMA"
                    wma(src, length)
				else
					if smoothing == "VWMA"
						vwma(src, length)
					else
						if smoothing == "SMMA"
							na(src[1]) ? sma(src, length) : (src[1] * (length - 1) + src) / length
						
						else
							if smoothing == "HullMA"
								wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length)))




//ASSIGN A MOVING AVERAGE RESULT TO A VARIABLE
shortMA=ma(smoothingShort, pivot, periodShort)
longMA=ma(smoothingLong, pivot, periodLong)
exitMA=ma(smoothingExit, pivot, periodExit)

//PLOT THOSE VARIABLES
plot(shortMA, linewidth=4, color=color.yellow,title="The Short Moving Average")
plot(longMA, linewidth=4, color=color.blue,title="The Long Moving Average")
plot(exitMA, linewidth=1, color=color.red,title="The Exit CrossUnder Moving Average")



//BUY STRATEGY
buy = crossover(shortMA,longMA) ? true : na
exit = crossunder(close,exitMA) ? true : na


strategy.entry("long",true,when=buy and time_cond)
strategy.close("long",when=exit and time_cond)


if (not time_cond)
    strategy.close_all()


Больше