
Diese Strategie basiert auf der ursprünglichen Binär- und Parallelhandelsstrategie und enthält ein Zeitbegrenzungsmodul, um die Startzeit der Strategie zu kontrollieren. Dieses Modul kann die Laufzeit der Strategie effektiv verwalten und das Risiko für den Handel unter nicht idealen Marktbedingungen reduzieren.
Die Strategie verwendet die schnellen MA und die langsamen MA, um ein Handelssignal zu erstellen. Die Schnellen MA-Parameter sind 14 Tage und die langsamen MA-Parameter sind 21 Tage. Es wird ein Kaufsignal erzeugt, wenn der schnelle MA durch den langsamen MA geht.
Die Strategie enthält auch die Option, den ursprünglichen Handelssignal umzukehren.
Das Modul zeitliche Begrenzung vergleicht die aktuelle Zeit mit der eingestellten Startzeit und gibt die richtigen Werte zurück, um zu kontrollieren, ob die Strategie gestartet wird. Das Modul benötigt das Jahr, den Monat, den Tag, die Stunde und die Sekunde, in denen die Strategie gestartet wird. Die Strategie wird nur gestartet, wenn die aktuelle Zeit über die eingestellte Zeit hinausgeht.
Die Parameter der MA-Zyklen können angemessen optimiert werden, um die Handelsfrequenz zu verringern. Gleichzeitig können die Startzeiten der Module mit einer angemessenen Zeitbegrenzung eingestellt werden, um keine verpassten Chancen zu vermeiden. Schließlich kann es aufgrund der unterschiedlichen Marktbedingungen sorgfältig ausgewählt werden, ob die Richtung des Handelssignals umgekehrt werden muss.
Die Strategie kann durch die Bildung von Handelssignalen mit doppelten MA und die Einbindung von Zeitbegrenzungsmodule, die die Laufzeit der Strategie kontrollieren, Trends effektiv erfassen und Risiken unter nicht-idealisierten Marktbedingungen vermeiden. Die Strategie kann auch durch Optimierung der Parameter-Einstellungen, Stop-Loss-Module und Cross-Scaling-Betrieb weiter verbessert werden, um die Stabilität und Profitabilität jedes Handels zu erhöhen, während die Handelsfrequenz reduziert wird.
/*backtest
start: 2023-11-06 00:00:00
end: 2023-11-13 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "Strategy Code Example", shorttitle = "Strategy Code Example", overlay = true)
// Revision: 1
// Author: @JayRogers
//
// *** THIS IS JUST AN EXAMPLE OF STRATEGY TIME LIMITING ***
//
// This is a follow up to my previous strategy example for risk management, extended to include a time limiting factor.
// === GENERAL INPUTS ===
// short ma
maFastSource = input(defval = open, title = "Fast MA Source")
maFastLength = input(defval = 14, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource = input(defval = open, title = "Slow MA Source")
maSlowLength = input(defval = 21, title = "Slow MA Period", minval = 1)
// === STRATEGY RELATED INPUTS ===
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// Risk management
inpTakeProfit = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
// *** FOCUS OF EXAMPLE ***
// Time limiting
// a toggle for enabling/disabling
useTimeLimit = input(defval = true, title = "Use Start Time Limiter?")
// set up where we want to run from
startYear = input(defval = 2016, title = "Start From Year", minval = 0, step = 1)
startMonth = input(defval = 05, title = "Start From Month", minval = 0,step = 1)
startDay = input(defval = 01, title = "Start From Day", minval = 0,step = 1)
startHour = input(defval = 00, title = "Start From Hour", minval = 0,step = 1)
startMinute = input(defval = 00, title = "Start From Minute", minval = 0,step = 1)
// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na
// *** FOCUS OF EXAMPLE ***
// === TIME LIMITER CHECKING FUNCTION ===
// using a multi line function to return true or false depending on our input selection
// multi line function logic must be indented.
startTimeOk() =>
// get our input time together
inputTime = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute)
// check the current time is greater than the input time and assign true or false
timeOk = time > inputTime ? true : false
// last line is the return value, we want the strategy to execute if..
// ..we are using the limiter, and the time is ok -OR- we are not using the limiter
r = (useTimeLimit and timeOk) or not useTimeLimit
// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)
// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = red, linewidth = 2, style = line, transp = 50)
// === LOGIC ===
// is fast ma above slow ma?
aboveBelow = maFast >= maSlow ? true : false
// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false
// *** FOCUS OF EXAMPLE ***
// wrap our strategy execution in an if statement which calls the time checking function to validate entry
// like the function logic, content to be included in the if statement must be indented.
if( startTimeOk() )
// === STRATEGY - LONG POSITION EXECUTION ===
enterLong = not tradeDirection[1] and tradeDirection
exitLong = tradeDirection[1] and not tradeDirection
strategy.entry( id = "Long", long = true, when = enterLong )
strategy.close( id = "Long", when = exitLong )
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort = tradeDirection[1] and not tradeDirection
exitShort = not tradeDirection[1] and tradeDirection
strategy.entry( id = "Short", long = false, when = enterShort )
strategy.close( id = "Short", when = exitShort )
// === STRATEGY RISK MANAGEMENT EXECUTION ===
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)