この戦略は,ROCとSMAの差の和を計算して取引信号を生成する.これは短期取引戦略に属します.
ストラテジーはまず,長さ l と ROC の SMA を計算します.その後,閉値と SMA の間の差 k を計算します.次に,s 日間の k を合計して sum を得ます. sum > 0 では,long になります. sum < 0 では,short になります.
具体的には,コードで:
計算すると,aになります.
縦軸は,右側から右側へと移動します.
閉じる価格とSMAの差を計算する: k =閉じる - a.
合計します. 合計します.
合計>0の場合,ロングポジション;合計<0の場合,ショートポジション.
sum <0 が long で sum>0 が short で終了する.
鍵は,差 k をまとめ,取引シグナルのために sum の記号を使用することです. 最近の日 k > 0 のとき,価格は上昇しているので,ロングに行く. k < 0 のとき,価格は減少しているので,ショートに行く.
この簡単な短期取引戦略には以下の利点があります
使用する指標は単純で分かりやすい.
指標の違いによってフィルタリングすることで より正確な取引機会を見つけることができます
この違いをまとめることで 短期的な傾向を よりよく把握できます
パラメータ l と s は異なるサイクルに調整できます.
論理は明確で 変更や最適化も簡単です
頻繁に短期取引を行うため,資本利用効率が高くなります.
リスクもあります:
短期取引ではリスクが高く,損失が起こり得る.
不適切なパラメータは,過剰な取引や機会を逃してしまう可能性があります.
トレンド逆転に適応するのは難しい ストップロスは大きな損失につながります
パラメータの頻繁な調整は,トレーダーの経験に大きく依存します.
取引頻度が高い場合,取引コストとスライドが増加する可能性があります.
解決策:
パラメータを適切に調整して 取引頻度を下げる
トレンドインジケーターを追加して逆転を特定します
ストップロスを最適化して単一の取引損失を制御する.
経験への依存を減らすために自動パラメータ最適化を追加します.
取引コストを下げるためにオーダー実行モデルを最適化
この戦略は,次の側面においてさらに最適化することができる.
遺伝アルゴリズムのようなパラメータ計算方法を最適化して パラメータを適応できるようにします
信号の質を向上させるため,より多くのインジケーターとフィルターを追加します.
ストップ・ロスの戦略を改善します 例えばストップ・ロスの後を追うようなものです
リスクポイント制御のようなマネーマネジメント戦略を最適化します
トレンドフォロー,スリップ制御などでオーダー実行モデルを最適化
バックテストと自動最適化モジュールを追加します
信号品質の定量評価を加える
これらの最適化によって この戦略は より包括的で 賢明で 安定し 制御可能な短期取引システムになります
概要すると,この戦略は,明確な論理と簡単な実装で,指標から単純な信号を生成します.パラメータ,ストップ損失,マネーマネジメントなど,さらなる最適化により,価値のある定量的な取引戦略になり得ます.しかし,戦略は完璧ではありません.トレーダーは依然として個人リスクの好みに基づいて合理的に適用する必要があります.
/*backtest start: 2023-10-06 00:00:00 end: 2023-11-05 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Indicator Integrator Strat",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,currency="USD",initial_capital=662, overlay=false) l = input(defval=170,title="Length for indicator") s = input(title="Length of summation",defval=18) a= sma(close,l) r=roc(close,l) k=close-a sum = 0 for i = 0 to s sum := sum + k[i] //plot(a,color=yellow,linewidth=2,transp=0) //bc = iff( sum > 0, white, teal) //plot(sum,color=bc, transp=20, linewidth=3,style=columns) //plot(sma(sum,3),color=white) //hline(0) inpTakeProfit = input(defval = 0, title = "Take Profit", minval = 0) inpStopLoss = input(defval = 0, title = "Stop Loss", minval = 0) inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0) inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0) useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na ////buyEntry = crossover(source, lower) ////sellEntry = crossunder(source, upper) if sum>0 strategy.entry("Long", strategy.long, oca_name="Long", comment="Long") else strategy.cancel(id="Long") if sum<0 strategy.entry("Short", strategy.short, oca_name="Short", comment="Short") else strategy.cancel(id="Short") strategy.initial_capital = 50000 plot(strategy.equity-strategy.initial_capital-strategy.closedtrades*.25/2, title="equity", color=red, linewidth=2) hline(0) //longCondition = sum>0 //exitlong = sum<0 //shortCondition = sum<0 //exitshort = sum>0 //strategy.entry(id = "Long", long=true, when = longCondition) //strategy.close(id = "Long", when = exitlong) //strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitlong) //strategy.entry(id = "Short", long=false, when = shortCondition) //strategy.close(id = "Short", when = exitshort) //strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitshort)