процентный трейлинг-стоп с момента входа в сделку - PullRequest
0 голосов
/ 02 апреля 2020

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

longStopPrice = 0.0, shortStopPrice = 0.0, lengthinmp = 0, highhigh = 0.0, stopValue = 0.0

longStopPrice: = if (стратегии.position_size> 0) lengthinmp: = barssince (Strategy.position_size) == 0)
самое высокое = самое высокое (высокое, barssince (Strategy.position_size == 0)) // использовал в этой версии lengthinmp в более ранней версии stopValue = самое высокое * (1 - StopPer c) // max (stopValue, longStopPrice [1]) else 0

Я получаю ошибку, строка 49: Невозможно вызвать «наивысший» с аргументами (series [float], series [integer]); доступные перегрузки: самые высокие (серия [число с плавающей точкой), целое число) => серия [число с плавающей точкой]; Наибольшее (целое) => серия [float]

Насколько я понимаю, при работе он не будет включать текущий бар. Кто-нибудь знает, как включить текущий бар? Спасибо

1 Ответ

1 голос
/ 02 апреля 2020

Вот пример того, как отследить самый высокий максимум и самый низкий минимум:

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © adolgov

//@version=4
strategy("My Strategy", overlay=true)

longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(sma(close, 14), sma(close, 28))
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

var float hh = na
hh := strategy.position_size > 0 ? max(nz(hh), high) : na
plot(hh, style = plot.style_linebr, color = color.blue)

var float ll = na
ll := strategy.position_size < 0 ? min(na(ll) ? low : ll, low) : na
plot(ll, style = plot.style_linebr, color = color.red)
...