
この戦略は,トレンドフォロー取引戦略であり,単純な移動平均を使用して市場のトレンドの方向を判断し,移動平均にトレンドの方向に沿って制限価格を配置し,トレンドフォロー取引を実現する.
単純移動平均SMAを計算し,トレンドの方向を計算する.
フィードバックフィルタを有効にした場合,SMAより高い低点を使用すると上昇傾向と判断し,SMAより低い高点を使用すると下降傾向と判断する. フィードバックフィルタを有効にしない場合,SMAより高い閉盘価格を使用すると上昇傾向と判断し,SMAより低い閉盘価格を使用すると下降傾向と判断する.
トレンドの方向と有効な取引方向のパラメータneedlong,needshortに基づいて,SMA価格に制限価格の注文を配置する.具体的ロジックは次のとおりです.
値上げの傾向にある場合,SMA価格に値上げのリストを置く.
短縮の必要性 (needshortはtrue) があれば,下落傾向にある場合は,SMA価格に短縮制限の注文を配置します.
ストップ・ロジックを設定し,トレンド方向と合わない場合はストップ・ロジックで退出する.
日時範囲のパラメータにより,指定された日付範囲内でのみ取引する.
SMAを使ってトレンドを判断し,市場騒音を効果的にフィルターし,より長い線のトレンドをロックすることができます.
SMAの価格に限られた価格を入れると,トレンドの初期段階に良い入場ポイントを得ることができます.
選択して,個人取引スタイルに柔軟に調整できます.
損失拡大を防ぐため,止損退出メカニズムを設定できます.
大事な出来事による激しい波動を回避するために,取引時間帯を設定することをサポートします.
SMAはトレンド判断指標として,遅れの問題があり,トレンド転換点を逃し,損失が発生する可能性があります.
制限価格の単体入場には柔軟性がないため,短期間のトレンド調整により入場できない可能性があります.
SMA周期パラメータを合理的に設定する必要があります.
取引時間パラメータの合理性を考慮し,取引機会やリスクの時間を逃さないようにする必要があります.
他の指標の判断を加え,複数の指標の検証を行い,SMAの遅れを回避することを考えることができます.
価格がSMAを突破したときに市場価格のトラッキングに切り替え,トラッキングの柔軟性を向上させる.
動的にSMA周期パラメータを最適化して,異なる周期の市場環境に自律的に適応させる.
ストップ・ロスは,厳格なSMA位置ではなく,トレンド内の最低価格/最高価格に設定され,ストップ・ロスはより柔軟になります.
アルゴリズムの取引要素を追加し,取引時間をより賢く,柔軟に,重大なリスクの時間を回避します.
この戦略は全体的に比較的単純なトレンド追跡戦略であり,SMAを使用してトレンドの方向を判断し,SMA価格に限価格を配置して取引を追跡するという核心的な考えである.この戦略の柔軟性,適応性,および知性をある程度の最適化によって向上させることができる.この戦略は,理解しやすく実装され,アルゴリズム取引の入門学習に適しているが,実体ではリスクに注意し,フィードバック結果を慎重に評価し,厳格な監視と最適化を行う必要がある.
/*backtest
start: 2022-10-27 00:00:00
end: 2023-03-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2020
//@version=4
strategy(title = "Noro's CrossLimit", shorttitle = "CrossLimit", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0, commission_value = 0.0)
needlong = input(true, "long")
needshort = input(true, "short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
src = input(close, defval = close, title = "MA Source")
len = input(5, defval = 5, minval = 1, title = "SMA length")
off = input(0, defval = 0, minval = 0, title = "SMA offset")
anti = input(true, defval = true, title = "Anti-saw filter")
rev = input(false, defval = false, title = "Reverse")
showma = input(true, defval = true, title = "Show MA")
showbg = input(false, defval = false, title = "Show background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//MA
ma = sma(src, len)[off]
macol = showma ? color.blue : na
plot(ma, color = macol, linewidth = 3, transp = 0)
//Background
trend = 0
trend := anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1]
bgcol = showbg ? trend == 1 ? color.lime : trend == -1 ? color.red : na : na
bgcolor(bgcol, transp = 70)
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = (trend == 1 and rev == false) or (trend == -1 and rev == true)
dn = (trend == -1 and rev == false) or (trend == 1 and rev == true)
//Trading
size = strategy.position_size
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if trend != 0
strategy.entry("Long", strategy.long, lot, limit = ma, when = needlong and truetime and up)
strategy.entry("Short", strategy.short, lot, limit = ma, when = needshort and truetime and dn)
if size > 0 and needshort == false and trend == -1
strategy.exit("Stop Long", "Long", limit = ma)
if size < 0 and needlong == false and trend == 1
strategy.exit("Stop Short", "Short", limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()
strategy.cancel("Long")
strategy.cancel("Short")