
В данной статье представлена стратегия количественного трейдинга, основанная на принципе пересечения движущихся средних. Эта стратегия позволяет контролировать риски путем сравнения отношений цены и движущихся средних, а также определяет направление плюс-минус, устанавливая точки остановки и остановки. Код стратегии написан с использованием Pine Script, интегрированный с API торговой платформы Dhan, который позволяет автоматизировать торговлю по сигналам стратегии.
В основе этой стратегии лежит подвижная средняя, основанная на расчете простых подвижных средних цен на закрытие в течение определенного цикла в качестве основы для определения тренда. При пересечении средней линии при повышении цены появляются сигналы о многомерности, а при пересечении нижней линии - сигналы о пустоте. При этом, используя функцию экстрема, фильтруется последовательное повторение сигнала, что повышает качество сигнала.
Кроссовая скользящая средняя - это простой и простой метод отслеживания тенденций, который эффективно улавливает среднесрочные и долгосрочные тенденции рынка. С помощью разумной настройки параметров стратегия может получать стабильную прибыль в условиях тренда.
Движущаяся средняя по своей сути является отсталым индикатором, в момент рыночного поворота сигнал может быть задержан, что приводит к пропуску оптимального времени торговли или созданию ложного сигнала. Неправильная настройка параметров может повлиять на эффективность стратегии, которая должна быть оптимизирована в соответствии с различными рыночными характеристиками и циклами.
Стратегия пересечения движущейся средней является простой и практичной количественной торговой стратегией, которая может приносить прибыль в условиях тренда путем отслеживания тенденции и контроля стоп-стоп. Однако сама стратегия имеет определенные ограничения, которые необходимо оптимизировать и улучшать в соответствии с рыночными особенностями и предпочтениями в отношении риска. В практическом применении также необходимо обратить внимание на строгое соблюдение дисциплины и контроль риска.
/*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)