You are a professional PineScript version=5 developer.
You know how to code indicators and strategies and you also know their differences in code.
I need your help to turn a TradingView indicator into a strategy please.

Respect these instructions:
- Convert all Indicator specific code to Strategy specific code. Don't use any code that a TradingView Strategy won't support. Especially timeframes and gaps. Define those in code so they are semantically the same as before.

- Preserve the timeframe logic if there is one. Fill gaps.

- If the indicator is plotting something, the strategy code shall plot the same thing as well so the visuals are preserved.

- Don't trigger a short. Simply go Long and Flat.

- Always use 5% of capital.

- Set commission to 0.1%.

- Set slippage to 3.

- strategy.commission.percent and strategy.slippage don't exist in PineScript. Please avoid this mistake. Set those variables in the strategy() function when initiating the strategy.

- When initiating the strategy() function, don't use line breaks as this will cause a compiler error.

- Leave all other strategy settings to default values (aka. don't set them at all).

- Add Start Date and End Date inputs/filters so the user can choose from when to when to execute trades. Start with 1st January 2020 and go to 31st December 2050.

- When setting the title of the strategy, add "Demo GPT - " at the start of the name and then continue with the name of the strategy.


This is the code of the Indicator you shall migrate to a TradingView Strategy:




//@version=5
strategy('Daily Fibs Levels with Orders', 'Daily Fibs Levels with Orders', overlay=true)

// Inputs
firstLength = input(50, title='ADR Calculation Period (Days)')
i_timeframe = input.timeframe(title='Custom Timeframe', defval='D')
calcType = input.string("Basic", title = "Fibs Calculation", options=["Basic", "Standard Deviation", "Variance"])
showFib5 = input.bool(true, title='Fib Level 5 (0.786)', group='Fibonacci Levels')
fibLevel5 = input.float(0.786, title='Fib Level 5', group='Fibonacci Levels')
fib5Color = input.color(#FFFFFF, title='Fib Level 5 Color', group='Fibonacci Levels')
showFib6 = input.bool(true, title='Fib Level 6 (1.0)', group='Fibonacci Levels')
fibLevel6 = input.float(1.0, title='Fib Level 6', group='Fibonacci Levels')
fib6Color = input.color(#FFFFFF, title='Fib Level 6 Color', group='Fibonacci Levels')
openColor = input.color(#ffffff, title='Open Plot Color')

// Functions to get high, low, open
dayOpen = request.security(syminfo.tickerid, i_timeframe, open, barmerge.gaps_off, barmerge.lookahead_on)
dayHigh = request.security(syminfo.tickerid, i_timeframe, high)
dayLow = request.security(syminfo.tickerid, i_timeframe, low)

dayRange = dayHigh - dayLow
avgRange = ta.sma(dayRange, firstLength)

// Fib level calculations
fibRange5 = avgRange * fibLevel5 / 2
fibRange6 = avgRange * fibLevel6 / 2

fib5Level = dayOpen + fibRange5
fib6Level = dayOpen + fibRange6

// Plotting Fib Levels
plot(showFib5 ? fib5Level : na, color=fib5Color, title='Fib Level 5 (0.786)')
plot(showFib6 ? fib6Level : na, color=fib6Color, title='Fib Level 6 (1.0)')
plot(dayOpen, color=openColor, title="Daily Open")

// Trend detection (simple moving averages as an example for uptrend/downtrend)
shortSMA = ta.sma(close, 20)
longSMA = ta.sma(close, 50)

isUptrend = shortSMA > longSMA
isDowntrend = shortSMA < longSMA

// Buy condition: Price goes below Fib 5 on an uptrend
buyCondition = (isUptrend and close < fib5Level)

// Sell condition: Price goes above Fib 5 on a downtrend
sellCondition = (isDowntrend and close > fib5Level)

// Stop Loss and Take Profit
stopLossBuy = fib6Level  // Below Fib 6 for Buy
stopLossSell = fib6Level  // Above Fib 6 for Sell
takeProfit = dayOpen  // Daily Open line for both Buy and Sell

// Execute Buy
if (buyCondition)
    strategy.entry("Buy", strategy.long)
    strategy.exit("Take Profit/Stop Loss", from_entry="Buy", stop=stopLossBuy, limit=takeProfit)

// Execute Sell
if (sellCondition)
    strategy.entry("Sell", strategy.short)
    strategy.exit("Take Profit/Stop Loss", from_entry="Sell", stop=stopLossSell, limit=takeProfit)