
指数平均線交差戦略は,価格傾向を追跡する簡単な量化取引戦略である.これは,2つの異なるパラメータの設定の指数移動平均の間の交差を買入と売却のシグナルとして使用する.短期平均線上での長期平均線を横断すると買入シグナルが生じ,短期平均線の下での長期平均線を横断すると売りシグナルが生じます.
この戦略の核心的な論理は均線理論に基づいています.指数移動平均は価格の変動を効果的に平滑させ,価格のトレンド方向を判断できます.快速平均は価格の変化に迅速に反応できます.スロー平均は価格のトレンド方向を参考にします.
具体的には,この戦略は,まず,2つの指数移動平均を定義する.fib_levelとfib_price。 fib_levelはユーザの入力で設定され,fib_priceは最近100バーの最高価格と最低価格に基づいて計算される。 閉じる価格が上または下を通過すると,それぞれ買入と売却のシグナルが生じます。 また,ストップ・ロスを10バーに近い最高価格と最低価格に設定する。
均線参数を最適化して,三均線システムを使用して,または他の指標判断と組み合わせて誤信号を減らすことができる。同時に,適切な止損点を緩め,過度に頻繁な止損を防止する。
この戦略は以下の点で最適化できます.
平均線周期パラメータ設定を最適化する. 異なる長さの周期のパラメータの組み合わせをテストし,最適のパラメータを探す.
Volumeなどの指標のフィルターを追加する.Volumeが上昇すると買入シグナルが生み出され,Volumeが低下すると売り出され,価格が激しく変動すると誤信号が生み出されることから免れる.
機械学習アルゴリズムを使用してパラメータを自動的に最適化します. モデルに歴史データを入力し,より良いパラメータセットをトレーニングします.
ストップポジションに移動ストップメカニズムを追加する. ストップラインを利益の増加に合わせて移動させ,早めにストップを防止する.
指数均線交差戦略は,全体として,よりシンプルで実用的な量化取引戦略である.平線の優位性を利用して価格の傾向を判断し,リスクを制御するためにストップを設定する.この戦略は,理解しやすい,パラメータ設定は柔軟で,異なる品種の量化取引に適用される.パラメータ設定を継続的に最適化し,フィルタ条件を増加させ,移動ストップを設定することで,より良い戦略効果を得ることができる.
/*backtest
start: 2023-12-08 00:00:00
end: 2024-01-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Fibonacci Strategy", overlay=true)
// Define Fibonacci 0.5 level
fib_level = input(0.5, title="Fibonacci Level")
// Calculate Fibonacci 0.5 level price
fib_price = ta.lowest(low, 100) + (ta.highest(high, 100) - ta.lowest(low, 100)) * fib_level
// Define entry and exit conditions
long_condition = ta.crossover(close, fib_price)
short_condition = ta.crossunder(close, fib_price)
// Set exit points (using previous high or low)
long_exit = ta.highest(high, 10)
short_exit = ta.lowest(low, 10)
// Plot Fibonacci 0.5 level
plot(fib_price, "Fib 0.5", color=color.blue, linewidth=1, style=plot.style_circles)
// Initialize variables
var inLong = false
var inShort = false
// Set trading signals
if (long_condition)
if not inLong
strategy.entry("Buy", strategy.long)
inLong := true
strategy.exit("Exit", "Buy", limit=long_exit)
if (short_condition)
if not inShort
strategy.entry("Sell", strategy.short)
inShort := true
strategy.exit("Exit", "Sell", limit=short_exit)
if (ta.crossover(close, long_exit) or ta.crossunder(close, short_exit))
inLong := false
inShort := false