これは移動平均値に基づいたブレークアウト取引戦略である.移動平均値として一定の期間中の平均価格を計算する.価格が移動平均値を突破すると,取引信号が生成される.
この戦略は主に移動平均指標に基づいている. SMA関数を用い,移動平均値を得るため,期間中の平均閉値を計算する. 最新の閉値が移動平均値を上向きに突破すると,購入信号が生成される. 最新の閉値が移動平均値を下向きに突破すると,販売信号が生成される.
具体的には,移動平均データシーケンスを得るため,戦略内の移動平均のソース (最近の閉値) と長さを定義します.その後,移動平均値を超えると長オーダーを作成し,移動平均値を下回るとショートオーダーを作成します.オーダーを作成した後,また,オーダーが設定された利益率に達するとポジションの一部を閉鎖し,オーダーが既定の利益率に達するとポジション全体を閉鎖します.
シンプルで実用的な戦略です.以下の利点があります.
この戦略には多くの利点がありますが,いくつかのリスクがあります.
これらのリスクを制御するために フィルタリングのための他の指標を組み合わせ 短期的な市場動向判断を導入したり 最適なパラメータ組み合わせを見つけるために 機械学習方法を使用することで 最適化することができます
戦略は以下の側面で最適化できます.
トレーディングシステムを構築し,勝率を改善するために,判断のための他の技術指標を追加します. MACD,KDなどの指標を導入することができます.
ストップ・ロスのメカニズムを追加します. 利益をロックし,より大きな損失を避けるために,ストップ・ロスの遅れまたは時間ベースのストップ・ロスを使用します.
パラメータ最適化を実行する. 最適な組み合わせを見つけるために移動平均期パラメータを変更する. 異なる種類の移動平均値もテストすることができます.
機械学習の判断力を高め ランダムフォレストやLSTMなどのアルゴリズムを複数の要因と組み合わせて 傾向の方向性を決定します
入口と出口ロジックを最適化する.トレンドの終わりに近づいているトレンドに対する取引を避けるためにトレンドフィルタリング条件を設定する.段階的な出口ロジックを使用することを検討する.
この移動平均ブレイクアウト戦略は,初心者向け量子取引戦略として非常に適しています. シンプルな論理があり,理解し操作しやすく,いくつかの実用的な効果があります. 同時に,さらなるテストと最適化のために多くの余地があります. より良い量子戦略を開発するために,このベースでより多くの技術指標とモデルを導入することができます.
/*backtest start: 2023-11-20 00:00:00 end: 2023-11-22 08:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // |-- Initialize Strategy Parameters: strategy( // |-- Strategy Title. title='[Tutorial][RS]Working with orders', // |-- if shorttitle is specified, it will overwrite the name on the chart window. shorttitle='WwO', // |-- if true it overlays current chart window, otherwise it creates a drawer to display plotting outputs. overlay=true, // |-- Strategy unit type for default quantity, possible arguments: (strategy.cash, strategy.fixed, strategy.percent_of_equity) default_qty_type=strategy.cash, // |-- Value to use for default trade size default_qty_value=1000, // |-- Default Account size initial_capital=100000, // |-- Account Currency parameter currency=currency.USD ) // |-- Strategy Profit/loss parameters: profit = input(defval=5000, title='Take Profit') loss = input(defval=5000, title='Stop Loss') ratio = input(defval=2.0, title='Ratio at wich to take out a percentage off the table (take profit / ratio).') percent = input(defval=50.0, title='Percentage of position to take profit.') // |-- Signal Parameters: // | // |-- Moving Average input source and length parameters. src = input(defval=close) length = input(defval=100) // |-- Moving Average Data series. ma = sma(src, length) // |-- Condition for triggering a buy(long) order(trade). if crossover(src, ma) // |-- Create the order. strategy.order(id='Buy', long=true) // |-- Issue a exit order to close a percentage of the trade when a specified ratio(take profit / ratio) is reached. strategy.exit(id='Buy Half Exit', from_entry='Buy', qty_percent=percent, profit=profit/ratio) // |-- Issue a exit order to close the full position, when take profit or stop loss's are reached. strategy.exit(id='Buy Full Exit', from_entry='Buy', qty_percent=100, profit=profit, loss=loss) if crossunder(src, ma) // |-- Create the order. strategy.order(id='Sell', long=false) // |-- Issue a exit order to close a percentage of the trade when a specified ratio(take profit / ratio) is reached. strategy.exit(id='Sell Half Exit', from_entry='Sell', qty_percent=percent, profit=profit/ratio) // |-- Issue a exit order to close the full position, when take profit or stop loss's are reached. strategy.exit(id='Sell Full Exit', from_entry='Sell Half Exit', qty_percent=100, profit=profit, loss=loss) // |-- Output Functions. plot(series=ma, title='MA', color=black)