この戦略は,複数の高速/遅い移動平均ペアの柔軟な構成を可能にします.すべての高速MAが遅いMAの上にクロスオーバーしたとき,高速MAが遅いMAを下にクロスオーバーしたとき,長くなって,終了します.複数のMAを持つ投票メカニズムは,堅牢なポジション保持決定を形成することを目的としています.
主要な構成要素と規則は次のとおりです.
複数の高速/遅いMA: SMA,WMA,VWMAなどを使用する.
長信号:高速MASが遅いMASを横切る
出口信号: 遅いMAを下回る速度のMA横断.
利益/損失ポイント: ATRに基づく固定ポイント.
構成可能:複数のMAペアの柔軟な構成.
複数のMAを持つ投票ベースのエントリにより,信号の信頼性が向上します.カスタム構成により柔軟性があります.
単一のMA戦略と比較すると,以下のような利点があります.
複数のMAはより包括的な傾向評価を提供します.
投票は騒音による 誤った信号を避けます
オーダーメイド MA 構成から大きな調節スペース
異なるMAタイプへのサポートにより適応性が向上します
取引リスク/報酬ごとに定義された利益/損失ポイント制御.
長い時間枠でよりうまく機能し 曲線が少なくなります
シンプルで直感的な論理で 簡単に実行し操作できます
単一MAと比較して,より長い寿命で全体的に安定しています.
しかし,いくつかのリスクがあります.
複数のMAsで複雑性が高まる
過剰な最適化のリスク
傾向の変化を特定する際の根本的な遅れ
容量が考慮されないと 閉じ込められる危険性があります
利益/損失ポイントは,不要な出口を引き起こす可能性があります.
市場制度の変化に伴い 業績が上がる
報酬/リスクの比率と曲線のスムーズさを監視する必要があります
ツール間の信頼性は検証が必要です.
分析に基づいて,改善には以下の要素が含まれる.
パラメータの強度を 異なる機器でテストする
ボリュームまたは波動性の確認を追加します.
利益/損失のポイントを最適化
最大許容可能な抽出制限を設定する
ダイナミックな位置サイズモデルの構築
機械学習の導入による影響の評価
最大抽出量と曲線の平らさを監視する
オーバーフィッティングを避けるため 継続的な繰り返しをします
構成可能なマルチMAアプローチは,堅牢なポジション保持メカニズムを形成する.しかし,過剰なフィットメントと変化する市場へのダイナミックな適応を防ぐことは,どの戦略の長寿の鍵である.厳格な継続的な最適化とテストによってのみ,量子戦略が成功を維持することができる.
/*backtest start: 2022-09-16 00:00:00 end: 2023-09-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © levieux //@version=5 strategy(title='Configurable Multi MA Crossover Voting System', shorttitle='Configurable Multi MA Crossover Voting System', initial_capital=1000, overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1) crossoverConfig= input.string(defval="2x4,3x5,4x6", title="Crossover Config") source= input.source(high) maType= input.string("WMA", title="Moving Average Type", options=["WMA","SMA","VWMA"]) atrPeriod= input(14, title="ATR Period") profitAtr = input(10, title="Profit ATR x") lossAtr = input(5, title="Loss ATR x") ma(src,length,type) => float ma = switch type "SMA" => ta.sma(src, length) "WMA" => ta.wma(src, length) "VWMA" => ta.vwma(src, length) crossoverGroups= str.split(crossoverConfig, ",") crossoverCount= array.size(crossoverGroups) crossovers= array.new_string(crossoverCount) positions= array.new_int(crossoverCount, 0) longVotes= 0 for i= 0 to crossoverCount-1 crossover= str.tostring(array.get(crossoverGroups, i)) crossoverBoundaries= str.split(crossover, "x") int fastLength= math.round(str.tonumber(array.get(crossoverBoundaries, 0))) int slowLength= math.round(str.tonumber(array.get(crossoverBoundaries, 1))) wmaFast= ma(source,fastLength,maType) wmaSlow= ma(source,slowLength,maType) if wmaFast>wmaSlow longVotes:= longVotes + 1 array.set(positions, i, 1) longCondition= longVotes==crossoverCount and strategy.position_size==0 //profitTicks = profitAtr*ta.atr(atrPeriod)/syminfo.mintick //lossTicks = lossAtr*ta.atr(atrPeriod)/syminfo.mintick profitPrice= close+profitAtr*ta.atr(atrPeriod) lossPrice= close-lossAtr*ta.atr(atrPeriod) if strategy.position_size>0 profitPrice:= profitPrice[1] lossPrice:= lossPrice[1] plot(profitPrice, color=color.green) plot(lossPrice, color=color.red) if longCondition and profitPrice>0 strategy.entry("Long", strategy.long) if longVotes<crossoverCount and strategy.position_size>0 and (high>profitPrice or low<lossPrice) strategy.close("Long") longVotes:= 0