
この戦略の核心思想は,KST指数とEMA平均線を組み合わせて,トレンドの判断とフォローを実現することです. KST指数が金叉が出現して0を下回ると購入し,デッドフォークが出現して0上回ると売却します. 同時に,EMA平均線を支える抵抗として組み合わせて,閉盘価格がEMA平均線を破るときのみ取引シグナルを発信します. この戦略はシンプルで実用的で,トレンドを自動的に追跡でき,中長期のポジションに適しています.
KST指標を計算する:それぞれ,10日,15日,20日,30日ROC指標を計算し,次にそれぞれ加重加算して,最後に9日SMAを滑らかにすることでKST指標が得られる.
EMA平均線を計算する:計算長さは50のEMA平均線である.
買取シグナルを生成する: KST指数の快線が遅線を横切って ((金叉) で0を下回ると同時に,閉盘価格がEMA平均線より高くなったとき,買取シグナルを生成する。
売り出しシグナルを生成: KST指標の快線の下の慢線を貫通して (死叉) 0以上で,閉盘価格がEMA平均線より低いとき,売り出しシグナルを生成する.
モバイルストップを設定: ストップをトラッキングする アカウントの価値の1%を設定し,自動ストップを実現する.
KST指標はトレンドの変化を識別し,EMA均線はトレンドの方向を確認し,両者を組み合わせてENTRY時刻を正確に判断することができる.
KST指数の方向を判断する0軸のクロス・コンビネーションを使用して,無意味な取引を避ける.
EMA均線は,サポートレジスタンスとして,さらに偽信号をフィルターし,EMAを突破したときにのみ入場する.
自動ストップトラッキングは,リスクをコントロールし,収益を稼働させるためのものです.
戦略のパラメータが少なく,実行し,最適化することが簡単です.
KST指数は,トレンド変化の判断に遅れがあり,一部の機会を逃す可能性があります.計算周期を短縮したり,加重方法を最適化したりできます.
EMA平均線は遅滞性があり,トレンド転換点で失効する可能性がある。他の指標または多平均線組み合わせを試すことができる。
止損設定が過度に緩やかな場合,損失が拡大する.過度に緊密な場合は,一夜間の大幅な変動によって止損する.バランスポイントを見つけるために注意深くテストする必要があります.
策略信号は頻繁で取引コストは高くなることがあります. 入場条件を適切に緩和して取引回数を減らすことができます.
KST指標の計算周期パラメータを最適化して,特定の品種に対してより敏感なパラメータの組み合わせを見つける.
異なる均線指標や組み合わせ (MA,WMAなど) をテストして,KSTと組み合わせてどの方がより効果的かを調べる.
波動率やATRの動態に応じてストップ・ローズを調整してみる.
取引量急増などのフィルタリング条件を追加して,隠蔽を避ける.
RSI,MACDなどの他の指標と組み合わせることで,より包括的な戦略を考える.
異なる品種のパラメータの効果をテストし,異なる品種に適応した最適化プログラムを作成する.
この戦略の全体的な構想は,明確で,信頼性があり,容易に実行され,KST指標によってトレンドの転換を判断し,EMA均線でさらにフィルタリングし,損失制御のリスクを停止し,中長期トレンドを自動的に追跡することができる.パラメータの選択は合理的で,最適化スペースは広く,ユーザーは必要に応じてパラメータを調整することができ,異なる品種に適用され,普遍性が良好である.この戦略は,初心者の学習にも適しており,専門的なトレーダーにも方向性を与えることができる.この戦略は,テストを最適化し続けることで,安定した信頼性の高いトレンドフォロー戦略になる見込みがある.
/*backtest
start: 2022-10-31 00:00:00
end: 2023-11-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Know Sure Thing and EMA Strategy by JLX", shorttitle="KST EMA JLX", format=format.price, precision=4, initial_capital = 1000, default_qty_type=strategy.percent_of_equity, default_qty_value = 100)
roclen1 = input(10, minval=1, title = "ROC Length #1")
roclen2 = input(15, minval=1, title = "ROC Length #2")
roclen3 = input(20, minval=1, title = "ROC Length #3")
roclen4 = input(30, minval=1, title = "ROC Length #4")
smalen1 = input(10, minval=1, title = "SMA Length #1")
smalen2 = input(10, minval=1, title = "SMA Length #2")
smalen3 = input(10, minval=1, title = "SMA Length #3")
smalen4 = input(15, minval=1, title = "SMA Length #4")
siglen = input(9, minval=1, title = "Signal Line Length")
smaroc(roclen, smalen) => sma(roc(close, roclen), smalen)
kst = smaroc(roclen1, smalen1) + 2 * smaroc(roclen2, smalen2) + 3 * smaroc(roclen3, smalen3) + 4 * smaroc(roclen4, smalen4)
sig = sma(kst, siglen)
plot(kst, color=color.green, title="KST")
plot(sig, color=color.red, title="Signal")
hline(0, title="Zero")
len = input(50, minval=1, title="Length EMA")
src = input(close, title="Source EMA")
offset = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
fastEMA = ema(src, len)
delta = kst - sig
buySignal = crossover(delta, 0) and kst < 0 and close > fastEMA
sellSignal = crossunder(delta, 0) and kst > 0 and close < fastEMA
longTrailPerc = input(title="Trail Long Loss (%)", type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
shortTrailPerc = input(title="Trail Short Loss (%)",type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
// STEP 2:
// Determine trail stop loss prices
longStopPrice = 0.0, shortStopPrice = 0.0
longStopPrice := if (strategy.position_size > 0)
stopValue = close * (1 - longTrailPerc)
max(stopValue, longStopPrice[1])
else
0
shortStopPrice := if (strategy.position_size < 0)
stopValue = close * (1 + shortTrailPerc)
min(stopValue, shortStopPrice[1])
else
999999
// Submit entry orders
if (buySignal)
strategy.entry(id="EL", long=true)
if (sellSignal)
strategy.entry(id="ES", long=false)
// STEP 3:
// Submit exit orders for trail stop loss price
if (strategy.position_size > 0)
strategy.exit(id="XL TRL STP", stop=longStopPrice)
if (strategy.position_size < 0)
strategy.exit(id="XS TRL STP", stop=shortStopPrice)
alertcondition(crossover(delta, 0) and kst < 0 and close > fastEMA,'Long alert', 'You should buy')
alertcondition(crossunder(delta, 0) and kst > 0 and close < fastEMA, 'Short alert', 'You should sell')