Стратегия тренда Flying Dragon


Дата создания: 2023-11-07 14:57:23 Последнее изменение: 2023-11-07 14:57:23
Копировать: 0 Количество просмотров: 845
1
Подписаться
1617
Подписчики

Стратегия тренда Flying Dragon

Обзор

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

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

Эта стратегия использует два движущихся средних для отображения полос тренда, пронумерованных как MA1 и MA4. MA1 - это быстрая движущаяся средняя, а MA4 - медленная движущаяся средняя. В то же время, MA1 устанавливает 3 отклонения (Offset1, Offset2, Offset3) для формирования MA2 и MA3.

Пользователь может выбрать 5 уровней риска, при которых для формирования торгового сигнала необходимо пересечь различные скользящие средние, риски от высокого до низкого: MA1 Offset1, MA2, MA3, MA4, все цвета трендовых полос совпадают. Цвет трендовых полос обозначает текущее направление тренда, зеленый - восходящий тренд, красный - понижающий тренд.

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

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

  • Возможность найти оптимальные комбинации параметров для более широких рыночных условий в разные периоды времени
  • Различные типы подвижных средних, которые могут быть оптимизированы для разных сортов
  • Настраиваемые смещения лежат в основе стратегии, позволяя более точно оценивать тенденции.
  • Выбор уровней риска, чтобы найти баланс между риском и вознаграждением
  • Многочисленные параметры могут быть гибко комбинированы, есть больше возможностей для оптимизации
  • Интуитивные полосы тренда, формирующие четкие визуальные торговые сигналы
  • Поддержка функции Stop Loss, которая позволяет контролировать риск

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

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

Риск можно контролировать и уменьшать, постепенно снижая уровень риска, увеличивая тестирование комбинаций параметров и оптимизируя параметры для разных сортов.

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

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

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

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

Исходный код стратегии
/*backtest
start: 2022-10-31 00:00:00
end: 2023-02-14 00:00:00
period: 1d
basePeriod: 1h
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/
// © MarkoP010 2023

//@version=5
//The basic idea of the strategy is to select the best set of MAs, types, lenghts and offsets, which draws red trend bands for downtrend (and green for uptrend).
//Strategy executes by selected risk level either when there is MA crossover with price (MA1 Offset1 on Highest risk level, MA2 on Low risk level) or three bands with the same color on at the same time (on Lowest risk level).
//Strategy plots user selectable Moving Average lines and a colored trend band between the MA lines. The trend bands can be turned off individually if required.
//The Offset option shifts the selected MA with the set number of steps to the right. That is where the Magic happens and the Dragon roars!

//Strategy version 1.0
strategy("Flying Dragon Trend Strategy", shorttitle="FD Trend Strategy", overlay=true, pyramiding=3, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=5, commission_type=strategy.commission.cash_per_order, commission_value=10, calc_on_order_fills=false, process_orders_on_close=true)

strDirection = input.string(defval="Both", title="Strategy Direction", options=["Both", "Long", "Short"], group="Strategy") //Strategy direction selector by DashTrader
strSelection = strDirection == "Long" ? strategy.direction.long : strDirection == "Short" ? strategy.direction.short : strategy.direction.all //Strategy direction selector by DashTrader
strategy.risk.allow_entry_in(strSelection)

riskLevel = input.string(defval="Medium", title="Risk Level", options=["Highest", "High", "Medium", "Low", "Lowest"], tooltip="Strategy execution criteria. When Highest then MA1 Offset1 crossover with price, when Low then MA2 Offset crossover, when Lowest then all the Bands are the same color.", group="Strategy")

useStop = input(defval=false, title="Use Stop Loss", inline="SL", group="Strategy")
stopPrct = input.int(defval=10, title=" %", minval=0, maxval=100, step=1, inline="SL", group="Strategy") / 100

//Moving Averages function
MA(source, length, type) =>
    type == "EMA" ? ta.ema(source, length) :
     type == "HMA" ? ta.hma(source, length) :
     type == "RMA" ? ta.rma(source, length) :
     type == "SMA" ? ta.sma(source, length) :
     type == "SWMA" ? ta.swma(source) :
     type == "VWMA" ? ta.vwma(source, length) :
     type == "WMA" ? ta.wma(source, length) :
     na

//Inputs
ma1Type = input.string(defval="HMA", title="", inline="MA1", options=["EMA", "HMA", "RMA", "SMA","SWMA", "VWMA", "WMA"], group="Leading Moving Average") 
ma1Length = input.int(defval=35, title="",minval=1, inline="MA1", group="Leading Moving Average")
ma1Source = input(defval=close, title="", tooltip="For short timeframes, minutes to hours, instead of Default values try Lowest risk level and HMA75 with Offsets 0,1,4 and SMA12 with Offset 6.", inline="MA1", group="Leading Moving Average")
ma1Color  = input(defval=color.purple, title="", inline="MA-1", group="Leading Moving Average")
//useMa1Offset = input(defval=false, title="Use offset to MA-1", inline="MA1", group="Leading Moving Average")
ma1Offset = input.int(defval=0, title="Offset1 Steps", minval=0, maxval=10, step=1, tooltip="The Magic happens here! The offset to move the line to the right.", inline="MA-1", group="Leading Moving Average")
ma1 = MA(ma1Source, ma1Length, ma1Type)[ma1Offset]

ma2Color  = input(defval=color.lime, title="", inline="MA-2", group="Leading Moving Average")
//useMa2Offset = input(defval=true, title="Use offset to MA2", inline="MA-2", group="Leading Moving Average")
ma2Offset = input.int(defval=4, title="Offset2 Steps", minval=0, maxval=10, step=1, tooltip="The Magic happens here! The offset to move the line to the right.", inline="MA-2", group="Leading Moving Average")
ma2 = ma1[ma2Offset]

ma3Color  = input(defval=color.aqua, title="", inline="MA-3", group="Leading Moving Average")
//useMa3Offset = input(defval=false, title="Use offset to MA3", inline="MA-3", group="Leading Moving Average")
ma3Offset = input.int(defval=6, title="Offset3 Steps", minval=0, maxval=10, step=1, tooltip="The Magic happens here! The offset to move the line to the right.", inline="MA-3", group="Leading Moving Average")
ma3 = ma1[ma3Offset]

ma4Type = input.string(defval="SMA", title="", inline="MA4", options=["EMA", "HMA", "RMA", "SMA","SWMA", "VWMA", "WMA"], group="Lagging Moving Average") 
ma4Length = input.int(defval=22, title="",minval=1, inline="MA4", group="Lagging Moving Average")
ma4Source = input(defval=close, title="", inline="MA4", group="Lagging Moving Average")
ma4Color  = input(defval=color.yellow, title="", inline="MA-4", group="Lagging Moving Average")
//useMa4Offset = input(defval=true, title="Use offset to MA4", inline="MA-4", group="Lagging Moving Average")
ma4Offset = input.int(defval=2, title="Offset Steps", minval=0, maxval=10, step=1, tooltip="The Magic happens here! The offset to move the line to the right.", inline="MA-4", group="Lagging Moving Average")
ma4 = MA(ma4Source, ma4Length, ma4Type)[ma4Offset]

bandTransp = input.int(defval=60, title="Band Transparency", minval=20, maxval=80, step=10, group="Banding")
useBand1 = input(defval=true, title="Band 1", inline="Band", group="Banding")
band1Transp = useBand1 ? bandTransp : 100
band1clr = ma1 > ma2 ? color.new(#00ff00, transp=band1Transp) : color.new(#ff0000, transp=band1Transp)
useBand2 = input(defval=true, title="Band 2", inline="Band", group="Banding")
band2Transp = useBand2 ? bandTransp : 100
band2clr = ma1 > ma3 ? color.new(#00ff00, transp=band2Transp) : color.new(#ff0000, transp=band2Transp)
useBand3 = input(defval=true, title="Band 3", tooltip="Up trend green, down trend red. Colors get reversed if MA1 lenght is greater than MA2 lenght, or they are different type and MA2 quicker. In that case, just reverse your selections for MA1 and MA2, or let it be as is.", inline="Band", group="Banding")
band3Transp = useBand3 ? bandTransp : 100
band3clr = ma1 > ma4 ? color.new(#00ff00, transp=band3Transp) : color.new(#ff0000, transp=band3Transp)

//Graphs
piirto1 = plot(ma1, color = ma1Color, title="MA1")
piirto2 = plot(ma2, color = ma2Color, title="MA2")
piirto3 = plot(ma3, color = ma3Color, title="MA3")
piirto4 = plot(ma4, color = ma4Color, title="MA4")

fill(piirto1, piirto2, color=band1clr)
fill(piirto1, piirto3, color=band2clr)
fill(piirto1, piirto4, color=band3clr)

//Strategy entry and stop conditions

longCondition = riskLevel == "Highest" ? ma1Source > ma1 : riskLevel == "High" ? ma1Source > ma2 : riskLevel == "Medium" ? ma1Source > ma3 : riskLevel == "Low" ? ma1Source > ma4 : riskLevel == "Lowest" ? ma1 > ma2 and ma1 > ma3 and ma1 > ma4 : na
shortCondition = riskLevel == "Highest" ? ma1Source < ma1 : riskLevel == "High" ? ma1Source < ma2 : riskLevel == "Medium" ? ma1Source < ma3 : riskLevel == "Low" ? ma1Source < ma4 : riskLevel == "Lowest" ? ma1 < ma2 and ma1 < ma3 and ma1 < ma4 : na

stopLprice = useStop == true ? strategy.position_avg_price * (1-stopPrct) : na
stopSprice = useStop == true ? strategy.position_avg_price * (1+stopPrct) : na

if (longCondition)
    strategy.entry("Long",strategy.long)
    strategy.exit("Long Stop", "Long", stop=stopLprice)    
if (shortCondition)
    strategy.entry("Short",strategy.short)
    strategy.exit("Short Stop", "Short", stop=stopSprice)

//End