Стратегия торговли криптовалютой на основе MACD


Дата создания: 2023-09-19 11:21:42 Последнее изменение: 2023-09-19 11:21:42
Копировать: 0 Количество просмотров: 759
1
Подписаться
1617
Подписчики

Обзор

Эта стратегия является торговой стратегией для определения точки покупки и продажи криптовалюты на основе скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления скопления

Стратегический принцип

  1. 12-дневная ЭМА и 26-дневная ЭМА рассчитываются как краткосрочные и долгосрочные скользящие средние

  2. Расчет разницы между краткосрочными и долгосрочными ЭМА в виде MACD-постной диаграммы

  3. Вычислить 9-дневную ЭМА MACD в качестве линии сигнала

  4. Рассчитайте 14-дневный RSI, чтобы определить перекуп и перепродажу

  5. Когда MACD проходит по сигнальной линии и RSI больше 81, показывается сигнал покупки

  6. Когда MACD пересекает сигнальную линию, и RSI меньше 27, показывается сигнал продажи

  7. Вход и выход с использованием встроенного модуля стратегии

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

  1. MACD-индикатор может идентифицировать тренды и изменения трендов, RSI-индикатор может показывать перекуп и перепродажу, что в сочетании может повысить точность торговых сигналов

  2. Изменения вверх и вниз по нулевой оси MACD представляют собой изменение направления и силы краткосрочных и долгосрочных тенденций, которые служат основанием для определения направления рынка

  3. Высокий уровень RSI представляет собой вероятность перегрева и перекупа, а низкий уровень RSI представляет собой вероятность перепродажи, что дает основание для поиска точки продажи

  4. Торговые сигналы просты, понятны и легко выполняются по правилам

  5. Конфигурируемые параметры для оптимизации в различных рыночных условиях

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

  1. Данные, на которые опираются MACD и RSI, подвержены влиянию ложных прорывов и аномальных данных, которые могут дать ошибочный сигнал

  2. Фиксированные параметры могут не адаптироваться к изменениям рынка и нуждаться в оптимизации.

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

  4. Позиции с пустыми позициями не могут использовать ситуацию для получения прибыли.

Направление оптимизации

  1. Тестирование различных комбинаций параметров, чтобы найти оптимальный параметр

  2. Добавление дополнительных фильтров для предотвращения ложных прорывов

  3. Увеличение стратегии сдерживания убытков, снижение убытков от односторонних действий

  4. Увеличение управления позициями, увеличение позиций в тренде, уменьшение позиций в потрясении

  5. В сочетании с другими показателями, чтобы найти более точные точки купли-продажи

  6. Тестирование эффективности в разных породах и периодах времени

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-12 04:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Revision:        5
// Author:          @Hugo_Moriceau
//study("Thesis_EMLYON_Withdate-strategies-Daily_Crypto_Moriceau_indicator",overlay=true)

// Pyramide 10 order size 100, every tick

strategy("Daily_Crypto_Moriceau_indicator",overlay=true)

// === GENERAL INPUTS ===

fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)

macd = fastMA - slowMA
signal = sma(macd, 9)
rsi = rsi(close,14)



tradeInvert     = input(defval = false, title = "Invert Trade Direction?")

// === LOGIC ===

// is fast ma above slow ma?
aboveBelow = fastMA >= slowMA ? true : false

// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

// === Plot Setting ===

//plot(fastMA,color=red)
//plot(slowMA,color=blue)
//barcolor(color=iff(fastMA > slowMA, yellow, na))
//barcolor(color=iff(fastMA < slowMA, black, na))
barcolor(color=iff(macd > 0.12*close , fuchsia, na))
barcolor(color=iff(macd < -0.1*close , lime, na))
dataS= macd > 0.125 and rsi>81 and fastMA > slowMA
dataB= macd < -0.1  and rsi<27 and fastMA< slowMA


plotchar(dataB, char='B',color=black,size = size.tiny,location = location.belowbar,transp= 0)  
plotchar(dataS, char='S',color=black,size = size.tiny,location = location.abovebar,transp= 0)


// === BACKTEST RANGE ===
FromMonth = input(defval = 01, title = "From Month", minval = 1)
FromDay   = input(defval = 01, title = "From Day", minval = 1)
FromYear  = input(defval = 2017, title = "From Year", minval = 2014)
ToMonth   = input(defval = 2, title = "To Month", minval = 1)
ToDay     = input(defval = 10, title = "To Day", minval = 1)
ToYear    = input(defval = 2019, title = "To Year", minval = 2018)


// === STRATEGY RELATED INPUTS ===+
// the risk management inputs
inpTakeProfit   = input(defval = 20000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 1500, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 100, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===

// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.

useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na


// === STRATEGY - LONG POSITION EXECUTION ===

enterLong() => not tradeDirection[1] and tradeDirection 
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===

enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===

// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)