均線金交差策略は,比較的に一般的な量化取引策策である.この策略は,2つの異なるパラメータの指数移動平均線 ((EMA) を使用し,短期EMA上での長期EMA穿越時,多行し,短期EMA下での長期EMA穿越時,平行する.この策略は,短期EMAが価格変化により迅速に反応し,長期EMAがトレンドを反映する特性を利用し,EMA交差を利用して取引信号を形成する.
この戦略は,まず,EMA1の長さ10とEMA2の長さ21の2つの平均線を定義し,次に,EMA1の長さ10とEMA2の長さ21の2つの平均線の値を計算します.EMA1の上でema2を穿越すると,価格が上昇して突破し始めることを示す多値シグナル;EMA1の下にema2を穿越すると,価格がEMA平均線を下回ることを示す平仓シグナルです.
偽突破をフィルタリングするために,コードは,次の式で計算される値の値も定義しています.
threshold = ((ema1 - ema2)*100) / ((ema1 + ema2)/2)
この値は,2つの平均線間隔が平均線平均値の割合を表している.thresholdが0.15%より大きい場合は多信号,−0.006より小さい場合は平仓信号である.
この戦略の取引シグナルは,以下のようにまとめられます.
この戦略の利点は以下の通りです.
EMA平均線を使用すると,価格データを平らにし,取引シグナルを生成するのに役立ちます.
双EMAは,応答速度と安定性においてバランスをとる異なるパラメータを設定する.
値の追加により,偽の突破をフィルタリングし,無駄な取引を防ぐことができます.
戦略はシンプルでわかりやすく,理解しやすい,初心者向けに適しています.
戦略の効果を最適化するために,EMAパラメータと値を柔軟に調整できます.
この戦略にはいくつかのリスクがあります.
EMA平均線は価格に遅れ,ショートライン操作の機会を逃す可能性がある。
市場が逆転すれば,大きな損失を招く可能性がある.
thresholdの値が正しく設定されていない場合,有効な信号をフィルタリングしたり,誤った信号を発出したりする可能性があります.
EMAのパラメータは不適切であり,短期および長期のEMAには明らかな特徴的差異がないため,偽信号が生じます.
大盤の波動は,ストップ損失を引き起こす可能性があるので,合理的なストップ損失を設定する必要があります.
この戦略は以下の点で最適化できます.
EMAパラメータを最適化し,異なる周期パラメータが戦略効果に与える影響をテストする.
値の最適化,偽信号のフィルタリングと有効信号の保持のバランス.
MACD,KDJなどの他の技術指標判断を追加し,取引信号を総合的に判断する.
ストップメカニズムに参加し,移動ストップまたは固定ストップで単一損失を制御します.
単発入場のリスクを低減するために,入場を分量的に行う方法を検討することができます.
ポジションの持久期間をテストし,より適切なポジションの周期を探します.
均線金十字戦略の全体的な考え方は明確で分かりやすく,EMA均線の特性を利用して取引信号を判断する.この戦略には一定の優位性があり,同時にいくつかの潜在的リスクにも注意しなければならない.パラメータ最適化,止損設定,信号フィルタリングなどの方法によってよりよい戦略効果を得ることができる.この戦略は,協調して量化取引の入門戦略として学習し,実践する.
/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
if high > ta.highest(high[1], 5)
strategy.entry("Enter Long", strategy.long)
else if low < ta.lowest(low[1], 5)
strategy.entry("Enter Short", strategy.short)//@version=3
strategy(title="ema10-21", shorttitle="10/21", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 2500, commission_type = strategy.commission.percent, commission_value = 0.2)
len1 = input(10, minval=1, title="EMA #1 length")
src1 = input(close, title="EMA Source #1")
a = ta.ema(src1, len1)
plot(a, title="EMA #1", color=color.orange, linewidth=2, style=plot.style_line)
len2 = input(21, minval=1, title="EMA #2 length")
src2 = input(close, title="EMA Source #2")
b = ta.ema(src2, len2)
plot(b, title="EMA #2", color=color.blue, linewidth=2, style=plot.style_line)
threshold = ((a-b)*100)/((a+b)/2)
thresholdUp = threshold > 0.15
thresholdDown = threshold < -0.006
if (thresholdUp)
strategy.entry("Buy", strategy.long)
if (thresholdDown)
strategy.close("Buy", strategy.long)
//goLong() => (crossover(a, b)) and (threshold >= 0.0025)
//killLong() => (crossunder(a, b)) and (threshold <= -0.0025)
//strategy.entry("Buy", strategy.long, when = goLong())
//strategy.close("Buy", when = killLong())
//threshold = ((a-b)*100)/((a+b)/2)
//achat = out1 > out2
//vente = out1 < out2 //and threshold < -0.025
//strategy.entry("long", true, when = achat)
//strategy.exit("exit", "long", when = vente)