L'idée principale de cette stratégie est de juger et de suivre les tendances des prix en combinant l'indicateur de pourcentage et l'optimisation des paramètres.
La stratégie utilise l'indicateur de pourcentage pour déterminer les tendances des prix.
La gamme de valeurs de pourcentage est de 0 à 100. Lorsque la valeur de pourcentage est proche de 0, cela signifie que le prix actuel est proche du prix le plus bas de la période considérée et se trouve dans une zone sous-évaluée.
La stratégie introduit également un paramètre d'échelle comme décalage pour déplacer la plage de 0 à 100 vers la plage d'échelle à 100 +. Deux lignes de signal level_1 et level_2 sont également définies, où level_1 indique le niveau long et level_2 indique le niveau court.
Lorsque l'indicateur de pourcentage de prix franchit le niveau_1 vers le haut, un signal long est généré. Lorsqu'il franchit le niveau_2 vers le bas, un signal court est généré. Les conditions de sortie sont opposées aux signaux d'entrée.
Pour faire face aux risques ci-dessus, des paramètres tels que le len, l'échelle, le niveau peuvent être ajustés pour l'optimisation.
La stratégie peut être encore optimisée:
L'idée générale de la stratégie est claire, appliquant des méthodes quantitatives d'optimisation des paramètres pour juger et suivre les tendances des prix.
/*backtest start: 2023-12-02 00:00:00 end: 2024-01-01 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/ // © Alex_Dyuk //@version=4 strategy(title="percentrank", shorttitle="percentrank") src = input(close, title="Source") len = input(title="lookback - Период сравнения", type=input.integer, defval=10, minval=2) scale = input(title="scale offset - смещение шкалы", type=input.integer, defval=50, minval=0, maxval=100) level_1 = input(title="sygnal line 1", type=input.integer, defval=30) level_2 = input(title="sygnal line 2", type=input.integer, defval=-30) prank = percentrank(src,len)-scale plot(prank, style = plot.style_columns) plot(level_2, style = plot.style_line, color = color.red) plot(level_1, style = plot.style_line, color = color.green) longCondition = (crossunder(level_1, prank) == true) if (longCondition) strategy.entry("Long", strategy.long) longExitCondition = (crossover(level_2, prank) == true) if (longExitCondition) strategy.close("Long") shortCondition = (crossover(level_2, prank) == true) if (shortCondition) strategy.entry("Short", strategy.short) shortexitCondition = (crossunder(level_1, prank) == true) if (shortexitCondition) strategy.close("Short")