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

SMA MA
Дата создания: 2024-06-03 11:25:43 Последнее изменение: 2024-06-03 11:25:43
Копировать: 0 Количество просмотров: 643
1
Подписаться
1617
Подписчики

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

Обзор

В данной статье представлена стратегия количественного трейдинга, основанная на принципе пересечения движущихся средних. Эта стратегия позволяет контролировать риски путем сравнения отношений цены и движущихся средних, а также определяет направление плюс-минус, устанавливая точки остановки и остановки. Код стратегии написан с использованием Pine Script, интегрированный с API торговой платформы Dhan, который позволяет автоматизировать торговлю по сигналам стратегии.

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

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

Стратегические преимущества

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

Стратегический риск

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

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

  1. Для повышения надежности сигналов можно попробовать использовать несколько различных комбинаций равномерных циклов, таких как двойная равномерность, третья равномерная скрещивание и т. д.
  2. Настройки для остановки стоп-убытков могут быть оптимизированы дополнительно, например, в зависимости от динамической корректировки показателей волатильности, таких как ATR, или в соответствии с стратегией отслеживания стоп-убытков.
  3. Дополнительные условия фильтрации, такие как прорыв цены через важные поддерживающие сопротивления, изменение объема торговли и т. Д., могут быть добавлены для улучшения качества сигнала.
  4. В реальном применении требуется хорошо продуманная стратегия обратной проверки и управления капиталом, контроль риска отдельных сделок и общего вывода.

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

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

Исходный код стратегии
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © syam-mohan-vs @ T7 - wwww.t7wealth.com www.t7trade.com
//This is an educational code done to describe the fundemantals of pine scritpting language and integration with Indian discount broker Dhan. This strategy is not tested or recommended for live trading. 

//@version=5
strategy("Pine & Dhan - Moving Average Crossover Strategy", overlay=true)

//Remove excess signals
exrem(condition1, condition2) =>
    temp = false
    temp := na(temp[1]) ? false : not temp[1] and condition1 ? true : temp[1] and condition2 ? false : temp[1]
    ta.change(temp) == true ? true : false

// Define MA period
ma_period = input(20, title = "MA Length")

// Define target and stop loss levels
target_percentage = input.float(title="Target Profit (%)", defval=2.0)
stop_loss_percentage = input.float(title="Stop Loss (%)", defval=1.0)

// Calculate the MA
ma = ta.sma(close, ma_period)

// Entry conditions
long_entry = close >= ma
short_entry = close < ma

// Calculate target and stop loss prices
target_price = long_entry ? strategy.position_avg_price + (close * (target_percentage / 100)) : strategy.position_avg_price - (close * (target_percentage / 100)) 
stop_loss_price = short_entry ? strategy.position_avg_price + (close * (stop_loss_percentage/ 100)) : strategy.position_avg_price - (close * (stop_loss_percentage / 100)) 

long_entry := exrem(long_entry,short_entry)
short_entry := exrem(short_entry,long_entry)

// Plot the MA
plot(ma, color=color.blue, linewidth=2, title="MA")

// Plot the entry and exit signals
plotshape(long_entry, style=shape.arrowup, color=color.green, size=size.small,location = location.belowbar)
plotshape(short_entry, style=shape.arrowdown, color=color.red, size=size.small,location = location.abovebar)

//Find absolute value of positon size to exit position properly
size = math.abs(strategy.position_size)

//Replace these four JSON strings with those generated from user Dhan account
long_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"B","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"I","sort_order":"1","price":"0"}]}'
long_exit_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"S","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'
short_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"S","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'
short_exit_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"B","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'

// Submit orders based on signals
if(strategy.position_size == 0)
    if long_entry 
        strategy.order("Long", strategy.long,alert_message=long_msg)          

    if short_entry
        strategy.order("Short", strategy.short,alert_message=short_msg)        
    
if(strategy.position_size > 0)
    
    if(short_entry)
        strategy.order("Short", strategy.short, qty = size, alert_message=short_msg)     
    else
        strategy.exit("Long Exit", from_entry="Long", qty = size, stop=stop_loss_price, limit= target_price, alert_message=long_exit_msg)

if(strategy.position_size < 0)
    
    if(long_entry)
        strategy.order("Long", strategy.long, qty = size, alert_message=long_msg)    
    else           
        strategy.exit("Short Exit", from_entry="Short", qty = size, stop=stop_loss_price, limit= target_price, alert_message=short_exit_msg)