移動平均クロスオーバー戦略は,非常に一般的な定量的な取引戦略である. 移動平均の黄金十字と死十字を使用して,トレンドと利益を決定する. 短期移動平均が長期移動平均を上回ると,上昇傾向を示し,ロングポジションを取ることができる. 短期移動平均が長期移動平均を下回ると,下落傾向を示し,ショートポジションを取ることができる.
この戦略は,入口と出口点を決定するために移動平均の黄金十字と死十字に基づいています.コードは2つのブール式入力パラメータを使用します.upOrDown
そしてlongOrShort
長期または短期を決定するpercentInput
価格変化のclosePositionDays
ポジションを保持する日数を設定します
基本論理は:昨日の対比値の上昇/減少を計算する.入力値の%に達すると,取引信号が起動する.長い信号である場合,今日の価格が昨日の対比値よりも上昇すると,ロングに行く.ショート信号である場合,今日の価格が昨日の対比値よりも低下すると,ショートに行く.
ロング/ショート後,エントリー日と次の4日間は,チャートに色でマークされます. 4日後にポジションは自動的に閉鎖されます.
リスク管理
移動平均クロスオーバー戦略は,非常にシンプルで実用的な定量的な取引戦略である.短期的および長期的トレンドの関係を判断することによって,資産価格の傾向性から利益を得ます.この戦略は,明確な論理で実行しやすく,多くの定量的な取引戦略の基盤を形成します.パラメータチューニングと最適化によってより良いパフォーマンスを得ることができます.しかし,リスクを管理し,誤用を避ける必要があります.
/*backtest start: 2023-01-01 00:00:00 end: 2023-10-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // Created by Leon Ross strategy(title = "DaysAfterCertainPercentChangev1", shorttitle = "DACPCv1", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, calc_on_every_tick=true, initial_capital=100000) //Inputs longOrShort = input(title="Long=Checked Short=Unchecked", type=bool, defval=true) //long=true, down=false upOrDown = input(title="Direction of Today vs. Previous day: Up=Checked Down=Unchecked", type=bool, defval=true) //up=true, down=false: this is the direction of days vs previous day percentInput = input(title="Percent", type=float, defval=4.5) closePositionDays = input(title="How Many Days to Close Position", defval=4) //Conditions //percentUpValue = (close / close[1]) - 1 //percentUp = percentUpValue >= (percentInput/100.0) //upConditions = percentUp //percentDownValue = 1- (close / close[1]) //percentDown = percentDownValue >= (percentInput/100.0) //downConditions = percentDown upValue = (close / close[1]) - 1 downValue = 1 - (close / close[1]) allConditions = if(upOrDown) upValue >= (percentInput/100.0) else downValue >= (percentInput/100.0) //Plots bgcolor(allConditions ? (upOrDown ? green : red) : na, transp=70) bgcolor(allConditions ? silver : na, transp=70, offset=1) bgcolor(allConditions ? silver : na, transp=70, offset=2) bgcolor(allConditions ? silver : na, transp=70, offset=3) bgcolor(allConditions ? silver : na, transp=70, offset=4) //bgcolor(downConditions == 1 ? red : na, transp=70) //bgcolor(downConditions == 1 ? silver : na, transp=70, offset=1) //bgcolor(downConditions == 1 ? silver : na, transp=70, offset=2) //bgcolor(downConditions == 1 ? silver : na, transp=70, offset=3) //bgcolor(downConditions == 1 ? silver : na, transp=70, offset=4) //Entires if(longOrShort) strategy.entry(id = "Long", long = true, when = allConditions) else strategy.entry(id = "Short", long = false, when = allConditions) //Exits if (barssince(allConditions) == closePositionDays) if(longOrShort) strategy.close("Long") else strategy.close("Short")