自動化された機械学習取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-29 11:20:42
タグ:

img

概要

この戦略は,自動取引戦略を実装するために機械学習方法を活用しています.複数の指標とモデルを統合して,自動取引信号を生成し,それに応じて購入および販売の決定を行います.

戦略原則

この戦略は主に次の主要なポイントに基づいています

  1. 市場傾向の方向性を決定するためにハル移動平均を使用
  2. 短期・中期動向を判断するために EMA を使用する
  3. 鍵となる SUPPORT/RESISTANCEレベルを特定するためにキャンドルボディチャネルを使用
  4. オープンと閉鎖価格のクロスオーバーに基づいて意思決定を行う

具体的には,戦略はハルMA,13期EMA,21期EMAをプロットする. EMAの長期および短期状態に基づいて短期および中期トレンド方向を判断する.より長いサイクルトレンドを決定するためにハルMAと組み合わせる.これは,後の取引信号の一般的な方向性に関するガイドラインを提供します.

ポジションを調整する前に,戦略はサポートとレジスタンスレベルに対応するエンティティチャネル内の最高値と最低値を参照します.これは主要な価格領域で取引信号を生成することを避けます.

最後に,戦略は60期間のオープンと閉鎖価格を呼び出す. 閉じる価格がオープン価格を超えると,購入信号が生成される. 下を横切ると,販売信号が生成される. これは取引の論理全体を完了させる.

利点分析

この戦略の最大の利点は,機械学習と技術分析指標を組み合わせて論理的で調整可能で使いやすい自動取引ソリューションを実現することです.

  1. 複数のインディケーターコンボが信号の精度を向上させる

    戦略は1つまたは2つの指標だけに頼らず,トレンド,サポート/レジスタンス,価格突破などの複数の要因を考慮する.これは信号の信頼性と精度を大幅に向上させる.

  2. 柔軟なパラメータ設定

    Hull MA,EMA,オープン/クローズクロスオーバーの期間をパラメータで調整できるため,戦略は異なる市場環境に適応できる.

  3. 自動取引信号

    インディケーターやクロスオーバーに基づく取引信号は,手動的な判断なしに自動的に買取と売却を誘発し,困難を軽減します.

  4. 視覚化表示

    戦略のグラフは,市場構造,トレンド状況,主要価格を明確に示し,戦略判断の基礎を直感的に表示することができます.

リスク分析

この戦略は複数の側面で最適化されていますが,依然としていくつかの潜在的なリスクがあります.

  1. 激烈な価格変動を追跡できなかった

    不安定な市場では,指標が非効果的になり,または遅延し,ストラテジーは価格の変化を時間的に追跡することができません.パラメータは,そのような市場に適応するために最適化する必要があります.

  2. 信号誤差率があるか

    インディケーターやモデルに基づく取引信号は,多かれ少なかれ,いくつかの誤った信号または欠けている信号を有します.これをもっと多くの補助信号を組み合わせることで改善する必要があります.

  3. 長期/短期混合リスク

    ロングとショートポジションの両方を同時に行う戦略は,判断が間違っていた場合,両側に損失のリスクがあります.これを制御するには,厳格なストップ損失または低いポジションサイズが必要です.

  4. 過身長リスク

    過剰に複雑なパラメータ設定は過剰なフィットメントの危険性があります. 制限されたパラメータ組み合わせ数でシステムを簡素化する必要があります.

オプティマイゼーションの方向性

この戦略の最適化には,主に次の側面において,まだいくつかの余地があります.

  1. より多くの指標信号を追加

    既存の指標に加えて,BOLLチャンネル,KD指標など,システム参照を豊かにするために,より多くの補助指標を導入することができる.

  2. ディープラーニングモデルを適用する

    信号の質を向上させるために LSTMやその他のディープラーニングモデルを訓練するための特徴として単純な指標を使用します.

  3. 基本データを含める

    マクロ経済データ,政策情報,その他の基本的な要因を追加して長期的意思決定を最適化します

  4. リスクとポジションのサイズ

    ストップ・ロスの戦略を導入し 戦略のリターンの変動に基づいて ポジションのサイズを動的に調整し リスクを厳格に制御します

結論

この戦略は,トレンド,サポート/レジスタンスレベル,ブレークアウトおよび他の複数の指標を統合し,機械学習方法を活用し,自動化された,使用準備の良い定量的な取引ソリューションを達成する.多様な指標コンボ,調節可能なパラメータ,自動化されたシグナルの利点があり,同時に,追跡偏差,信号エラー,ロング/ショートミックスリスクに何らかの程度直面している.より多くの補助指標とモデルを組み込み,基本的な要因を組み合わせ,ポジションを動的に調整し,より安定的で正確で知的な定量的な取引パフォーマンスを達成するために,さらなる最適化のための方向性はまだあります.


/*backtest
start: 2023-01-22 00:00:00
end: 2024-01-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title='Ali Jitu Abus', shorttitle='Ali_Jitu_Abis_Strategy', overlay=true, pyramiding=0, initial_capital=1000, currency=currency.USD)

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=input(false, title="Bar Channel On/Off")
ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0)
ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0)
//fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel")

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:',  defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)
RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0)
RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0
plot_color = direction > 0  ? lime: direction < 0 ? red : na
plot(ema0, title="EMA", style=line, linewidth=1, color = plot_color)

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0
plot_color2 = direction2 > 0  ? lime: direction2 < 0 ? red : na
plot(ema02, title="EMA Signal 2", style=line, linewidth=1, color = plot_color2)

//=============Hull MA//
show_hma = input(false, title="Display Hull MA Set:")
hma_src = input(close, title="Hull MA's Source:")
hma_base_length = input(8, minval=1, title="Hull MA's Base Length:")
hma_length_scalar = input(5, minval=0, title="Hull MA's Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=2, title="Hull MA")

//============ signal Generator ==================================//
Period=input('60')
ch1 = request.security(syminfo.tickerid, Period, open)
ch2 = request.security(syminfo.tickerid, Period, close)
longCondition = crossover(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
if (longCondition)
    strategy.entry("BUY", strategy.long)
shortCondition = crossunder(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
if (shortCondition)
    strategy.entry("SELL", strategy.short)

plot(request.security(syminfo.tickerid, Period, close), color=red, title="Period request.security Close")
plot(request.security(syminfo.tickerid, Period, open), color=green, title="Period request.security Open")

///////////////////////////////////////////////////////////////////////////////////////////

もっと