
Знаете ли вы? Рынок похож на гигантскую геометрическую игровую площадку! Эта стратегия упрощает сложные ценовые движения до трех симпатичных форм: алмазный алмаз - обратный сигнал, треугольник - продолжение тренда, а овал - фильтр колебаний. Это как надеть на рынок “геометрические очки”, чтобы мгновенно увидеть, что на самом деле означает цена!
Основная логика стратегии очень проста: быстро формируйте EMA, чтобы определить тенденцию, а затем, в зависимости от положения цены по отношению к облачной полосе, прикрепите различные “теги” к разным высоким и низким прорывам. Прорывы ниже облачной полосы - это алмазные обратные сигналы, а выше облачной полосы - треугольные продолжения, а сигналы с недостаточной степенью разделения EMA фильтруются кружком как “шум”.
Алмазный сигналЭто так же очевидно, как обнаружение драгоценного камня на дне долины или предупредительного фонаря на вершине горы.
Треугольный сигналПродолжающийся тренд: Помощник, который активирует цену, когда она находится выше облачного пояса, или когда она находится ниже облачного пояса. Вообразите себе, что вы продолжаете идти вперед по волнам, и успех будет естественным образом выше.
Круглый фильтрКогда EMA-разрыв меньше установленного порога, все сигналы помечаются как “шокирующий шум”. Это похоже на то, что стратегия имеет “защитную функцию”, чтобы избежать частого открытия позиций в поперечном рынке.
Стоп-логика использует предыдущие ключевые точки: многоголовый стоп устанавливается на предыдущих низких точках, пустой стоп - на предыдущих высоких точках. Преимущества этого метода заключаются в наличии четкой технической основы, которая не будет стерта “фальшивым прорывом” из-за произвольной настройки.
RSI также имеет умный механизм выхода: многоочередные позиции закрываются, когда RSI опускается выше 70, а свободные позиции закрываются, когда RSI отражается ниже 30. Это позволяет закрепить прибыль и избежать риска продолжения позиций в крайних зонах перекупа и перепродажи.
Лучший сценарийТренд-слежение и реверсионные сделки на средне- и краткосрочных периодах, особенно в условиях умеренной волатильности рынка. Стратегия автоматически корректирует размер позиции: реверсионный сигнал тестируется на 50% позиции, продолжение - на 100% позиции.
Руководство по уходу за ямойНе используйте его в условиях крайне нестабильных рынков! Несмотря на круговую фильтрацию, сигналы становятся редкими, если рынок долгое время горизонтален. Кроме того, эта стратегия больше зависит от технического анализа, и важные фундаментальные новости могут “отменить” геометрическую форму.
Помните, что лучшая стратегия - это не самая сложная, а та, которая лучше всего подходит для вашего стиля торговли!
/*backtest
start: 2024-09-26 00:00:00
end: 2025-09-24 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/
//@version=5
strategy("💎🔺⚫ Diamond-Triangle-Circle Strategy", overlay=true)
// === INPUTS ===
ema_fast = input.int(10, "Fast EMA Length")
ema_slow = input.int(20, "Slow EMA Length")
min_ema_separation = input.float(0.1, "Min EMA Separation %", minval=0.01, maxval=1.0)
rsi_length = input.int(14, "RSI Length")
rsi_exit_level = input.int(70, "RSI Exit Level")
// === CALCULATIONS ===
ema_fast_val = ta.ema(close, ema_fast)
ema_slow_val = ta.ema(close, ema_slow)
rsi = ta.rsi(close, rsi_length)
// EMA Cloud and separation
cloud_bull = ema_fast_val > ema_slow_val
ema_separation_pct = math.abs(ema_fast_val - ema_slow_val) / close * 100
chop_filter = ema_separation_pct >= min_ema_separation
// Price position relative to cloud
price_above_cloud = close > math.max(ema_fast_val, ema_slow_val)
price_below_cloud = close < math.min(ema_fast_val, ema_slow_val)
// === HIGHER LOW DETECTION ===
lowPoint = ta.lowest(low, 3)
prevLowPoint = ta.lowest(low[3], 3)
isHigherLow = low == lowPoint and low > prevLowPoint
higherLowConfirmed = isHigherLow and close > open
// === LOWER HIGH DETECTION ===
highPoint = ta.highest(high, 3)
prevHighPoint = ta.highest(high[3], 3)
isLowerHigh = high == highPoint and high < prevHighPoint
lowerHighConfirmed = isLowerHigh and close < open
// === SIGNAL CLASSIFICATION ===
// Diamond Signal - Reversal (below cloud)
diamondBullish = higherLowConfirmed and price_below_cloud and chop_filter
diamondBearish = lowerHighConfirmed and price_above_cloud and chop_filter
// Triangle Signal - Continuation (above cloud)
triangleBullish = higherLowConfirmed and price_above_cloud and chop_filter
triangleBearish = lowerHighConfirmed and price_below_cloud and chop_filter
// Circle Signal - Chop (filtered out - display only)
chopBullish = higherLowConfirmed and not chop_filter
chopBearish = lowerHighConfirmed and not chop_filter
// === RSI EXIT LOGIC ===
rsi_was_above_70 = rsi[1] >= rsi_exit_level and rsi < rsi[1]
rsi_was_below_30 = rsi[1] <= (100 - rsi_exit_level) and rsi > rsi[1]
// === STOP LOSS LOGIC ===
var float long_stop = na
var float short_stop = na
if diamondBullish or triangleBullish
long_stop := prevLowPoint
if diamondBearish or triangleBearish
short_stop := prevHighPoint
// === STRATEGY EXECUTION ===
// Long Entries
if diamondBullish
strategy.entry("Diamond Long", strategy.long, qty=50, comment="💎 Reversal")
if triangleBullish
strategy.entry("Triangle Long", strategy.long, qty=100, comment="🔺 Continuation")
// Short Entries
if diamondBearish
strategy.entry("Diamond Short", strategy.short, qty=50, comment="💎 Reversal")
if triangleBearish
strategy.entry("Triangle Short", strategy.short, qty=100, comment="🔺 Continuation")
// === EXITS ===
// Long Exits
if strategy.position_size > 0
if close <= long_stop
strategy.close_all(comment="Stop Loss")
else if rsi_was_above_70
strategy.close_all(comment="RSI Exit")
// Short Exits
if strategy.position_size < 0
if close >= short_stop
strategy.close_all(comment="Stop Loss")
else if rsi_was_below_30
strategy.close_all(comment="RSI Exit")
// === VISUAL ELEMENTS ===
// EMA Cloud
ema1 = plot(ema_fast_val, "Fast EMA", color.new(color.blue, 60), linewidth=1)
ema2 = plot(ema_slow_val, "Slow EMA", color.new(color.blue, 60), linewidth=1)
fill(ema1, ema2, color=cloud_bull ? color.new(color.green, 85) : color.new(color.red, 85), title="EMA Cloud")
// Signal Shapes
plotshape(diamondBullish, "Diamond Long", shape.diamond, location.belowbar,
color.new(color.lime, 0), size=size.small, text="💎")
plotshape(diamondBearish, "Diamond Short", shape.diamond, location.abovebar,
color.new(color.red, 0), size=size.small, text="💎")
plotshape(triangleBullish, "Triangle Long", shape.triangleup, location.belowbar,
color.new(color.green, 20), size=size.small, text="🔺")
plotshape(triangleBearish, "Triangle Short", shape.triangledown, location.abovebar,
color.new(color.orange, 20), size=size.small, text="🔺")
plotshape(chopBullish, "Chop Long", shape.circle, location.belowbar,
color.new(color.gray, 50), size=size.tiny, text="⚫")
plotshape(chopBearish, "Chop Short", shape.circle, location.abovebar,
color.new(color.gray, 50), size=size.tiny, text="⚫")
// Stop Loss Lines
plot(strategy.position_size > 0 ? long_stop : na, "Long Stop", color.red, linewidth=2)
plot(strategy.position_size < 0 ? short_stop : na, "Short Stop", color.red, linewidth=2)
// Background coloring for market conditions
bgcolor(not chop_filter ? color.new(color.yellow, 95) : na, title="Chop Zone")
// === ALERTS ===
alertcondition(diamondBullish, title="Diamond Long Signal", message="💎 REVERSAL LONG - {{ticker}} at {{close}}")
alertcondition(diamondBearish, title="Diamond Short Signal", message="💎 REVERSAL SHORT - {{ticker}} at {{close}}")
alertcondition(triangleBullish, title="Triangle Long Signal", message="🔺 CONTINUATION LONG - {{ticker}} at {{close}}")
alertcondition(triangleBearish, title="Triangle Short Signal", message="🔺 CONTINUATION SHORT - {{ticker}} at {{close}}")
alertcondition(strategy.position_size == 0 and strategy.position_size[1] != 0, title="Position Closed", message="💰 POSITION CLOSED - {{ticker}} at {{close}}")