価格摩擦地帯に基づく戦略をフォローする傾向

作者: リン・ハーンチャオチャン, 日時: 2023-09-20 16:46:17
タグ:

概要

この戦略は,低摩擦領域を特定するために,異なるゾーンにおける価格の持続時間を測定し,これらのゾーンにおけるトレードブレイクを測定します.これはトレンドフォロー戦略に属します.

戦略の論理

  1. 過去 N 期間の現在の水準の価格維持比を価格摩擦として計算する.

  2. 価格が最近最低停滞時間で低摩擦地帯に入っているかどうかを特定します.

  3. 最近のトレンドの方向性を決定するために,速度の重度のMAを使用します.トレンドに沿って低摩擦ゾーンでトレードブレイク.

  4. 価格が高摩擦地帯に戻り 傾向の逆転を予想するときに 利益を得ます

  5. 摩擦のバックバック,ブレイクアウトゾーンなどを含むカスタマイズ可能なパラメータ

利点

  1. 価格摩擦は市場を切り離し,トレンドブレイクゾーンを見つけます

  2. スピードMAは方向を決定するために摩擦と結合します

  3. 価格摩擦のレベルを表示する直感的なビジュアル

  4. 暗号高周波取引に最適化された デフォルトパラメータ

  5. シンプルで明快な論理は 分かりやすく,カスタマイズできます

リスク

  1. 価格摩擦は 将来の動きを完全に予測できない

  2. 速やかなMAはタイミングが不正確になる可能性があります

  3. 取引の進出の効率が悪かった

  4. オーバーフィットするリスクがあります

  5. 固定パラメータは不安定な市場では劣る可能性があります.

強化

  1. 価格摩擦を計算するために 異なる期間をテストします

  2. 最近の傾向を特定するために,さまざまなMAタイプを評価する.

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


もっと