
Die Strategie basiert auf dem Preiskanal-Indikator und setzt die Dynamikparameter, die durch die Berechnung der Mittelwerte der Höchst- und Tiefstpreise der verschiedenen Perioden eine Preiskanal-Mittellinie bilden, um als Basis zu dienen, um eine lange und eine kurze Linie zu setzen. Wenn der Preis die lange Linie durchbricht, machen Sie mehr; Wenn der Preis die kurze Linie durchbricht, machen Sie nichts.
Die Strategie berechnet die Mittelwerte der Höchst- und Tiefstpreise in verschiedenen Perioden anhand des Preiskanal-Indikators und bildet die Mittellinie der Preiskanal. Die mittellinie wird als Basis verwendet, wobei die Lang- und die Kurzlinie durch die Shift-Parameter festgelegt werden. Insbesondere lautet die Formel für die Long-Linie: Mittellinie + (((Mittellinie × Lang-Linie-Parameter%); die Formel für die Kurzlinie lautet: Mittellinie + (((Mittellinie × Kurzlinie-Parameter%).
Bei Preisen unterhalb der langen Linie wird mit einer Limit-Single-Kopplung gekauft; bei Preisen über der kurzen Linie wird mit einer Limit-Single-Kopplung gekauft. Die Stop-Loss-Methode für eine Multi-Call-Kopplung ist die Rückkehr zur mittleren Linie des Kurses.
Diese Strategie hat folgende Vorteile:
Die Strategie birgt auch einige Risiken:
Diese Risiken können durch Optimierung von Parametern, durch die Einrichtung von Stop-Loss-Aufträgen oder in Kombination mit anderen Indikatoren verringert werden.
Diese Strategie kann in folgenden Bereichen optimiert werden:
Diese Strategie basiert auf einer klaren Designkonzeption der Preiskanalindikatoren. Durch die Verwendung eines Durchbruchs kann das Risiko effektiv kontrolliert werden. Es gibt jedoch auch einen großen Raum für die Optimierung der Parameter und Probleme, die durch das Stop-Loss-Mechanismus verbessert werden müssen.
/*backtest
start: 2022-11-29 00:00:00
end: 2023-12-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=3
strategy(title = "Noro's PCMA Strategy v1.0", shorttitle = "PCMA 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, title = "Length")
shortlevel = input(10.0, title = "Short line (red)")
longlevel = input(-5.0, title = "Long line (lime)")
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")
//Price Channel
h = highest(high, per)
l = lowest(low, per)
c = (h + l) / 2
ll = c + ((c / 100) * longlevel)
sl = c + ((c / 100) * shortlevel)
//Lines
shortcolor = needshort ? red : na
longcolor = needlong ? lime : na
plot(sl, linewidth = 2, color = shortcolor, title = "Short line")
plot(c, linewidth = 2, color = blue, title = "SMA line")
plot(ll, linewidth = 2, color = longcolor, title = "Long line")
//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if (not na(close[per])) and size == 0 and needlong
strategy.entry("L", strategy.long, lot, limit = ll, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[per])) and size == 0 and needshort
strategy.entry("S", strategy.short, lot, limit = sl, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[per])) and size > 0
strategy.entry("Close", strategy.short, 0, limit = c, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[per])) and size < 0
strategy.entry("Close", strategy.long, 0, limit = c, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()