
この戦略の主なアイデアは, percentrank指標とパラメータの最適化と組み合わせて,価格動向の判断と追跡を実現することです. この戦略は,現在の価格と特定の歴史的周期内の価格の大きさのパーセントを比較することによって,取引信号を生成し,中間ミラー効果を捕捉し,トレンドを追跡し,その後,余分な利益を得ます.
この策略は, percentrank指標を使用して価格の傾向を判断する. percentrankは,現在の価格の参照周期内の相対的な強さを表している. 参数 lenは,参照の歴史周期の長さを表している.
percentrankの値域は0から100の間のものです. percentrankの値が0に近づくと,現在の価格がチェックサイクル内の最低価格に近づいていることを示す,価値の低評価領域に属します. 100に近づくと,現在の価格がチェックサイクル内の最高価格に近づいていることを示す,価値の高評価領域に属します.
この戦略はまた,偏移量としての scale パラメータを導入した. 0 から 100 の区間を scale から 100+ scale の区間へと移動させた. 同時に, level_1 と level_2 の2つの信号線を設定した. このうち level_1 は多レベルを表示し, level_2 は空レベルを表示する.
価格%rank指標が下から上へ level_1を横切るときに多見信号を生じ;上から下へ level_2を横切るときに空見信号を生じます.平仓条件は入場信号と逆である。
上記のリスクに対して,パラメータ len,scale,levelの設定を調整することで最適化することができる.同時に,誤った取引を避けるための確認として他の指標と組み合わせることができる.
この戦略はさらに改善できる余地があります.
この戦略は,全体的な考え方が明確で,パラメータ最適化による定量的な方法を使用して価格の傾向を判断し,追跡する.特定の実戦価値があるが,実戦リスクを低減し,安定した収益性を高めるためにさらなるテストと最適化が必要である.
/*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")