パラメータ最適化傾向 定量戦略

作者: リン・ハーンチャオチャン開催日: 2024-01-02 11:01:22
タグ:

img

概要

この戦略の主な考え方は,パーセンテージランク指標とパラメータ最適化を組み合わせて価格動向を判断し追跡することです.この戦略は,ミラー効果を捉え,過剰なリターンのトレンドを追跡するために,現在の価格と特定の歴史的期間の価格の割合を比較することによって取引信号を生成します.

戦略原則

この戦略は,価格動向を決定するために百分位ランク指標を使用する.百分位ランクは,見られる期間の現在の価格の相対的な強さを表している.パラメータlenは,見られる歴史的期間の長さを示している.

パーセントランク値の範囲は0から100である. パーセントランク値が0に近い場合,現在の価格は見られた期間の最低価格に近いものであり,過大評価された領域にあることを意味します. 100に近い場合,現在の価格は見られた期間の最高価格に近いものであり,過大評価された領域にあることを意味します.

この戦略は,スケールパラメータをオフセットとして導入し,0から100の範囲をスケールから100+の範囲に移動します.また,2つの信号線level_1とlevel_2が設定されています.ここでlevel_1は長いレベルを表示し,level_2は短いレベルを表示します.

値%rank指標が level_1 を上へと越えると,長い信号が生成される. level_2 を下へと越えると,短い信号が生成される. 出口条件は入口信号とは反対である.

戦略 の 利点

  1. 価格動向の強さを判断するために,パーセンテージランク指標を使用し,罠にかかったり,高値を追いかけたりしない
  2. パラメータ最適化方法を適用して,安定性を向上させるために,異なる製品とサイクルのためのオフセットスケールと信号ラインの値を調整する
  3. トレンドフォローと平均リバーションのトレードアイデアを組み合わせ,信号ラインを突破した後,トレンドをタイムリーに追跡する

リスク分析

  1. 不必要な損失を伴う傾向の誤った判断
  2. 価格変動や傾向が不明である場合,誤った信号を生成する傾向がある.
  3. パラメータの設定が正しくない場合,取引頻度が過剰または取引量が不十分になる可能性があります.

上記のリスクに対処するために,レン,スケール,レベルなどのパラメータは最適化のために調整できます.他の指標も誤った取引を避けるために確認のために組み込まれる可能性があります.

オプティマイゼーションの方向性

戦略をさらに最適化できる余地があります.

  1. 単一の取引損失を減らすためにストップ損失ポイントを導入することができます.
  2. 移動平均値のような指標は,いくつかの間違った信号をフィルタリングするために確認のために組み込まれることができます
  3. マシン学習方法を使用してパラメータを自動的に最適化できます
  4. 複数のタイムフレームで並行して実行できます.

結論

戦略の全体的な考え方は明確であり,価格動向を判断し追跡するためにパラメータ最適化の定量的な方法を適用する.これはいくつかの実践的な価値を持っていますが,リスクを軽減し安定した収益性を向上させるためにさらなるテストと最適化が必要です.


/*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")

    

もっと