価格摩擦ゾーンに基づくトレンドフォロー戦略


作成日: 2023-09-20 16:46:17 最終変更日: 2023-09-20 16:46:17
コピー: 2 クリック数: 610
1
フォロー
1617
フォロワー

概要

この戦略は,価格が異なる領域で停留する時間を計算して,価格が新しい無抵抗領域に入るか判断し,無抵抗領域でトレンドフォロー取引信号を生成する.トレンドフォロー戦略のカテゴリーに属します.

戦略原則

  1. 過去Nサイクルで価格が現在のレベル近くにとどまった割合を,価格摩擦度として計算する.

  2. 価格が過去数日間,少数の停留地がある低摩擦領域に入り,シグナルを生成する無抵抗領域になっているかどうかを判断する.

  3. 急速加重移動平均線を使用して,最近のトレンドの方向を判断し,無抵抗領域の突破時にトレンド取引を行う.

  4. 価格が高摩擦領域に戻ると,予見トレンドが逆転して停滞から退出する.

  5. 取引パラメータは,摩擦領域判断周期,突破入り領域など,カスタマイズできます.

優位分析

  1. 価格の摩擦によって抵抗のない区間を判断し,揺動の区間を避ける.

  2. スピード平均線は,最近のトレンドを追跡し,組み合わせで判断方向を使用します.

  3. 価格の摩擦領域を表示する直感的なビジュアルインタフェース.

  4. デフォルトのパラメータは,暗号通貨の高周波取引に最適化されています.

  5. 政策はシンプルでわかりやすく,理解しやすく,変更しやすい.

リスク分析

  1. 価格の摩擦は価格の動きを完全に予測することはできません.

  2. タイムラインの判断は不正確かもしれない.

  3. 市場への出入は 効率的にできず

  4. オーバーフィットするリスクがあるかもしれません.

  5. 市場が急激に変化する時には,固定パラメータの効果は悪くなるかもしれない.

最適化の方向

  1. 異なる周期パラメータをテストして価格摩擦を計算する.

  2. 各種の平均線を評価し,最近の動向を判断する.

  3. 無抵抗区画突破のパラメータを最適化して,戦略の安定性を向上させる.

  4. ストップ・ストップ・ストップ戦略を追加し,取引リスクを管理する.

  5. 動的なパラメータを考慮し,市場の変化に適応する.

  6. 更に多くの品種と周期で再検査を検証する.

要約する

この戦略は,価格の摩擦度を見つけることで高確率のトレンド爆破地域を取引する点で,一定の優位性がある。しかし,パラメータの固定的な限界もある。ダイナミックなパラメータ最適化,リスク管理などのメカニズムを強化することで,戦略をより安定して効率的に構築することができる。

ストラテジーソースコード
/*backtest
start: 2023-08-20 00:00:00
end: 2023-09-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//made for 30m chart with BTCUSD or other cryptocurrency
strategy("LUBE",overlay=false )
friction=0.0
barsback=input(500,"bars back to measure friction",step=100)
flevel=input(50,"0-100 friction level to stop trade",step=2)
tlevel=input(-10,"pic lower than 0 to number selected above to initiate trade",step=2)
fl=flevel/100
tl=tlevel/100

for i = 1 to barsback
    friction := if high[i] >= close and low[i] <= close 
        friction+(1+barsback)/(i+barsback)
    else
        friction

range=input(100,"bars back to measure lowest friction",step=10)
lowf = lowest(friction,range)
highf = highest(friction,range)
midf = (lowf*(1-fl)+highf*fl)
lowf2 = (lowf*(1-tl)+highf*tl)
plot(friction)
m=plot(midf[5],color=color.red)
l=plot(lowf2[5],color=color.white)
h=plot(highf[5],color=color.white)
fill(l,h,color.white)

src = input(title="Source", type=input.source, defval=close)

//FIR Filter
_fir(src) =>
    (4 * src + 3 * nz(src[1]) + 2 * nz(src[2]) + nz(src[3])) / 10

fir = _fir(src)

trend =  fir > fir[1]? 1:-1

//bgcolor(trend==1?color.lime:color.red,transp=50)

long=friction<lowf2[5] and trend == 1
short=friction<lowf2[5] and trend == -1
end=friction > midf[5]

keeplong=0
keeplong:=long?1:nz(keeplong[1])
keeplong:=short or end?0:keeplong

keepshort=0
keepshort:=short?1:nz(keepshort[1])
keepshort:=long or end?0:keepshort

bgcolor(keeplong==1?color.lime:keepshort==1?color.red:na,transp=50)

leverage=input(2,"leverage",step=.5)
enableshort=input(true,"enable shorts?")

barcount=0
barcount:=nz(barcount[1])+1

contracts=min(max(.000001,(strategy.equity/close)*leverage),50000)
strategy.entry("Long",strategy.long,when=long and barcount>20, qty=contracts)

strategy.close("Long",when=short or end )

strategy.entry("Short",strategy.short,when=short and enableshort==true and barcount>20, qty=contracts)

strategy.close("Short",when=(long or end) and enableshort==true)

alertcondition(keeplong==1 and keeplong[1]==0,"LONG")
alertcondition(keepshort==1 and keepshort[1]==0,"SHORT")
alertcondition((keeplong[1]==1 or keepshort[1]==1) and (keeplong==0 and keepshort==0),"CLOSE TRADE")