Untitled
user_5432013
plain_text
9 months ago
20 kB
19
Indexable
//@version=6
strategy("E&M Best Deep&Trend Strategy", overlay=true, pyramiding=10,default_qty_type=strategy.fixed)
// === Inputs === //
DipCapital = input.int(10, "Deep Capital (Lot)", minval=1, maxval=100000, group="Deep Settings")
maxSteps = input.int(10, "Maximum Steps for Buy", minval=1, maxval=10, group="Deep Settings")
Deep_TP = input.int(5, "Avarage Cost Take Profit %", minval=0, maxval=10, group="Deep Settings")/100
lookback = input.int(50, title="Lookback Period (bars)", minval=1,group="Deep Settings")
dropPercent = input.float(5, title="Minimum Drop (%)", minval=0,group="Deep Settings")
show_label = input.bool(true, "Show Label/Table", group="Deep Settings")
useDipStrategy = input.bool(true, "Use Deep Strategy", group="Deep Settings")
// Stochastic ayarları
kLength = 14
kSmoothing = 3
dSmoothing = 3
// Günlük veriden stochastic hesapla
getStochSlow(_srcHigh, _srcLow, _srcClose) =>
fastK = ta.stoch(_srcClose, _srcHigh, _srcLow, kLength)
slowK = ta.sma(fastK, kSmoothing)
slowD = ta.sma(slowK, dSmoothing)
[slowK, slowD]
// Günlük periyottan verileri çek
[slowK_daily, slowD_daily] = request.security(syminfo.tickerid, "D", getStochSlow(high, low, close))
daily_close = request.security(syminfo.tickerid, "D", close)
daily_bb_basis = ta.sma(daily_close, 20)
daily_bb_std = ta.stdev(daily_close, 20)
daily_bb_upper = daily_bb_basis + daily_bb_std * 1.3
daily_bb_lower = daily_bb_basis - daily_bb_std * 1.3
highestPrice = ta.highest(high, lookback)
lowestPrice = ta.lowest(low, lookback)
percentDrop = (highestPrice - lowestPrice) / highestPrice * 100
// Drop percentages per step (after the initial entry)
step2_drop = input.float(1, "Step 2 Drop %", minval=0.1, group="Deep Trade Settings")
step3_drop = input.float(2, "Step 3 Drop %", minval=0.1, group="Deep Trade Settings")
step4_drop = input.float(3, "Step 4 Drop %", minval=0.1, group="Deep Trade Settings")
step5_drop = input.float(4, "Step 5 Drop %", minval=0.1, group="Deep Trade Settings")
step6_drop = input.float(5, "Step 6 Drop %", minval=0.1, group="Deep Trade Settings")
step7_drop = input.float(6, "Step 7 Drop %", minval=0.1, group="Deep Trade Settings")
step8_drop = input.float(7, "Step 8 Drop %", minval=0.1, group="Deep Trade Settings")
step9_drop = input.float(8, "Step 9 Drop %", minval=0.1, group="Deep Trade Settings")
step10_drop = input.float(9, "Step 10 Drop %", minval=0.1, group="Deep Trade Settings")
// Allocation percentage for each step
step1_percent = input.float(100, "Step 1 - %", minval=0, maxval=100, group="Deep Trade Settings")
step2_percent = input.float(100, "Step 2 - %", minval=0, maxval=100, group="Deep Trade Settings")
step3_percent = input.float(100, "Step 3 - %", minval=0, maxval=100, group="Deep Trade Settings")
step4_percent = input.float(100, "Step 4 - %", minval=0, maxval=100, group="Deep Trade Settings")
step5_percent = input.float(100, "Step 5 - %", minval=0, maxval=100, group="Deep Trade Settings")
step6_percent = input.float(100, "Step 6 - %", minval=0, maxval=100, group="Deep Trade Settings")
step7_percent = input.float(100, "Step 7 - %", minval=0, maxval=100, group="Deep Trade Settings")
step8_percent = input.float(100, "Step 8 - %", minval=0, maxval=100, group="Deep Trade Settings")
step9_percent = input.float(100, "Step 9 - %", minval=0, maxval=100, group="Deep Trade Settings")
step10_percent = input.float(100, "Step 10 - %", minval=0, maxval=100, group="Deep Trade Settings")
rsi = request.security(syminfo.tickerid, "D", ta.rsi(close,14))
// === Trend Hesaplamaları === //
TrendCapital = input.float(10, "Trend Capital (Lot)", minval=1, maxval=100000,group="Trend Settings")
numberOfSteps = input.int(10, title="Maximum Steps for TP", minval=0, maxval=10, group="Trend Settings")
atrPeriod = input.int(24, "Trend Period",group="Trend Settings")
factor = input.float(16, "Trend Factor",group="Trend Settings")
timeframe = input.timeframe("60",title="Timeframe",group="Trend Settings")
useTrendFilter = input.bool(true, "Use Filter",group="Trend Settings")
useTrendStrategy = input.bool(true, "Use Trend Strategy",group="Trend Settings")
//[ST, TD] = ta.supertrend(16,24)
// Günlük verilerle hesapla
[ST,TD] = request.security(syminfo.tickerid,timeframe,ta.supertrend(factor,atrPeriod))
//plot(ST, title="MTF Supertrend", color=TD == 1 ? color.red : color.green, linewidth=2)
Pi_Func(tf,pivot_type)=>
pi_timeframe=timeframe.change(tf)
pivotPointsArray = ta.pivot_point_levels(pivot_type, pi_timeframe)
pp=array.get(pivotPointsArray,0)
pr1=array.get(pivotPointsArray,1)
ps1=array.get(pivotPointsArray,2)
pr2=array.get(pivotPointsArray,3)
ps2=array.get(pivotPointsArray,4)
pr3=array.get(pivotPointsArray,5)
ps3=array.get(pivotPointsArray,6)
[pp,pr1,pr2,pr3,ps1,ps2,ps3]
[pp, pr1, pr2, pr3, ps1, ps2, ps3] = Pi_Func("1D", "Traditional")
piv_buy=close>pr1 or ta.crossover(close,pr1)
piv_sell=close<ps1 or ta.crossunder(close,ps1)
stopLossPercentage = input.float(0, title="Stop Loss %", minval=0.0,group="Trend Trade Settings")
trailStopDistance = input.float(0, title="Trailing Stop (%)", minval=0.0, group="Trend Trade Settings")*0.01
takeProfitPercent1 = input.float(5, title="Take Profit % Step 1", group="Trend Trade Settings")
takeProfitPercent2 = input.float(10, title="Take Profit % Step 2", group="Trend Trade Settings")
takeProfitPercent3 = input.float(15, title="Take Profit % Step 3", group="Trend Trade Settings")
takeProfitPercent4 = input.float(20, title="Take Profit % Step 4", group="Trend Trade Settings")
takeProfitPercent5 = input.float(25, title="Take Profit % Step 5", group="Trend Trade Settings")
takeProfitPercent6 = input.float(30, title="Take Profit % Step 6", group="Trend Trade Settings")
takeProfitPercent7 = input.float(35, title="Take Profit % Step 7", group="Trend Trade Settings")
takeProfitPercent8 = input.float(40, title="Take Profit % Step 8", group="Trend Trade Settings")
takeProfitPercent9 = input.float(45, title="Take Profit % Step 9", group="Trend Trade Settings")
takeProfitPercent10 = input.float(50, title="Take Profit % Step 10", group="Trend Trade Settings")
takeProfitAmount1 = input.float(10, title="Take Profit Amount % Step 1", group="Trend Trade Settings")
takeProfitAmount2 = input.float(10, title="Take Profit Amount % Step 2", group="Trend Trade Settings")
takeProfitAmount3 = input.float(10, title="Take Profit Amount % Step 3", group="Trend Trade Settings")
takeProfitAmount4 = input.float(10, title="Take Profit Amount % Step 4", group="Trend Trade Settings")
takeProfitAmount5 = input.float(10, title="Take Profit Amount % Step 5", group="Trend Trade Settings")
takeProfitAmount6 = input.float(10, title="Take Profit Amount % Step 6", group="Trend Trade Settings")
takeProfitAmount7 = input.float(10, title="Take Profit Amount % Step 7", group="Trend Trade Settings")
takeProfitAmount8 = input.float(10, title="Take Profit Amount % Step 8", group="Trend Trade Settings")
takeProfitAmount9 = input.float(5, title="Take Profit Amount % Step 9", group="Trend Trade Settings")
takeProfitAmount10 = input.float(5, title="Take Profit Amount % Step 10", group="Trend Trade Settings")
Buy_Condition = (useTrendFilter==true?(daily_close>ST and piv_buy):daily_close>ST) and useTrendStrategy
Sell_Condition = (useTrendFilter==true?(daily_close<ST and piv_sell):daily_close<ST) and useTrendStrategy
FromDay = input.int(defval = 1, title = "From Day", minval = 1, maxval = 31,group="BACKTEST")
FromMonth = input.int(defval = 1, title = "From Month", minval = 1, maxval = 12,group="BACKTEST")
FromYear = input.int(defval = 2015, title = "From Year", minval = 2000,group="BACKTEST")
ToDay = input.int(defval = 1, title = "To Day", minval = 1, maxval = 31,group="BACKTEST")
ToMonth = input.int(defval = 1, title = "To Month", minval = 1, maxval = 12,group="BACKTEST")
ToYear = input.int(defval = 9999, title = "To Year", minval = 2006,group="BACKTEST")
Start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
Finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
Timerange() =>
time >= Start and time <= Finish ? true : false
// Deep
dip_buy = (slowD_daily<30 and daily_close<daily_bb_lower) and rsi<50 and useDipStrategy and (dropPercent>0?percentDrop >= dropPercent:true)
dip_sell = (ta.crossunder(slowD_daily,80) and daily_close>daily_bb_upper) and rsi>50 and useDipStrategy
// Alttaki satır alarm mesaj kutusuna {{strategy.order.alert_message}} bu değişkeni otomatik atar.
//@strategy_alert_message {{strategy.order.alert_message}}
// Aracı Kurum
var string ak = "Aracı Kurum Ayarları"
var strateji = input.string("", "Strateji Adı", group = ak)
var kurum = input.string("Osmanlı Yatırım", "Aracı Kurum", options = ["Osmanlı Yatırım", "Phillip Capital"], group = ak, display = display.none)
var api = input.string("", "API Key", group = ak, display = display.none, active = kurum == "Osmanlı Yatırım")
var token = input.text_area("", "Token", group = ak, display = display.none, active = kurum == "Osmanlı Yatırım")
var input_date = input.time(timestamp("25 March 2025 00:00"),
title="API Key SKT",
tooltip = "API Anahtarınızın son kullanma tarihini girin. (Opsiyonel)\nAPI anahtarınız için son kullanma tarihinin takibini kolaylaştırır.",
group = ak,
display = display.none)
// JSON mesajını oluşturma fonksiyonu
botMsg(quantity) =>
var string json_string = ""
if kurum == "Osmanlı Yatırım"
json_string := '{"name": "'+ strateji +'",' +
'"symbol": "{{ticker}}",' +
'"orderSide": "{{strategy.order.action}}",' +
'"orderType": "mktbest",' +
'"price": "{{close}}",' +
'"quantity": "'+ str.tostring(quantity) +'",' +
'"timeInForce": "day",' +
'"apiKey": "'+ api +'",' +
'"timenow": "{{timenow}}",' +
'"token": "'+ token +'"}'
else
json_string := '{"buyOrCell": "{{strategy.order.action}}",' +
'"orderType": "PKP",' +
'"seance": "GUN",' +
'"symbol": "{{ticker}}",' +
'"quantity": "'+ str.tostring(quantity) +'",' +
'"price": "{{close}}"}'
json_string
// === Strategy Variables === //
var bool dipActive = false
var int buyStep = 0
var float buyPrice = na
var float totalCost = 0
var float totalQty = 0
var float stepQty = 0
// === Initial Entry === //
if dip_buy and not dipActive and buyStep==0 and Timerange()
dipActive := true
buyStep := 1
buyPrice := close
stepPercent = step1_percent
stepQty := DipCapital * stepPercent / 100
totalCost := stepQty * close
totalQty := stepQty
strategy.entry("Deep-1", strategy.long, qty=stepQty, alert_message = botMsg(stepQty))
// === Laddered Entries === //
nextDrop = buyStep == 1 ? step2_drop :
buyStep == 2 ? step3_drop :
buyStep == 3 ? step4_drop :
buyStep == 4 ? step5_drop :
buyStep == 5 ? step6_drop :
buyStep == 6 ? step7_drop :
buyStep == 7 ? step8_drop :
buyStep == 8 ? step9_drop :
buyStep == 9 ? step10_drop : 10000
if dipActive and buyStep < maxSteps and close < buyPrice * (1 - nextDrop / 100) and Timerange()
buyStep += 1
buyPrice := close
stepPercent = buyStep == 1 ? step1_percent :
buyStep == 2 ? step2_percent :
buyStep == 3 ? step3_percent :
buyStep == 4 ? step4_percent :
buyStep == 5 ? step5_percent :
buyStep == 6 ? step6_percent :
buyStep == 7 ? step7_percent :
buyStep == 8 ? step8_percent :
buyStep == 9 ? step9_percent :
buyStep == 10 ? step10_percent : 0
stepQty := DipCapital * stepPercent / 100
totalCost += stepQty * close
totalQty += stepQty
strategy.entry("Deep-" + str.tostring(buyStep), strategy.long, qty=stepQty, alert_message = botMsg(stepQty))
avgCost = totalQty != 0 ? totalCost / totalQty : 0
//sell=Deep_TP>0? (dip_sell or close>avgCost*(1 + Deep_TP)): dip_sell
sell = Deep_TP > 0 ? ((dip_sell and close > avgCost) or (close > avgCost * (1 + Deep_TP))) : (dip_sell and close > avgCost)
// === SELL Condition (if price closes below BB upper band) === //
if dipActive and sell and Timerange()
for step = 1 to buyStep
strategy.close("Deep-" + str.tostring(step), alert_message = botMsg(stepQty))
dipActive := false
buyStep := 0
buyPrice := na
totalCost := 0
totalQty := 0
// === Real-Time Metrics === //
current_price = close
required_total_amount=DipCapital*current_price
unrealizedPnL = totalQty != 0 ? (close - avgCost) * totalQty : 0
unrealizedPnLPercent = totalQty != 0 and avgCost != 0 ? (close - avgCost) / avgCost * 100 : 0
labelColor = buyStep == 0 ? color.orange : unrealizedPnL >= 0 ? color.green : color.red
labelText = "Deep Strategy Report" + "\n===================" + "\nTotal Steps: " + str.tostring(buyStep) + "\nCurren Lot: " + str.tostring(totalQty, "#.##") + "\nCurrent Price: " + str.tostring(current_price, "##.###") + "\nAverage Cost: " + str.tostring(avgCost, "#.##") + "\nUnrealized PnL: " + str.tostring(unrealizedPnL, "#.##") + "\nPnL %: " + str.tostring(unrealizedPnLPercent, "#.##") + "%"
lbl = show_label? label.new(bar_index, low - low * 0.2, labelText, xloc.bar_index, yloc.price, color=labelColor, style=label.style_label_up, textcolor=color.white, size=size.normal):na
label.delete(lbl[1])
// Trend
var float amount = TrendCapital
var float chg_long = 0
var float chg_short = 0
var float ep = 0
var float tp1 = 0
var float tp2 = 0
var float tp3 = 0
var float tp4 = 0
var float tp5 = 0
var float tp6 = 0
var float tp7 = 0
var float tp8 = 0
var float tp9 = 0
var float tp10 = 0
var float qty = 0
var color clr = color.gray
var bool isTrendOpen = false
if (Buy_Condition and not isTrendOpen and Timerange())
ep := close
chg_long := amount
clr := color.green
isTrendOpen := true
strategy.entry("Trend Entry", strategy.long, qty=chg_long, alert_message = botMsg(chg_long))
if (TrendCapital > 0)
tp1 := ep * (1 + takeProfitPercent1 / 100)
tp2 := ep * (1 + takeProfitPercent2 / 100)
tp3 := ep * (1 + takeProfitPercent3 / 100)
tp4 := ep * (1 + takeProfitPercent4 / 100)
tp5 := ep * (1 + takeProfitPercent5 / 100)
tp6 := ep * (1 + takeProfitPercent6 / 100)
tp7 := ep * (1 + takeProfitPercent7 / 100)
tp8 := ep * (1 + takeProfitPercent8 / 100)
tp9 := ep * (1 + takeProfitPercent9 / 100)
tp10 := ep * (1 + takeProfitPercent10 / 100)
if (numberOfSteps >= 1)
strategy.exit("Trend TP 1", from_entry="Trend Entry", qty_percent=takeProfitAmount1, limit=tp1, alert_message = botMsg(takeProfitAmount1))
if (numberOfSteps >= 2)
strategy.exit("Trend TP 2", from_entry="Trend Entry", qty_percent=takeProfitAmount2, limit=tp2, alert_message = botMsg(takeProfitAmount2))
if (numberOfSteps >= 3)
strategy.exit("Trend TP 3", from_entry="Trend Entry", qty_percent=takeProfitAmount3, limit=tp3, alert_message = botMsg(takeProfitAmount3))
if (numberOfSteps >= 4)
strategy.exit("Trend TP 4", from_entry="Trend Entry", qty_percent=takeProfitAmount4, limit=tp4, alert_message = botMsg(takeProfitAmount4))
if (numberOfSteps >= 5)
strategy.exit("Trend TP 5", from_entry="Trend Entry", qty_percent=takeProfitAmount5, limit=tp5, alert_message = botMsg(takeProfitAmount5))
if (numberOfSteps >= 6)
strategy.exit("Trend TP 6", from_entry="Trend Entry", qty_percent=takeProfitAmount6, limit=tp6, alert_message = botMsg(takeProfitAmount6))
if (numberOfSteps >= 7)
strategy.exit("Trend TP 7", from_entry="Trend Entry", qty_percent=takeProfitAmount7, limit=tp7, alert_message = botMsg(takeProfitAmount7))
if (numberOfSteps >= 8)
strategy.exit("Trend TP 8", from_entry="Trend Entry", qty_percent=takeProfitAmount8, limit=tp8, alert_message = botMsg(takeProfitAmount8))
if (numberOfSteps >= 9)
strategy.exit("Trend TP 9", from_entry="Trend Entry", qty_percent=takeProfitAmount9, limit=tp9, alert_message = botMsg(takeProfitAmount9))
if (numberOfSteps >= 10)
strategy.exit("Trend TP 10", from_entry="Trend Entry", qty_percent=takeProfitAmount10, limit=tp10, alert_message = botMsg(takeProfitAmount10))
if (Sell_Condition and isTrendOpen and Timerange())
clr := color.red
isTrendOpen := false
strategy.close("Trend Entry", "Trend Exit", qty=chg_long, alert_message = botMsg(chg_long))
// Stop loss emirleri ------------------------
stopLevelLong = stopLossPercentage>0? ep * (1 - stopLossPercentage / 100):0
stopLevelBuy=ta.crossunder(close, stopLevelLong)
if stopLevelBuy and isTrendOpen and Timerange()
strategy.close("Trend Entry", "Stop Loss", alert_message = botMsg(chg_long))
var float longTraillingStopPrice = 0.0
longTraillingStopPrice := if trailStopDistance>0
stopValue = close * (1 - trailStopDistance)
math.max(stopValue, longTraillingStopPrice[1])
else
0
if ta.crossunder(close,longTraillingStopPrice) and isTrendOpen and Timerange()
strategy.close("Trend Entry", "Trailing Stop", alert_message = botMsg(chg_long))
var tablePerformance = table.new(position=position.bottom_center, columns = 10, rows = 10, border_width=2)
totalTrades = strategy.closedtrades
openTrades = strategy.opentrades
closedTrades = totalTrades - openTrades
winTrades=strategy.wintrades
loseTrades = strategy.losstrades
netProfit = strategy.netprofit
percentprofitable = totalTrades == 0 ? na : (winTrades / totalTrades) * 100
profitFactor = strategy.grossprofit / strategy.grossloss
if (bar_index % 5 == 0) and show_label
table.cell(tablePerformance, 1, 0, "TOTAL TRADES",bgcolor=color.black,text_color=color.white)
table.cell(tablePerformance, 1, 1, str.tostring(totalTrades),bgcolor=color.orange,text_color=color.white)
table.cell(tablePerformance, 2, 0, "OPEN TRADES",bgcolor=color.black,text_color=color.white)
table.cell(tablePerformance, 2, 1, str.tostring(openTrades),bgcolor=color.orange,text_color=color.white)
table.cell(tablePerformance, 3, 0, "CLOSED TRADES",bgcolor=color.black,text_color=color.white)
table.cell(tablePerformance, 3, 1, str.tostring(closedTrades),bgcolor=color.orange,text_color=color.white)
table.cell(tablePerformance, 4, 0, "WIN TRADES",bgcolor=color.black,text_color=color.white)
table.cell(tablePerformance, 4, 1, str.tostring(winTrades),bgcolor=color.orange,text_color=color.white)
table.cell(tablePerformance, 5, 0, "LOSS TRADES",bgcolor=color.black,text_color=color.white)
table.cell(tablePerformance, 5, 1, str.tostring(loseTrades),bgcolor=color.orange,text_color=color.white)
table.cell(tablePerformance, 6, 0, "NET PROFIT",bgcolor=color.black,text_color=color.white)
table.cell(tablePerformance, 6, 1, str.tostring(netProfit,format.volume),bgcolor=color.orange,text_color=color.white)
table.cell(tablePerformance, 7, 0, "PROFITABLE %",bgcolor=color.black,text_color=color.white)
table.cell(tablePerformance, 7, 1, str.tostring(percentprofitable,format.percent),bgcolor=color.orange,text_color=color.white)
table.cell(tablePerformance, 8, 0, "PROFIT FACTOR",bgcolor=color.black,text_color=color.white)
table.cell(tablePerformance, 8, 1, str.tostring(profitFactor,"##.##"),bgcolor=color.orange,text_color=color.white)Editor is loading...
Leave a Comment