資源の読み込みに... 荷物...

MAのクロス戦略

作者: リン・ハーンチャオチャン開催日:2024年6月3日11時25分43秒
タグ:SMAマルチ

img

概要

この記事では,移動平均クロスオーバー原理に基づく定量的な取引戦略を紹介する.この戦略は,移動平均値と価格を比較することで,長/短方向を決定し,リスクを制御するために利益とストップ損失レベルを設定する.戦略コードはパインスクリプトで書かれ,Dhan取引プラットフォームAPIと統合され,戦略信号の自動取引が可能である.

戦略原則

この戦略の核心は移動平均線である.トレンドを判断するための基礎として,特定の期間の閉じる価格の単純な移動平均線を計算する.価格が移動平均線を超えると,長い信号を生成し,下を横切ると,短い信号を生成する.Exrem関数は連続した重複信号をフィルタリングし,信号品質を改善するために使用される.戦略は,現在のポジション方向と価格と移動平均線との関係に基づいて,対応する利益とストップ損失レベルを設定し,各取引のリスクと収益を制御する.

戦略 の 利点

移動平均クロスオーバーは,中長期市場トレンドを効果的に把握できるシンプルで使いやすいトレンドフォロー方法である.合理的なパラメータ設定により,戦略はトレンド市場で安定したリターンを得ることができる.利益とストップロスの設定は引き下げを制御し,リスク・リターン比率を改善するのに役立ちます.戦略コードロジックは機能モジュール化を使用して,読みやすく,拡張性も高い.また,戦略はダーンプラットフォームAPIを統合し,自動化オーダー実行を実現し,実行効率を改善します.

戦略リスク

移動平均は本質的に遅れている指標である.市場のターニングポイントでは,シグナルが遅れて,最適な取引機会を逃したり,誤ったシグナルを引き起こす可能性があります.不適切なパラメータ設定は戦略のパフォーマンスに影響を与え,異なる市場特性と時間枠に応じて最適化する必要があります.固定パーセントの利益とストップロスは市場の変動の変化に適応しない可能性があります.また,不適切なパラメータ設定による損失のリスクもあります.

戦略の最適化方向

  1. 異なるタイムフレームの複数の移動平均を組み合わせて信号の信頼性を向上させることができる.例えば,二倍または三倍移動平均のクロスオーバーなど.
  2. ATR のような変動指標に基づいて動的調整したり,トライリングストップ戦略を採用したりすることで,利益とストップ損失の設定をさらに最適化することができる.
  3. 重要なサポート/レジスタンスレベルの価格突破,取引量の変化など,より多くのフィルタリング条件を追加して信号品質を改善することができます.
  4. 実際の適用では,戦略の適切なバックテストと検証を行い,単一取引リスクと全体的な抽出を制御するために資金を管理する必要があります.

概要

移動平均クロスオーバー戦略は,トレンドトラッキングとストップ損失制御を通じてトレンド市場で利益を得ることができるシンプルで実践的な定量的な取引戦略である.しかし,戦略自体は一定の制限があり,市場の特徴とリスクの好みに応じて最適化および改善する必要がある.実用的な応用では,厳格な規律執行と適切なリスク管理にも注意を払う必要があります.戦略プログラミングは,パインスクリプトなどの専門言語を使用し,自動化された戦略実行を実現するために取引プラットフォームAPIを統合することができます.


/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © syam-mohan-vs @ T7 - wwww.t7wealth.com www.t7trade.com
//This is an educational code done to describe the fundemantals of pine scritpting language and integration with Indian discount broker Dhan. This strategy is not tested or recommended for live trading. 

//@version=5
strategy("Pine & Dhan - Moving Average Crossover Strategy", overlay=true)

//Remove excess signals
exrem(condition1, condition2) =>
    temp = false
    temp := na(temp[1]) ? false : not temp[1] and condition1 ? true : temp[1] and condition2 ? false : temp[1]
    ta.change(temp) == true ? true : false

// Define MA period
ma_period = input(20, title = "MA Length")

// Define target and stop loss levels
target_percentage = input.float(title="Target Profit (%)", defval=2.0)
stop_loss_percentage = input.float(title="Stop Loss (%)", defval=1.0)

// Calculate the MA
ma = ta.sma(close, ma_period)

// Entry conditions
long_entry = close >= ma
short_entry = close < ma

// Calculate target and stop loss prices
target_price = long_entry ? strategy.position_avg_price + (close * (target_percentage / 100)) : strategy.position_avg_price - (close * (target_percentage / 100)) 
stop_loss_price = short_entry ? strategy.position_avg_price + (close * (stop_loss_percentage/ 100)) : strategy.position_avg_price - (close * (stop_loss_percentage / 100)) 

long_entry := exrem(long_entry,short_entry)
short_entry := exrem(short_entry,long_entry)

// Plot the MA
plot(ma, color=color.blue, linewidth=2, title="MA")

// Plot the entry and exit signals
plotshape(long_entry, style=shape.arrowup, color=color.green, size=size.small,location = location.belowbar)
plotshape(short_entry, style=shape.arrowdown, color=color.red, size=size.small,location = location.abovebar)

//Find absolute value of positon size to exit position properly
size = math.abs(strategy.position_size)

//Replace these four JSON strings with those generated from user Dhan account
long_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"B","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"I","sort_order":"1","price":"0"}]}'
long_exit_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"S","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'
short_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"S","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'
short_exit_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"B","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'

// Submit orders based on signals
if(strategy.position_size == 0)
    if long_entry 
        strategy.order("Long", strategy.long,alert_message=long_msg)          

    if short_entry
        strategy.order("Short", strategy.short,alert_message=short_msg)        
    
if(strategy.position_size > 0)
    
    if(short_entry)
        strategy.order("Short", strategy.short, qty = size, alert_message=short_msg)     
    else
        strategy.exit("Long Exit", from_entry="Long", qty = size, stop=stop_loss_price, limit= target_price, alert_message=long_exit_msg)

if(strategy.position_size < 0)
    
    if(long_entry)
        strategy.order("Long", strategy.long, qty = size, alert_message=long_msg)    
    else           
        strategy.exit("Short Exit", from_entry="Short", qty = size, stop=stop_loss_price, limit= target_price, alert_message=short_exit_msg) 



関連性

もっと