この記事では,移動平均クロスオーバー原理に基づく定量的な取引戦略を紹介する.この戦略は,移動平均値と価格を比較することで,長/短方向を決定し,リスクを制御するために利益とストップ損失レベルを設定する.戦略コードはパインスクリプトで書かれ,Dhan取引プラットフォームAPIと統合され,戦略信号の自動取引が可能である.
この戦略の核心は移動平均線である.トレンドを判断するための基礎として,特定の期間の閉じる価格の単純な移動平均線を計算する.価格が移動平均線を超えると,長い信号を生成し,下を横切ると,短い信号を生成する.Exrem関数は連続した重複信号をフィルタリングし,信号品質を改善するために使用される.戦略は,現在のポジション方向と価格と移動平均線との関係に基づいて,対応する利益とストップ損失レベルを設定し,各取引のリスクと収益を制御する.
移動平均クロスオーバーは,中長期市場トレンドを効果的に把握できるシンプルで使いやすいトレンドフォロー方法である.合理的なパラメータ設定により,戦略はトレンド市場で安定したリターンを得ることができる.利益とストップロスの設定は引き下げを制御し,リスク・リターン比率を改善するのに役立ちます.戦略コードロジックは機能モジュール化を使用して,読みやすく,拡張性も高い.また,戦略はダーンプラットフォームAPIを統合し,自動化オーダー実行を実現し,実行効率を改善します.
移動平均は本質的に遅れている指標である.市場のターニングポイントでは,シグナルが遅れて,最適な取引機会を逃したり,誤ったシグナルを引き起こす可能性があります.不適切なパラメータ設定は戦略のパフォーマンスに影響を与え,異なる市場特性と時間枠に応じて最適化する必要があります.固定パーセントの利益とストップロスは市場の変動の変化に適応しない可能性があります.また,不適切なパラメータ設定による損失のリスクもあります.
移動平均クロスオーバー戦略は,トレンドトラッキングとストップ損失制御を通じてトレンド市場で利益を得ることができるシンプルで実践的な定量的な取引戦略である.しかし,戦略自体は一定の制限があり,市場の特徴とリスクの好みに応じて最適化および改善する必要がある.実用的な応用では,厳格な規律執行と適切なリスク管理にも注意を払う必要があります.戦略プログラミングは,パインスクリプトなどの専門言語を使用し,自動化された戦略実行を実現するために取引プラットフォーム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)