
この策略は,単純な移動平均を組み合わせた二均線策略を使用し,ATR波動率指数で市場の波動率を判断します. 短周期平均線上を長周期平均線に横断すると多頭市場と判断し,多入場します. 短周期平均線を下を長周期平均線に横断すると空頭市場と判断し,空き入場します. 同時に,合成交差量加重平均価格VWAPを組み合わせて平均線信号の信頼性を判断します. さらに,RSI指数と組み合わせて反転を避ける.
核心部分は双均線戦略である。双均線戦略は,一般的に50日平均線と200日平均線のような短期平均線と長期平均線を選択する。短期平均線上には長期平均線を横切るときに買い信号を生じる。短期平均線下には長期平均線を横切るときに売り信号を生じる。双均線戦略は,市場の長期短期トレンドの変化を判断し,平均線を突破してトレンドの転換点を捉える。
この策略では50日平均線を短周期平均線として,200日平均線を長周期平均線として選択する.結合交差量重み平均VWAPは平均線信号の信頼性を判断する.すなわち,平均線信号とVWAPが同定時にしか入場しない.このようにして,いくつかの偽信号をフィルターすることができる.
また,RSI指数に追加し,買い上げと売り上げを避ける. RSIが70を超えると買い上げを避ける,RSIが30を下ると売り上げを避ける.
最後に,ATR平均波動幅度指標によって市場の波動率とリスクレベルを判断する.ATR値が1.18以上であるときは,高波動と定義され,このとき,背景色を変更することでリスクが高いことを提示し,一時的に取引を回避し,波動率が低下した後の時間を待つことができます.
この戦略の利点は主に次の3つに表れています.
市場の中長期トレンドの転換点を捉え,トレンド取引を利用して利益を得る.
VWAPフィルタリングとVWAPフィルタリングの組み合わせにより,偽信号の信頼性が向上する.
RSIを導入することで逆市取引を避け,損失を減らすことができます.
ATRの波動率指数を使用して,市場のリスク状況を判断し,高波動の時期を避け,損失を減らすことができます.
各種指標の組み合わせは,シンプルでわかりやすく,理解しやすい実装で,量化取引の入門に適しています.
この戦略にはいくつかのリスクがあります.
2.VWAPは誤差が発生し,正しい取引信号をフィルタリングする可能性があります. 解決方法は,他の指標で補足された確認です.
4.ATRは市場の波動を判断する時に遅れがあるかもしれない. 解決策は最高価格,最低価格などの市場の波動を判断する方法です.
この戦略はさらに改善できる可能性が大きい:
より多くの均線配列をテストし,最適なパラメータを探します.
追加の補助指標のフィルター信号を追加する.例えばMACD,KDJなど.
ストップ・ローズ・ストップパラメータの最適化,損失の削減,利益の向上.
強い株と弱い株の取引戦略の違いを評価し,分類モデリングを行う.
RNNなどの機械学習アルゴリズムを組み合わせ,パラメータの自動最適化と戦略評価を実現する.
自動取引システムを開発し,実盤を接続して反テストを行う.
この戦略は,全体として比較的単純なトレンド追跡戦略である. 核心は,二均線を用い,長期短期トレンドを判断する. VWAPとRSIを組み合わせて,信号を処理し,ATRを適用する. 戦略の考え方はシンプルで,操作を容易に理解する. ある程度の最適化スペースによって,よりよい収益を得ることができる. 量化取引入門の選択肢として,非常に適しています.
/*backtest
start: 2024-01-04 00:00:00
end: 2024-01-11 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Simple Moving Averages", overlay=true)
sma50 = ta.sma(close, 50)
sma200 = ta.sma(close, 200)
vwap = ta.vwap(close)
rsi = ta.rsi(close, 14)
[diPlus, diMinus, adx_val] = ta.dmi(14, 14)
atr_val = ta.atr(14)
plot(sma50, color=color.new(color.green, 0))
plot(sma200, color=color.new(color.red, 0))
plot(vwap)
longCondition = ta.crossover(sma50, sma200) and vwap > close
shortCondition = ta.crossunder(sma50, sma200) and vwap < close
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)
barcolor = sma50 > sma200 ? (vwap < close ? (rsi < 70 ? color.green : color.blue) : color.yellow) : (sma50 < sma200 ? (vwap > close ? (rsi > 30 ? color.red : color.orange) : color.yellow) : na)
barcolor(barcolor)
bgcolor(adx_val > 25 and atr_val > 1.18 ? color.new(color.gray, 50) : color.new(color.black, 50), transp=90)
// ADX and ATR Label Box
// label.new(bar_index, high, "ADX: " + str.tostring(adx_val, "#.##") + "\nATR: " + str.tostring(atr_val, "#.##"), color=color.new(color.white, 0), textcolor=color.new(color.black, 0), style=label.style_labeldown, yloc=yloc.price, xloc=xloc.bar_index, size=size.small, textalign=text.align_left)
// Exit conditions (optional)
strategy.close("Long", when = ta.crossunder(sma50, sma200))
strategy.close("Short", when = ta.crossover(sma50, sma200))
// Take Profit and Stop Loss
takeProfitPercentage = 5
stopLossPercentage = 3
strategy.exit("Take Profit / Stop Loss", "Long", profit = takeProfitPercentage, loss = stopLossPercentage)
strategy.exit("Take Profit / Stop Loss", "Short", profit = takeProfitPercentage, loss = stopLossPercentage)