//@version=4 strategy(title = "ZigZag v4", overlay = true, default_qty_type = strategy.percent_of_equity, pyramiding = 0, initial_capital = 100000) //Default timeframe = 1D, this strategy is made for crypto //Input s = input(defval = 3, minval = 1, maxval = 4, type = input.integer, title = "MA Source") length = input(defval = 17, minval = 1, maxval = 100, type = input.integer, title = "ZigZag Lеngth") extreme = input(defval = 5, minval = 1, maxval = 50, type = input.integer, title = "ZigZag Extreme") leverage = input(defval = 100, minval = 1, maxval = 1000, type = input.integer, title = "Default Leverage, %") ATR = input(defval = true, type = input.bool, title = "Use Volatility Coefficient?") CriticalEquityDD = input(defval = 100, minval = 0, maxval = 100, type = input.integer, title = "Critical Equity Drawdown, %") //Calculation src = s == 1 ? close : s == 2 ? hlc3 : s == 3 ? ohlc4 : s == 4 ? hl2 : na ema = ema(src, length) rising = ema >= ema[1] falling = ema <= ema[1] _lowest = lowest(low, extreme) _highest = highest(high, extreme) zigzag = rising and falling[1] ? _lowest : falling and rising[1] ? _highest : na level = 0.0 level := zigzag > 0 ? zigzag : level[1] uplevel = 0.0 uplevel := level > level[1] ? zigzag : uplevel[1] dnlevel = 0.0 dnlevel := level < level[1] ? zigzag : dnlevel[1] //Trading volatility_coefficient = atr(3)/atr(50) percentage = ATR == true ? leverage/volatility_coefficient : leverage if level != 0 and uplevel != 0 strategy.entry("Long", strategy.long, stop = uplevel, qty = percentage) // я не уверен что сделал это правильно, в реальном эксперте для открытия позиции должен использоваться процент от эквити. Например, если эквити составляет $10 000 и leverage=20, то для открытия позиции должно использоваться (20/100)*10000=2000 (это до учёта volatility_coefficient) if level != 0 and dnlevel != 0 strategy.entry("Short", strategy.short, stop = dnlevel, qty = percentage) strategy.risk.max_drawdown(CriticalEquityDD, strategy.percent_of_equity) //Plot plot(zigzag, color = color.black, linewidth = 2, transp = 0) upcol = level > level[1] ? na : color.green plot(uplevel, color = upcol, linewidth = 2, transp = 0) dncol = level < level[1] ? na : color.red plot(dnlevel, color = dncol, linewidth = 2, transp = 0)