この戦略は,配置によって複数の快速・ゆっくり平均線の組み合わせを設定し,すべての快速線上での遅い線を横切るときに多めにする.少なくとも1つの快速線下での遅い線を横切るときに平仓する.この戦略は,複数の平均線の優位性を充分に活用し,より強いポジションの決定システムを形成する.
戦略の主要要素と規則は以下の通りです.
複数のグループ・ラスト・ラスト・平均線:SMA,WMA,VWMAなどの複数の平均線指標を使用する.
信号を多発する:全ての高速線で遅線を横切る際の多発.
平仓信号:任意の快線下を通過すると平仓.
ストップストロップ:ATR値で固定ストップストロップポイントを設定する.
コンフィギュレーション:多グループ均線参数を柔軟に構成する.
多均線組合せ立场投票方式により入場し,信号の信頼性を有効に強化することができる.多均線パラメータはカスタマイズ可能な配置であり,柔軟性がある.
単一の均線戦略と比較して,この戦略は以下の利点があります.
多平均線配列は,より全面的なトレンド判断を可能にします.
投票の仕方は,騒音取引を誤解しないようにする.
平均線パラメータを自由に配置でき,最適化スペースは大きい。
複数の平均線指標をサポートし,使用の柔軟性があります.
ストップ・ストップ・ストップ・ポイントを設定し,単発の損益を制御する.
長いサイクルの使用はより効果があり,曲線振動を減らすことができる.
計算はシンプルで直感的で,実行し操作しやすい.
平均線よりも安定性と持続性が優れている.
しかし,この戦略にはいくつかのリスクがあります.
戦略の複雑さを高めます.
パラメータを過度に最適化するリスクがある.
平均線は本質的にトレンドの変化の遅滞認識である.
取引量も考慮していないため,
ストップ・ストップ・損失の設定は,恣意的であり,不必要な平仓を引き起こす可能性があります.
市場環境の変化により影響が大きく変動する.
利回り率に注目し,曲線が太くならないようにしましょう.
パラメータを複数の品種で安定性をチェックする.
分析の結果,この戦略は以下の側面から強化される:
テスト平均線パラメータは,異なる品種における健壮性である.
取引量や変動率の検証を増加させる
ストップ・ストップ・損失パラメータを最適化する.
設定した最大撤回許容度
ダイナミックポジション管理機構の構築
機械学習の導入の効果を評価する
利回り曲線の最大引出と収縮に注意してください.
繰り返しの戦略で,過度に最適化されないようにする.
この戦略は,配置化により多均等線配合を設定し,より安定したポジション保持決定機構を形成する.しかし,いかなる戦略も,過適合を防止し,市場環境に応じて動的に調整する必要がある.継続的に最適化テスト,量化戦略のみが長期にわたって市場に適応できる.
/*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