В процессе загрузки ресурсов... загрузка...

Крос-стратегия МА

Автор:Чао Чжан, Дата: 2024-06-03 11:25:43
Тэги:SMAМ.А.

img

Обзор

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

Принцип стратегии

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

Преимущества стратегии

Перекрестный переход скользящей средней - это простой и удобный в использовании метод, позволяющий эффективно отслеживать средне- и долгосрочные рыночные тенденции. При разумных параметровых настройках стратегия может получать стабильную отдачу на трендовых рынках. Настройка take profit и stop loss помогает контролировать снижение прибыли и улучшать соотношение риск-вознаграждение. Логика кода стратегии ясна, используя модуляризацию функций, с сильной читаемостью и масштабируемостью. Кроме того, стратегия интегрирует API платформы Dhan для реализации автоматизированного исполнения заказов, повышая эффективность исполнения.

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

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

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

  1. Для повышения надежности сигнала можно объединить несколько скользящих средних различных временных рамок, например, двойные или тройные кроссоверы скользящих средних.
  2. Установка take profit и stop loss может быть дополнительно оптимизирована, например, динамическая корректировка на основе показателей волатильности, таких как 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) 



Связанные

Больше