Эта стратегия, в сочетании с EMA и накопленным объемом оборота, определяет тенденции рынка на основе их пересечения, создавая сигналы покупки и продажи. Это типичная стратегия отслеживания тенденций, которая отслеживает направление рынка на более длинном уровне.
Вычислите 50-дневную среднюю ЭМА, а также 100-дневный показатель накопленного объема. Когда ЭМА снизу вверх превышает накопленный объем, создается сигнал купить больше; когда ЭМА снизу вверх превышает накопленный объем, создается сигнал продать меньше.
В процессе удержания позиции, устанавливается фиксированный стоп-убыток и стоп-выход. Стоп-убыток устанавливается на 8% ниже цены входа; стоп-выход устанавливается на 8% выше цены входа, и часть позиции ликвидируется, когда цена достигает точки стоп-убытка.
Эта стратегия в сочетании с трендовым показателем EMA и показателем денежных потоков для накопления объема торгов, используя в полной мере информацию о ценах и объемах торгов, может эффективно идентифицировать средне-длинные тенденции. Фиксированная стратегия остановки и остановки непосредственно эффективна и полезна для блокирования части прибыли и управления рисками.
Свободно корректировать параметры цикла EMA, чтобы адаптироваться к различным сортам. Можно делать много линейных сделок.
Эта стратегия чрезмерно зависит от среднелинейных индикаторов, и в случае колебаний в диапазоне она может привести к ошибочным сигналам. Фиксированные стоп-стопы также могут привести к преждевременному выходу из игры или чрезмерной потере. Только информация о ценах и объемах продаж рассматривается без учета других факторов.
Можно соответствующим образом расширить параметры средней линии, уменьшить ошибочный сигнал. Также можно ввести показатели, такие как волатильность, RSI и другие, чтобы помочь в суждении.
Тестирование оптимизации комбинации параметров EMA для поиска оптимальных параметров.
Введение других технических показателей, формирование стратегии портфеля показателей.
Применение машинного обучения для прогнозирования ценовых тенденций и повышения эффективности EMA.
Оптимизация стратегии стоп-стоп в сочетании с механизмами отслеживания стоп-стоп, динамического стоп-стоп и т. д.
Внедрение модуля управления капиталом, динамическая корректировка позиций.
Параметры корректировки в соответствии с особенностями разновидности, формирование портфеля стратегий.
Стратегия объединяет EMA и показатели объема сделок, чтобы определить тенденции средней и длинной линии. Однако существует проблема чрезмерной зависимости от средней линии и фиксированных стоп-стоп. Добавление большего количества показателей, чтобы оценить и оптимизировать стратегию стоп-стоп, может повысить стабильность стратегии и прибыльность. В целом, она обеспечивает использование информации о ценах и объеме сделок для отслеживания тенденций.
/*backtest
start: 2023-08-20 00:00:00
end: 2023-09-19 00:00:00
period: 2h
basePeriod: 15m
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/
// © mohanee
//@version=4
strategy("EMA_cumulativeVolume_crossover[Strategy]", overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=20, initial_capital=10000)
emaLength= input(50, title="EMA Length", minval=1, maxval=200)
cumulativePeriod = input(100, title="cumulative volume Period", minval=1, maxval=200)
riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(8,title="Stop Loss",minval=1)
takePartialProfits=input(false, title="take partial profits (percentage same as stop loss)")
tradeDirection=input(title="Trade Direction", defval="LONG", options=["LONG", "SHORT"])
avgPrice = (high + low + close) / 3
avgPriceVolume = avgPrice * volume
cumulPriceVolume = sum(avgPriceVolume, cumulativePeriod)
cumulVolume = sum(volume, cumulativePeriod)
vwapValue = cumulPriceVolume / cumulVolume
emaVal=ema(close, emaLength)
plot(emaVal, title="EMA", color=color.green, transp=25)
plot(vwapValue, title="Cumulate Volumne / VWAP", color=color.orange, linewidth=2, transp=25)
bgcolor(emaVal>vwapValue?color.blue:color.purple)
//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity * riskCapital / 100 ) / (close*stopLoss/100)
//check if cash is sufficient to buy qty1 , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1
strategy.entry(id="LE",comment="LE", long=true, qty=qty1, when=crossover(emaVal, vwapValue) and (tradeDirection=="LONG") ) //emaVal>vwapValue and crossover(close , emaVal)
//stoploss
stopLossVal= strategy.position_size>=1 ? (strategy.position_avg_price * (1-(stopLoss*0.01) )) : 0.00
//draw initil stop loss
plot(strategy.position_size>=1 ? stopLossVal : na, color = color.purple , style=plot.style_linebr, linewidth = 2, title = "stop loss")
//partial exits
takeProfit= strategy.position_size>=1 ? (strategy.position_avg_price * (1+(stopLoss*0.01) )) : ( close[1] * 2 )
if(takePartialProfits==true)
strategy.close(id="LE", comment="Partial"+tostring(close-strategy.position_avg_price, "###.##") , qty=strategy.position_size/3 , when = (tradeDirection=="LONG" ) and close>takeProfit and crossunder(close, emaVal) ) //close<close[1] and close[1]<close[2] and close[2]<close[3])
strategy.close(id="LE" , comment="LE Exit Points="+tostring(close-strategy.position_avg_price, "###.##"), when=crossunder(emaVal, vwapValue) and (tradeDirection=="LONG") )
strategy.close(id="LE" , comment="SL Exit Loss="+tostring(close-strategy.position_avg_price, "###.##"), when= close < stopLossVal and (tradeDirection=="LONG") )
//for short you dont have to wait crossodown of ema, falling is speed , so just check if close crossing down vwapVal
strategy.entry(id="SE",comment="SE", long=false, qty=qty1, when=(close<vwapValue and close<open and close[1] < vwapValue and close[1]<open[1] and close<close[1]) and emaVal>=vwapValue and (tradeDirection=="SHORT") ) //emaVal>vwapValue and crossover(close , emaVal)
//stoploss
stopLossValUpside= abs(strategy.position_size)>=1 and tradeDirection=="SHORT" ? (strategy.position_avg_price * (1+(stopLoss*0.01) )) : 0.00
//draw initil stop loss
plot(abs(strategy.position_size)>=1 and tradeDirection=="SHORT" ? stopLossValUpside : na, color = color.purple , style=plot.style_linebr, linewidth = 2, title = "stop loss")
//partial exits
shortTakeProfit= abs(strategy.position_size)>=1 and tradeDirection=="SHORT" ? (strategy.position_avg_price * (1-(stopLoss*0.01) )) : 0.00
if(takePartialProfits==true)
strategy.close(id="SE", comment="Partial" , qty=strategy.position_size/3 , when = (tradeDirection=="SHORT" ) and close<shortTakeProfit ) //close<takeProfit and (emaVal - close)>8 )
//strategy.close(id="SE" , comment="SE Exit Points="+tostring(close-strategy.position_avg_price, "###.##"), when=crossover(emaVal, vwapValue) and (tradeDirection=="SHORT") )
strategy.close(id="SE" , comment="SE Exit Points="+tostring(close-strategy.position_avg_price, "###.##"), when= abs(strategy.position_size)>=1 and ( (emaVal<vwapValue and close>vwapValue and open>vwapValue and close>open ) or (crossover(emaVal,vwapValue)) ) and (tradeDirection=="SHORT") )
strategy.close(id="SE" , comment="SL Exit Loss="+tostring(close-strategy.position_avg_price, "###.##"), when= abs(strategy.position_size)>=1 and close > stopLossValUpside and (tradeDirection=="SHORT" ) )