Лучшая стратегия скользящего тейк-профита


Дата создания: 2023-10-07 10:28:54 Последнее изменение: 2023-10-07 10:28:54
Копировать: 1 Количество просмотров: 742
1
Подписаться
1617
Подписчики

Обзор

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

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

Эта стратегия состоит из следующих частей:

  1. Вычислите быстрое среднее и медленное среднее. Здесь быстрое среднее время цикла составляет 20, медленное среднее время цикла составляет 50.

  2. При определении условий допуска: делать больше при прохождении медленной средней линии на скоростной средней линии; делать пустоту при прохождении медленной средней линии под скоростной средней линии.

  3. Определение направления тренда. Записывание количества баров сверх и ниже, определение текущего тренда.

  4. Цена входа. Цена, записанная в момент подачи торгового сигнала, является ценой входа.

  5. Настройка тормозной линии. При перегрузке она будет на высоте.(1+% от остановки) в качестве остановки; при пустой позиции, будет на низком уровне(1-процентное сокращение) в качестве сокращения.

  6. Отслеживание остановок. Остановочная линия будет постоянно корректироваться, при движении в благоприятном направлении, продолжая двигаться в благоприятном направлении в фиксированном процентном соотношении, для максимизации прибыли.

  7. Стойкая линия срабатывает. Когда цена достигает стойкой линии, она останавливается.

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

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

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

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

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

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

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

Кроме того, в случае землетрясения частое срабатывание штангирующих проводов может привести к ущербу.

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

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

Оптимизация стратегии

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Оптимизация среднелинейных параметров. Можно тестировать различные среднелинейные параметры и находить более подходящие комбинации.

  2. Оптимизация функций запуска. Можно протестировать разные размеры запуска и найти более подходящие настройки.

  3. Оптимизация пропорции торможения. Можно найти более подходящие параметры пропорции торможения путем обратной связи.

  4. Добавление стоп-убытков. Установка разумных стоп-позиций, контроль рисков.

  5. Оптимизация условий фильтрации. Можно тестировать добавление других условий фильтрации, таких как объем сделки, остановка ATR и т. д.

  6. Оптимизация знака. Можно тестировать его на различных торговых знаках, таких как акции, иностранные валюты, криптовалюты и т. д.

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

Эта стратегия объединяет несколько модулей стратегии, таких как определение тренда, условия входа, отслеживание остановок, и т. Д. В условиях тренда можно постоянно отслеживать остановки, чтобы максимизировать прибыль. Но необходимо контролировать риск, избегать использования в условиях шока и оптимизировать параметры, чтобы максимально использовать стратегию.

Исходный код стратегии
/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-06 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//@author=Daveatt

SystemName = "BEST Trailing Profit Strategy"
// This string is to personalize the text that appears with your orders on the chart through strategy() calls and entry/exit markers, and in the alert default message.
// Although leaving it empty will not cause problems in study mode,
TradeId = "BEST"
// These values are used both in the strategy() header and in the script's relevant inputs as default values so they match.
// Unless these values match in the script's Inputs and the TV backtesting Properties, results between them cannot be compared.
InitCapital = 1000000
InitPosition = 100
InitCommission = 0.075
InitPyramidMax = 1
CalcOnorderFills = true
CalcOnTick = true
DefaultQtyType = strategy.fixed
DefaultQtyValue = strategy.fixed
Precision = 2
Overlay=true

// strategy(title=SystemName, shorttitle=SystemName, overlay=Overlay, 
//  pyramiding=InitPyramidMax, initial_capital=InitCapital, default_qty_type=DefaultQtyType, default_qty_value=InitPosition, commission_type=strategy.commission.percent, 
//  commission_value=InitCommission, calc_on_order_fills=CalcOnorderFills, calc_on_every_tick=CalcOnTick, precision=2)


// strategy(title=SystemName, shorttitle=SystemName, overlay=true, 
//  pyramiding=0, default_qty_value=100, precision=7, currency=currency.USD,
//  commission_value=0.2,commission_type=strategy.commission.percent, initial_capital=10000)

//
//  Author:   Daveatt
//  Revision: R0.1 Beta
//  Date:     8-Dec-2019
//

// inputs

src   = input(defval=close, type=input.source, title="Source")

slowLength   = input(20, "Fast Length",minval=2,step=1)
fastLength   = input(50, "Fast Length",minval=2,step=1)

// Calculate moving averages
fastSMA = sma(src, slowLength)
slowSMA = sma(src, fastLength)

// Calculate trading conditions
enterLong  = crossover(fastSMA, slowSMA)
enterShort = crossunder(fastSMA, slowSMA)

// trend states
since_buy  = barssince(enterLong)
since_sell = barssince(enterShort)
buy_trend  = since_sell > since_buy
sell_trend = since_sell < since_buy 

change_trend = (buy_trend and sell_trend[1]) or (sell_trend and buy_trend[1])

// get the entry price
entry_price = valuewhen(enterLong or enterShort, src, 0)

// Plot moving averages
plot(series=fastSMA, color=color.teal)
plot(series=slowSMA, color=color.orange)

// Plot the entries
plotshape(enterLong, style=shape.circle, location=location.belowbar, color=color.green, size=size.small)
plotshape(enterShort, style=shape.circle, location=location.abovebar, color=color.red, size=size.small)



///////////////////////////////
//======[ Take Profit ]======//
///////////////////////////////

// Use TP?
useTP = input(true, "Use take profit")
// TP trailing
ProfitTrailPerc     = input(1.0, "Trailing Profit (%)",minval=0,step=0.5,type=input.float) * 0.01

use_TP_Trigger = input(true, "Use Take Profit Trigger")
// Will trigger the take profit trailing once reached
takeProfitTrigger   = input(3.0, "Take Profit Trigger (%)",minval=0,step=0.5,type=input.float) * 0.01


// ttp := ttp>tp ? tp : ttp

takeprofitPriceTrigger = 0.0
takeprofitPriceTrigger := if (use_TP_Trigger)
    if (buy_trend)
        entry_price * (1 + takeProfitTrigger) 
    else
        entry_price * (1 - takeProfitTrigger)
else
    -1

//plot(entry_price, title='entry_price', transp=100)

var TP_Trigger_Long_HIT = false
TP_Trigger_Long_HIT := useTP and use_TP_Trigger and buy_trend and high >= takeprofitPriceTrigger
 ? true : TP_Trigger_Long_HIT[1]


var TP_Trigger_Short_HIT = false
TP_Trigger_Short_HIT := useTP and use_TP_Trigger and sell_trend and low <= takeprofitPriceTrigger
 ? true : TP_Trigger_Short_HIT[1]


display_long_TP_trigger     = useTP and buy_trend  and TP_Trigger_Long_HIT == false 
 and takeprofitPriceTrigger != -1
display_short_TP_trigger    = useTP and sell_trend and TP_Trigger_Short_HIT == false 
 and takeprofitPriceTrigger != -1
display_TP_trigger          = display_long_TP_trigger or display_short_TP_trigger


//🔷🔷🔷
// @hugo: Will display the TP trigger as long as not hit
// once the TP trigger is hit, the TP trailing will activate
plot(display_TP_trigger ? takeprofitPriceTrigger : na, title='takeprofitPriceTrigger', transp=0, color=color.orange, 
 style=plot.style_cross, linewidth=3)

longTrailTP= 0.0, shortTrailTP = 0.0

// Trailing Profit
// Start trailing once trigger is reached
longTrailTP := if useTP and buy_trend 
    tpValue = high * (1 + ProfitTrailPerc)
    max(tpValue, longTrailTP[1])
else
    0

shortTrailTP := if useTP and sell_trend
    tpValue = low * (1 - ProfitTrailPerc)
    min(tpValue, shortTrailTP[1])
else
    999999

//plot(longTrailTP, title='debug longTrailTP', transp=100)
//plot(shortTrailTP, title='debug shortTrailTP', transp=100)

//////////////////////////////////////////////////////////////////////////////////////////
//*** TRAILING TAKE PROFIT HIT CONDITIONS TO BE USED IN ALERTS  ***//
//////////////////////////////////////////////////////////////////////////////////////////


//🔷🔷🔷
// @hugo: I use crossover/crossunder for the alerts to trigger the events only once
cond_long_trail_tp_hit      = useTP and buy_trend   and crossover(high, longTrailTP[1]) 
 and (TP_Trigger_Long_HIT or use_TP_Trigger == false)
cond_short_trail_tp_hit     = useTP and sell_trend  and crossunder(low, shortTrailTP[1]) 
 and (TP_Trigger_Short_HIT or use_TP_Trigger == false)
// 🔷🔷🔷


// Plot take profits values for confirmation
// Display the trailing TP until not hit
plot(series= useTP and buy_trend and high <= longTrailTP and 
 (TP_Trigger_Long_HIT or use_TP_Trigger == false) ? longTrailTP : na,
 color=color.aqua, style=plot.style_circles,
 linewidth=2, title="Long Trail TP")

plot(series= useTP and sell_trend and low >= shortTrailTP and 
 (TP_Trigger_Short_HIT or use_TP_Trigger == false) ? shortTrailTP : na,
 color=color.aqua, style=plot.style_circles,
 linewidth=2, title="Short Trail TP")


close_long  = cond_long_trail_tp_hit
close_short = cond_short_trail_tp_hit

// Submit entry orders
strategy.entry("EL", long=true, when=enterLong)
strategy.close("EL", when=close_long)

//if (enterShort)
strategy.entry("ES", long=false, when=enterShort)
strategy.close("ES", when=close_short)


///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////// ALERTS ////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////
//* Put Entry Alerts below *//
//////////////////////////////

// IN STUDY MODE ONLY

// ⚠️⚠️⚠️ For alerts on the signal itself ⚠️⚠️⚠️
//alertcondition(buy_event, "Open Long", "LONG")
//alertcondition(sell_event, "Open Short", "SHORT")

// For the closes you will want to trigger these alerts on condition with alert 
// option "Once Per Bar" for TP and SL

if change_trend
    TP_Trigger_Long_HIT := false
    TP_Trigger_Short_HIT := false