この戦略は,シンプルな移動平均の黄金クロスと死叉の原理を適用して,株式の長短ポジションを実現する. 速線が下方から慢線を突破すると,多額; 速線が上方から下方から慢線を突破すると,空白する.
この戦略は,まず,反測の開始と終了時間を定義し,次に,平均の種類と周期長さを含む2つの平均の計算パラメータを設定する.
getMAType () 関数を使って2つの平均値の値を計算する。その中でfastMAは短周期平均であり,slowMAは長周期平均である。
この戦略の核心的な論理は,
fastMAでslowMAを打つとき,多信号longを発信する.
fastMAの下からslowMAを通過すると,空白信号shortを発する.
最後に,反測期内に,多行シグナルに遭遇した場合に長仓戦略を適用し,空値シグナルに遭遇した場合に空仓戦略を適用する.
リスクに合わせて,次の方法でさらに最適化できます.
他の技術指標のフィルターを追加して,トレンドを識別する.
単発損失をコントロールする戦略を追加する.
市場を揺るがすような利回りを避けるために,エネルギー指数などを導入する.
パラメータ最適化メカニズムを確立し,最適なパラメータの組み合わせを自動的に探す.
この戦略は,以下の点でさらに最適化できます.
固定ストップポイントを設定したり,ストップを追跡したり,損失をコントロールしたりするなど,ストップ戦略を追加する.
固定ポジション,ダイナミックポジションなどのポジション管理戦略を増やし,取引リスクを制御する.
フィルターを追加し,他の技術指標と組み合わせてトレンドを認識し,勝利率を上げます.
パラメータ設定を最適化し,格子検索,線形帰帰帰などの方法によって最適のパラメータを探します.
展開する多額の空調策,例えば,破位反転,分期投資など,富裕な取引策.
震災の際には,エネルギー指数を増やして,震災を回避する.
取引品種を拡大し,株式指数期貨,外貨,デジタル通貨などの品種を拡大する.
本策は,移動平均線の交叉原理に基づく株式の長短ポジション選択を実現する.策の考え方は単純明快で,広く使用され,適応力があり,一定の実用価値がある.しかし,この策には,一定の遅滞性があり,効率的にフィルタリング振動などの欠点がある.将来,ストップ・ロスを完善し,パラメータを最適化し,フィルターを増やすなどで最適化することができ,策をより優位にする.
/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//strategy("Golden X BF Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)
/////////////// Time Frame ///////////////
testStartYear = input(2010, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() => true
///////////// MA Params /////////////
source1 = input(title="MA Source 1", defval=close)
maType1 = input(title="MA Type 1", defval="sma", options=["sma", "ema", "swma", "wma"])
length1 = input(title="MA Length 1", defval=50)
source2 = input(title="MA Source 2", defval=close)
maType2 = input(title="MA Type 2", defval="sma", options=["sma", "ema", "swma", "wma"])
length2 = input(title="MA Length 2", defval=200)
///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) =>
res = sma(close, 1)
if maType == "ema"
res := ema(sourceType, maLen)
if maType == "sma"
res := sma(sourceType, maLen)
if maType == "swma"
res := swma(sourceType)
if maType == "wma"
res := wma(sourceType, maLen)
res
///////////// MA /////////////
fastMA = getMAType(maType1, source1, length1)
slowMA = getMAType(maType2, source2, length2)
long = crossover(fastMA, slowMA)
short = crossunder(fastMA, slowMA)
/////////////// Plotting ///////////////
checkColor() => fastMA > slowMA
colCheck = checkColor() ? color.lime : color.red
p1 = plot(fastMA, color = colCheck, linewidth=1)
p2 = plot(slowMA, color = colCheck, linewidth=1)
fill(p1, p2, color = checkColor() ? color.lime : color.red)
bgcolor(long ? color.lime : short ? color.red : na, transp=20)
/////////////// Execution ///////////////
if testPeriod()
strategy.entry("Long", strategy.long, when=long)
strategy.entry("Short", strategy.short, when=short)