
Количественная стратегия Myo_LS_D - это стратегия отслеживания и остановки, основанная на многомерных двойных треках. Эта стратегия использует множество показателей, таких как средняя линия, ценовой прорыв и риск-вознаграждение, для построения торговых сигналов. При условии точного определения тенденции достигается более высокий коэффициент выигрыша и прибыльности.
Стратегия состоит из модуля определения тренда, модуля многодела, модуля вакансии, модуля отслеживания остановок и т. д.
Модуль определения тренда использует канал donchain для определения направления общей тенденции. Прием дополнительных входов предполагает, что они находятся в восходящем тренде, а дисконтирование требует, чтобы они были в нисходящем тренде.
Проведение многомодулей учитывает такие факторы, как новые высокие, низкие и средние позиции длинных линий. Проведение пустого модуля учитывает такие факторы, как новые высокие, низкие и средние позиции коротких линий. Это обеспечивает создание позиции при прорыве ключевой ценовой точки вверх или вниз.
Модуль отслеживания остановок использует среднюю линию SMA для двух различных периодов, чтобы в реальном времени отслеживать изменения цены. Когда цена падает ниже средней линии, она останавливается. Такое реальное отслеживание позволяет максимизировать прибыль в тренде.
Стоп-устройство учитывает расширение стоп-ущерба, чтобы обеспечить стоп-ущерб на расстоянии от поддержки, чтобы избежать появления толчков.
Основные преимущества этой стратегии заключаются в том, что она позволяет создавать много свободных складов и отслеживать стратегию остановки. В частности, она заключается в следующем:
Многопрофильная сегрегация позволяет максимально использовать прибыль от односторонних тенденций.
Отслеживание остановок позволяет получить более высокую доходность за счет корректировки в режиме реального времени. По сравнению с традиционными методами остановок, доходы получают значительный рост.
Расширение стоп-лосса может снизить вероятность потери и снизить риск убытков.
Основные риски, связанные с этой стратегией, сосредоточены в следующих точках:
Ошибки в определении тренда могут привести к убыткам от обратного позиционирования. Можно соответствующим образом скорректировать параметры donchain или добавить другие показатели для оптимизации.
Отслеживание остановок слишком радикально и может привести к тому, что досрочные остановки не будут приносить устойчивой прибыли. Для оптимизации можно соответствующим образом увеличить промежутки между остановками.
Слишком маленький диапазон остановки может увеличить вероятность возникновения землетрясения. Можно соответствующим образом расширить степень остановки для снижения риска.
Эта стратегия может быть улучшена в следующих аспектах:
Оптимизация модуля определения тенденций, повышение точности определения. Можно рассмотреть возможность использования дополнительных показателей, таких как MACD.
Настройка способа отслеживания остановок для дальнейшего расширения возможности получения прибыли. Например, можно пропорционально перемещать остановочные линии и т. Д.
Расширяйте зону остановки или подумайте о сокращении остановки, чтобы еще больше снизить вероятность потери.
Различные породы имеют разные параметры, поэтому можно тренироваться, чтобы получить оптимальную комбинацию параметров.
Myo_LS_D является более зрелой и стабильной стратегией для отслеживания многомерного отслеживания. Ее преимущества очевидны, риск контролируется, и это одна из количественных стратегий, которые стоит использовать в течение длительного времени.
/*backtest
start: 2023-12-15 00:00:00
end: 2024-01-14 00:00:00
period: 4h
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/
// © agresiynin
//@version=5
// ©Myo_Pionex
strategy(
title = "Myo_simple strategy_LS_D",
shorttitle = "Myo_LS_D",
overlay = true )
// var
lowest_price = ta.lowest(low, 200)
highest_price = ta.highest(high, 200)
min_800 = ta.lowest(low, 800)
max_800 = ta.highest(high, 800)
tp_target_L = min_800 + (max_800 - min_800) * math.rphi
tp_target_S = max_800 - (max_800 - min_800) * math.rphi
sl_length_L = input.int(100, "做多的止損長度", minval = 50, maxval = 300, step = 50)
sl_length_S = input.int(100, "做空的止損長度", minval = 50, maxval = 300, step = 50)
sl_L = lowest_price * (1 - 0.005)
sl_S = highest_price * (1 + 0.005)
rrr_L = tp_target_L - sl_L / sl_L
rrr_S = ta.lowest(low, 800) + ta.highest(high, 800) - ta.lowest(low, 800) * math.rphi / ta.highest(high, 200) + 0.005 * ta.highest(high, 200) - ta.lowest(low, 200) - 0.005 * ta.lowest(low, 200)
smalen1 = input.int(10, "做多追蹤止盈SMA長度1", options = [5, 10, 20, 40, 60, 80])
smalen2 = input.int(20, "做多追蹤止盈SMA長度2", options = [5, 10, 20, 40, 60, 80])
smalen1_S = input.int(5, "做空追蹤止盈SMA長度1", options = [5, 10, 20, 40, 60, 80])
smalen2_S = input.int(10, "做空追蹤止盈SMA長度2", options = [5, 10, 20, 40, 60, 80])
TrendLength_L = input.int(400, "做多趨勢線", options = [100, 200, 300, 400, 500])
TrendLength_S = input.int(300, "做空趨勢線", options = [100, 200, 300, 400, 500])
SMA1 = ta.sma(close, smalen1)
SMA2 = ta.sma(close, smalen2)
SMA1_S = ta.sma(close, smalen1_S)
SMA2_S = ta.sma(close, smalen2_S)
shortlength = input.int(20, "短期均價K線數量")
midlength = input.int(60, "中期均價K線數量")
longlength = input.int(120, "長期均價K線數量")
ShortAvg = math.sum(close, shortlength)/shortlength
MidAvg = math.sum(close, midlength)/midlength
LongAvg = math.sum(close, longlength)/longlength
// Trend
basePeriods = input.int(8, minval=1, title="趨勢基準線")
basePeriods_Short = input.int(26, "做空基準線")
donchian(len) => math.avg(ta.lowest(len), ta.highest(len))
baseLine = donchian(basePeriods)
baseLine_Short = donchian(basePeriods_Short)
trend = request.security(syminfo.tickerid, "D", baseLine)
isUptrend = false
isDowntrend = false
baseLine_D = request.security(syminfo.tickerid, "D", baseLine)
plot(baseLine_D, color=#B71C1C, title="趨勢基準線")
if close[0] > baseLine_D
isUptrend := true
if close[0] < baseLine_Short
isDowntrend := true
// Long
// Condition
// entry
con_a = low > lowest_price ? 1 : 0
con_b = high > highest_price ? 1 : 0
con_c = close[0] > ta.sma(close, TrendLength_L) ? 1 : 0
con_d = isUptrend ? 1 : 0
con_e = rrr_L > 3 ? 1 : 0
con_a1 = close[0] > ShortAvg[shortlength] ? 1 : 0
con_b1 = close[0] > MidAvg[midlength] ? 1 : 0
// close
con_f = ta.crossunder(close, SMA1) and ta.crossunder(close, SMA2) ? 1 : 0
con_g = close < ta.lowest(low, sl_length_L)[1] * (1 - 0.005) ? 1 : 0
// exit
con_h = tp_target_L
// Main calculation
LongOpen = false
AddPosition_L = false
if con_a + con_b + con_c + con_e + con_a1 + con_b1 >= 4 and con_d >= 1
LongOpen := true
// Short
// Condition
// entry
con_1 = high < highest_price ? 1 : 0
con_2 = low < lowest_price ? 1 : 0
con_3 = close[0] < ta.sma(close, TrendLength_S) ? 1 : 0
con_4 = isDowntrend ? 1 : 0
con_5 = rrr_S > 3 ? 1 : 0
con_11 = close[0] < ShortAvg[shortlength] ? 1 : 0
con_12 = close[0] < MidAvg[midlength] ? 1 : 0
// close
con_6 = ta.crossover(close, SMA1_S) and ta.crossover(close, SMA2_S) ? 1 : 0
con_7 = close > ta.highest(high, sl_length_S)[1] * (1 + 0.005) ? 1 : 0
// exit
con_8 = tp_target_S
// Main calculation
ShortOpen = false
AddPosition_S = false
if con_1 + con_2 + con_3 + con_4 + con_5 + con_11 + con_12 >= 5
ShortOpen := true
//
// execute
//
strategy.initial_capital = 50000
if strategy.position_size == 0
if LongOpen
strategy.entry("Long Open" , strategy.long , comment= "Long Open " + str.tostring(close[0]), qty=strategy.initial_capital/close[0])
if strategy.position_size > 0
if (con_f > 0 or con_g > 0 or ShortOpen) and close <= baseLine_D
strategy.close_all(comment="Close Long " + str.tostring(close[0]))
if strategy.position_size == 0
if ShortOpen
strategy.entry("Short Open" , strategy.short , comment= "Short Open " + str.tostring(close[0]), qty=strategy.initial_capital/close[0])
if strategy.position_size < 0
if (con_6 > 0 or con_7 > 0 or LongOpen) and close >= baseLine_D
strategy.close_all(comment="Close Short " + str.tostring(close[0]))
plot(ta.sma(close, TrendLength_L), color=#e5c212, title="LTradeTrend")
plot(ta.sma(close, TrendLength_S), color=#1275e5, title="STradeTrend")
plot(SMA1, "SMA1", color = color.lime, linewidth = 2)
plot(SMA2, "SMA2", color = color.rgb(255, 0, 255), linewidth = 2)