Sayfa 304/352 İlkİlk ... 204254294302303304305306314 ... SonSon
Arama sonucu : 2816 madde; 2,425 - 2,432 arası.

Konu: Tradingview

  1. bu arada önemli bir şeyi unuttuk....

    biz son 500 bar içinde en yüksek ve en düşük değeri 100 bölüme ayırıp, tepeden 15 birim aşağısına stop yazdık t ve s diye belirttik....

    ama medyan yazıp, dip ve reverse kaldırmıştık....

    reverse 0.85 birim di.....

    kaldırılan reverse yerine bar body içinde 0.85 kullanıp.... tetikleyici unuttuk eklenmiş hali....

    tetiklenen bar için zemin rengine mavi olur.....

    bknz...
    1 dk örnekler...

    https://www.tradingview.com/x/IHwNejW3/
    https://www.tradingview.com/x/L7Hinyxh/
    https://www.tradingview.com/x/UQ1wM0EA/
    https://www.tradingview.com/x/EkS1OmKw/
    https://www.tradingview.com/x/EoRHDZbB/
    https://www.tradingview.com/x/7m8tRgVk/
    https://www.tradingview.com/x/hF4CY69j/
    16.07.2024 - 10.12.2024

  2. matriks ile tw birbirinden çok farklı....

    tw de yazılanı.... matrikste yazamayacak kadar kod özürlüyüm....

    belli bir yaştan sonra zor oluyor....

    sadece tarama kodunu yapmaya çalışacağım....
    16.07.2024 - 10.12.2024

  3. son 500 barı hesaplar...isteğe göre değiştirebilirsiniz....

    en yüksek ve en düşük değerin ortalamasını alır.....

    1dk, 15dk, 60dk, 240dk ve gün olarak etiket gösterir.... 1dk fuşyadır....

    v6 versiyondur.... yapay zeka ile yapılmıştır....

    denemek isteyene kodu....

    PHP Code:
    //@version=6
    indicator('Timeframes Simple Labels'overlay truemax_labels_count 50)

    len input.int(500'Bars Count'minval 2)

    // X ofsetleri (son barla arada boşluk olacak şekilde)
    offsetX1 input.int(-200'1min X Offset (bars left from last)')
    offsetX15 input.int(-120'15min X Offset')
    offsetX60 input.int(-30'60min X Offset')
    offsetX240 input.int(30'4h X Offset')
    offsetXD input.int(12'1D X Offset')

    offsetYStep input.float(0.0'Y Step for Ladder'step 0.1)

    getMid(tf) =>
        
    request.security(syminfo.tickeridtfta.highest(highlen), lookahead barmerge.lookahead_on)
        
    request.security(syminfo.tickeridtfta.lowest(lowlen), lookahead barmerge.lookahead_on)
        (
    l) / 2

    mid1 
    getMid('1')
    mid15 getMid('15')
    mid60 getMid('60')
    mid240 getMid('240')
    midD getMid('D')

    // X pozisyonu (son barın solunda ve arada boşluk)
    x_pos1 bar_index offsetX1
    x_pos15 
    bar_index offsetX15
    x_pos60 
    bar_index offsetX60
    x_pos240 
    bar_index offsetX240
    x_posD 
    bar_index offsetXD

    var label lbl1 na
    var label lbl15 na
    var label lbl60 na
    var label lbl240 na
    var label lblD na

    delLabel
    (l) =>
        if 
    not na(l)
            
    label.delete(l)

    // Etiketleri oluştur / güncelle (merdiven görünümü ve yatay boşluk)
    delLabel(lbl1)
    lbl1 := label.new(x_pos1mid1'1min: ' str.tostring(mid1format.mintick), xloc xloc.bar_indexyloc yloc.pricestyle label.style_label_leftcolor color.new(color.fuchsia0), textcolor color.whitesize size.small)

    delLabel(lbl15)
    lbl15 := label.new(x_pos15mid15 offsetYStep 1'15min: ' str.tostring(mid15format.mintick), xloc xloc.bar_indexyloc yloc.pricestyle label.style_label_leftcolor color.new(color.gray0.2), textcolor color.whitesize size.small)

    delLabel(lbl60)
    lbl60 := label.new(x_pos60mid60 offsetYStep 2'60min: ' str.tostring(mid60format.mintick), xloc xloc.bar_indexyloc yloc.pricestyle label.style_label_leftcolor color.new(color.gray0.4), textcolor color.whitesize size.small)

    delLabel(lbl240)
    lbl240 := label.new(x_pos240mid240 offsetYStep 3'4h: ' str.tostring(mid240format.mintick), xloc xloc.bar_indexyloc yloc.pricestyle label.style_label_leftcolor color.new(color.gray0.6), textcolor color.whitesize size.small)

    delLabel(lblD)
    lblD := label.new(x_posDmidD offsetYStep 4'1D: ' str.tostring(midDformat.mintick), xloc xloc.bar_indexyloc yloc.pricestyle label.style_label_leftcolor color.new(color.gray0.8), textcolor color.whitesize size.small
    örnek görüntüler.....
    https://www.tradingview.com/x/j78DWifi/
    https://www.tradingview.com/x/Lq1PsqwO/
    https://www.tradingview.com/x/ZSqSF4xd/
    https://www.tradingview.com/x/ENFnUkM5/
    https://www.tradingview.com/x/IZpQcLga/
    16.07.2024 - 10.12.2024

  4. PHP Code:
    //@version=6
    indicator("."overlay=true,max_lines_count 10)
     
    // Настройки
    predictionPeriod input.int(50minval=1title="Prediction Period")
    confidenceThreshold input.float(0.7minval=0maxval=100step=0.1title="Confidence Threshold (%)")
    show_additional_labels input.bool(truetitle="Additional labels")
     
    // Функция для поиска локальных экстремумов
    f_findLocalExtremes(srcperiod) =>
        
    float highestPoint na
        float lowestPoint 
    na
        int highestBarIndex 
    na
        int lowestBarIndex 
    na
     
        float avgTrueRange 
    ta.atr(14)
     
        for 
    0 to period
            float currentHigh 
    high[i]
            
    float currentLow low[i]
     
            
    bool isLocalHigh currentHigh highestPoint or na(highestPoint)
            
    bool isLocalLow currentLow lowestPoint or na(lowestPoint)
     
            if (
    isLocalHigh)
                
    highestPoint := currentHigh
                highestBarIndex 
    := bar_index[i]
     
            if (
    isLocalLow)
                
    lowestPoint := currentLow
                lowestBarIndex 
    := bar_index[i]
     
        [
    highestPointlowestPointhighestBarIndexlowestBarIndex]
     
    // Функция прогнозирования
    f_predictNextMove(highestPointlowestPoint) =>
        
    float midPointUp lowestPoint + (highestPoint lowestPoint) * 0.618
        float midPointDown 
    highestPoint - (highestPoint lowestPoint) * 0.618
     
        float bullishTarget 
    midPointUp * (confidenceThreshold 100)
        
    float bearishTarget midPointDown * (confidenceThreshold 100)
     
        [
    bullishTargetbearishTarget]
     
    // Основной алгоритм
    [highestPointlowestPointhighestBarIndexlowestBarIndex] = f_findLocalExtremes(closepredictionPeriod)
    [
    bullishTargetbearishTarget] = f_predictNextMove(highestPointlowestPoint)
     
    // Визуализация
    // Верхняя и нижняя точки
    //plot(highestPoint, "Highest Point", color=color.red, linewidth=2, style=plot.style_circles)
    //plot(lowestPoint, "Lowest Point", color=color.green, linewidth=2, style=plot.style_circles)
     
    // Цели
    //plot(bullishTarget, "Bullish Target", color=color.blue, linewidth=2, style=plot.style_line)
    //plot(bearishTarget, "Bearish Target", color=color.purple, linewidth=2, style=plot.style_line)
     
    // Условия для сигналов
    longCondition close bullishTarget and highestPoint lowestPoint
    shortCondition 
    close bearishTarget and highestPoint lowestPoint
     
    // Сигналы на графике
    //plotshape(longCondition, title="Buy Signal", location=location.belowbar, color=longCondition ? color.green : na, style=shape.arrowup, size=size.tiny, text="Buy")
     
    //plotshape(shortCondition, title="Sell Signal", location=location.abovebar, color=shortCondition ? color.red : na, style=shape.arrowdown, size=size.tiny, text="Sell")
     
    // Дополнительные метки
    if show_additional_labels
     
        
    var label lowLabel na
        
    var label highLabel na
        
    var label bullishLabel na
        
    var label bearishLabel na
     
        
    if barstate.islast
            
    // Удаление предыдущих меток, если они существуют
            
    if not na(lowLabel)
                
    label.delete(lowLabel)
            if 
    not na(highLabel)
                
    label.delete(highLabel)
            if 
    not na(bullishLabel)
                
    label.delete(bullishLabel)
            if 
    not na(bearishLabel)
                
    label.delete(bearishLabel)
     
            
    // Создание новых меток на последнем баре
            
    lowLabel := label.new(lowestBarIndexlowestPointtext="L: " str.tostring(lowestPointformat.mintick), color=color.greenstyle=label.style_label_upsize=size.small)
     
            
    highLabel := label.new(highestBarIndexhighestPointtext="H: " str.tostring(highestPointformat.mintick), color=color.redstyle=label.style_label_downsize=size.small)
     
            
    bullishLabel := label.new(bar_index 1bullishTargettext="Boğa: " str.tostring(bullishTargetformat.mintick), color=color.bluestyle=label.style_label_leftsize=size.small)
     
            
    bearishLabel := label.new(bar_index 1bearishTargettext="Ayı: " str.tostring(bearishTargetformat.mintick), color=color.purplestyle=label.style_label_leftsize=size.small)

    //plot(close)

    // ———————————————————— Constants
    TU1 'chart'
    TU2 'seconds'
    TU3 'minutes'
    TU4 'hours'
    TU5 'days'
    TU6 'months'
    TU7 'years'
    OF1 'Bar\'s Open Time'
    OF2 'Bar\'s Close Time'
    OF3 'Current Time'

    // ———————————————————— Inputs
    i_n input(50'Lines End At Offset n (+/-)')
    i_units input.string(TU1'  Offset Units'options = [TU1TU2TU3TU4TU5TU6TU7])
    i_from input.string(OF1'  Calculated from'options = [OF1OF2OF3])
    i_modulo input.int(50'Draw lines every n bars'minval 1)

    // ———————————————————— Functions.
    // ————— Converts current chart resolution into a float minutes value.
    f_resInMinutes() =>
        
    _resInMinutes timeframe.multiplier * (timeframe.isseconds 1. 60 timeframe.isminutes 1. timeframe.isdaily 60. 24 timeframe.isweekly 60. 24 timeframe.ismonthly 60. 24 30.4375 na)
        
    _resInMinutes

    // ————— Calculates a +/- time offset in variable units from the current bar's time or from the current time.
    // WARNING:
    //      This functions does not solve the challenge of taking into account irregular gaps between bars when calculating time offsets.
    //      Optimal behavior occurs when there are no missing bars at the chart resolution between the current bar and the calculated time for the offset.
    //      Holidays, no-trade periods or other irregularities causing missing bars will produce unpredictable results.
    f_timeFrom(_from_qty_units) =>
        
    // _from  : starting time from where the offset is calculated: "bar" to start from the bar's starting time, "close" to start from the bar's closing time, "now" to start from the current time.
        // _qty   : the +/- qty of _units of offset required. A "series float" can be used but it will be cast to a "series int".
        // _units : string containing one of the seven allowed time units: "chart" (chart's resolution), "seconds", "minutes", "hours", "days", "months", "years".
        // Dependency: f_resInMinutes().
        
    int _timeFrom na
        
    // Remove any "s" letter in the _units argument, so we don't need to compare singular and plural unit names.
        
    _unit str.replace_all(_units's''')
        
    // Determine if we will calculate offset from the bar's time or from current time.
        
    _t _from == 'bar' time _from == 'close' time_close timenow
        
    // Calculate time at offset.
        
    if _units == 'chart'
            
    // Offset in chart res multiples.
            
    _timeFrom := int(_t f_resInMinutes() * 60 1000 _qty)
            
    _timeFrom
        
    else // Add the required _qty of time _units to the _from starting time.
            
    _year year(_t) + (_unit == 'year' int(_qty) : 0)
            
    _month month(_t) + (_unit == 'month' int(_qty) : 0)
            
    _day dayofmonth(_t) + (_unit == 'day' int(_qty) : 0)
            
    _hour hour(_t) + (_unit == 'hour' int(_qty) : 0)
            
    _minute minute(_t) + (_unit == 'minute' int(_qty) : 0)
            
    _second second(_t) + (_unit == 'econd' int(_qty) : 0)
            
    // Return the resulting time in ms Unix time format.
            
    _timeFrom := timestamp(_year_month_day_hour_minute_second)
            
    _timeFrom

    // ———————————————————— Calculations.
    // Condition trigerring the display of lines.
    drawLines bar_index i_modulo == or barstate.islast
    // Base to calculate offset from.
    from i_from == OF1 'bar' i_from == OF2 'close' 'now'
    // Calculate offset.
    TimeTo f_timeFrom(fromi_ni_units)

    // ———————————————————— Plots
    // Draw lines when required.
    if drawLines
        
    // Draw a line in the future at the `high` and `low` levels of the bar where the condition occurs.
        // Note that these lines aren't drawn when loop mode is used because `x2Hi` and `x2Lo` are then `na`.
        
    line.new(timehighTimeTohighxloc.bar_timecolor color.purplestyle line.style_arrow_rightwidth 1)
        
    //line.new(time, low, TimeTo, low, xloc.bar_time, color = color.white, style = line.style_arrow_right, width = 1)

    // Plot chart interval in ms in Data Window.
    //plotchar(f_resInMinutes(), 'f_resInMinutes()', '', location.top, size = size.tiny)
    //////////////////////////////////////////

    // ================= User Inputs =================
    Periods        input.int(100title="ATR Period"minval=1)
    src            input.source(ohlc4title="Source")
    Multiplier     input.float(5.7title="ATR Multiplier")
    changeATR      input.bool(truetitle="Use True ATR?")
    showsignals    input.bool(truetitle="Show Buy/Sell Signals")
    highlighting   input.bool(truetitle="Enable Trend Highlighting")

    // ================= ATR Calculation =================
    atr2 ta.sma(ta.trPeriods)
    atr  changeATR ta.atr(Periods) : atr2

    // ================= Trend Calculation =================
    up  src - (Multiplier atr)
    up1 nz(up[1], up)
    up := close[1] > up1 math.max(upup1) : up

    dn  
    src + (Multiplier atr)
    dn1 nz(dn[1], dn)
    dn := close[1] < dn1 math.min(dndn1) : dn

    var int trend 1
    trend 
    := trend == -and close dn1 trend == and close up1 ? -trend

    // ================= Plotting Up/Down Trend Lines =================
    upPlot plot(trend == up natitle="Up"style=plot.style_linebrlinewidth=1color=color.rgb(425512))
    dnPlot plot(trend == -dn natitle="Down"style=plot.style_linebrlinewidth=1color=color.fuchsia)

    // ================= Buy/Sell Signals =================
    buySignal  trend == and trend[1] == -1
    sellSignal 
    trend == -and trend[1] == 1

    plotshape
    (buySignal and showsignals up natitle="Buy"text="A"style=shape.labeluplocation=location.bottomsize=size.smallcolor=#ffbf00, textcolor=color.black)
    plotshape(sellSignal and showsignals dn natitle="Sell"text="S"location=location.topstyle=shape.labeldownsize=size.smallcolor=#ffbf00, textcolor=color.black)

    ////////////

    // --- User Inputs ---
    // Trendline Set Toggles
    g_general "General Settings"
    show10 input.bool(true"Lookback 10/10"group=g_generalinline="set1")
    show25 input.bool(false"25/25"group=g_generalinline="set1")
    show50 input.bool(false"50/50"group=g_generalinline="set2")
    show100 input.bool(false"100/100"group=g_generalinline="set2")
    show250 input.bool(false"250/250"group=g_generalinline="set3")
    show500 input.bool(false"500/500"group=g_generalinline="set3")

    // Line Style
    g_style "Style Settings"
    downTrendColor input.color(color.new(color.red0), title="Downtrend Color"group=g_style)
    upTrendColor input.color(color.new(color.green0), title="Uptrend Color"group=g_style)
    lineWidth input.int(2title="Line Width"minval=1group=g_style)
    lineStyleInput input.string("Dotted"title="Line Style"options=["Solid""Dashed""Dotted"], group=g_style)

    // Behavior
    g_behavior "Behavior Settings"
    stopExtendOnBreak input.bool(truetitle="Stop Extend on Break"group=g_behavior)
    //showPivots = input.bool(true, title="Show Pivot Points", group=g_behavior)

    // --- Custom Type for Managing Trendline State ---
    // This object holds all the necessary variables for a single trendline set.
    type TrendlineState
        
    // High trendline state
        
    line highLine1 na
        line highLine2 
    na
        bool isHighLine1Broken 
    false
        float lastPivotHighPrice 
    na
        int lastPivotHighBar 
    na
        float prevPivotHighPrice 
    na
        int prevPivotHighBar 
    na
        
    // Low trendline state
        
    line lowLine1 na
        line lowLine2 
    na
        bool isLowLine1Broken 
    false
        float lastPivotLowPrice 
    na
        int lastPivotLowBar 
    na
        float prevPivotLowPrice 
    na
        int prevPivotLowBar 
    na

    // --- State Management ---
    // Create a persistent state object for each lookback period.
    var state10 TrendlineState.new()
    var 
    state25 TrendlineState.new()
    var 
    state50 TrendlineState.new()
    var 
    state100 TrendlineState.new()
    var 
    state250 TrendlineState.new()
    var 
    state500 TrendlineState.new()

    // --- Line Style Conversion Function ---
    f_getLineStyle(style) =>
        switch 
    style
            
    "Solid" => line.style_solid
            
    "Dashed" => line.style_dashed
            
    => line.style_dotted
    lineStyle 
    f_getLineStyle(lineStyleInput)

    // --- Pre-calculate All Pivot Points ---
    // This is more efficient than calculating them inside the function repeatedly.
    pivotH10 ta.pivothigh(high1010)
    pivotL10 ta.pivotlow(low1010)
    pivotH25 ta.pivothigh(high2525)
    pivotL25 ta.pivotlow(low2525)
    pivotH50 ta.pivothigh(high5050)
    pivotL50 ta.pivotlow(low5050)
    pivotH100 ta.pivothigh(high100100)
    pivotL100 ta.pivotlow(low100100)
    pivotH250 ta.pivothigh(high250250)
    pivotL250 ta.pivotlow(low250250)
    pivotH500 ta.pivothigh(high500500)
    pivotL500 ta.pivotlow(low500500)

    // --- Core Logic Function ---
    // This function calculates, draws, and manages a single set of trendlines.
    processTrendlines(TrendlineState stateint rightBarsfloat pivotHighPricefloat pivotLowPrice) =>
        
    // --- Draw High Trendlines ---
        
    if not na(pivotHighPrice)
            
    state.prevPivotHighPrice := state.lastPivotHighPrice
            state
    .prevPivotHighBar := state.lastPivotHighBar
            state
    .lastPivotHighPrice := pivotHighPrice
            state
    .lastPivotHighBar := bar_index rightBars
            
    if not na(state.prevPivotHighPrice)
                
    line.delete(state.highLine2)
                
    state.highLine2 := state.highLine1
                state
    .highLine1 := line.new(state.prevPivotHighBarstate.prevPivotHighPricestate.lastPivotHighBarstate.lastPivotHighPricecolor=downTrendColorwidth=lineWidthstyle=lineStyleextend=extend.right)
                
    state.isHighLine1Broken := false

        
    // --- Draw Low Trendlines ---
        
    if not na(pivotLowPrice)
            
    state.prevPivotLowPrice := state.lastPivotLowPrice
            state
    .prevPivotLowBar := state.lastPivotLowBar
            state
    .lastPivotLowPrice := pivotLowPrice
            state
    .lastPivotLowBar := bar_index rightBars
            
    if not na(state.prevPivotLowPrice)
                
    line.delete(state.lowLine2)
                
    state.lowLine2 := state.lowLine1
                state
    .lowLine1 := line.new(state.prevPivotLowBarstate.prevPivotLowPricestate.lastPivotLowBarstate.lastPivotLowPricecolor=upTrendColorwidth=lineWidthstyle=lineStyleextend=extend.right)
                
    state.isLowLine1Broken := false

        
    // --- Handle Line Breaks ---
        
    if stopExtendOnBreak
            
    // High line break
            
    if not na(state.highLine1) and not state.isHighLine1Broken
                linePrice 
    line.get_price(state.highLine1bar_index)
                if 
    high linePrice
                    x1 
    line.get_x1(state.highLine1)
                    
    y1 line.get_y1(state.highLine1)
                    
    line.delete(state.highLine1)
                    
    state.highLine1 := line.new(x1y1bar_indexlinePricecolor=downTrendColorwidth=lineWidthstyle=lineStyleextend=extend.none)
                    
    state.isHighLine1Broken := true
            
    // Low line break
            
    if not na(state.lowLine1) and not state.isLowLine1Broken
                linePrice 
    line.get_price(state.lowLine1bar_index)
                if 
    low linePrice
                    x1 
    line.get_x1(state.lowLine1)
                    
    y1 line.get_y1(state.lowLine1)
                    
    line.delete(state.lowLine1)
                    
    state.lowLine1 := line.new(x1y1bar_indexlinePricecolor=upTrendColorwidth=lineWidthstyle=lineStyleextend=extend.none)
                    
    state.isLowLine1Broken := true

    // --- Cleanup Function ---
    cleanupLines(TrendlineState state) =>
        
    line.delete(state.highLine1)
        
    line.delete(state.highLine2)
        
    line.delete(state.lowLine1)
        
    line.delete(state.lowLine2)
        
    state.highLine1 := na
        state
    .highLine2 := na
        state
    .lowLine1 := na
        state
    .lowLine2 := na

    // --- Main Execution Block ---
    if show10
        processTrendlines
    (state1010pivotH10pivotL10)
    else
        
    cleanupLines(state10)

    if 
    show25
        processTrendlines
    (state2525pivotH25pivotL25)
    else
        
    cleanupLines(state25)

    if 
    show50
        processTrendlines
    (state5050pivotH50pivotL50)
    else
        
    cleanupLines(state50)

    if 
    show100
        processTrendlines
    (state100100pivotH100pivotL100)
    else
        
    cleanupLines(state100)

    if 
    show250
        processTrendlines
    (state250250pivotH250pivotL250)
    else
        
    cleanupLines(state250)

    if 
    show500
        processTrendlines
    (state500500pivotH500pivotL500)
    else
        
    cleanupLines(state500)

    // --- Plot Pivot Points ---
    // The first argument to plotshape must be a boolean condition.
    // We combine the user toggles with the pivot detection to create this condition. 
    16.07.2024 - 10.12.2024

  5. rsi değerini mtf tablo, fiyat olarak görmek isteyenler için....

    RSI Dynamic Bands
    https://tr.tradingview.com/v/Jd3xaoZm/
    https://www.tradingview.com/x/yp0zGXhH/
    16.07.2024 - 10.12.2024

  6. ADVANCED COSINE PROJECTION SYSTEM — LITE Mark3
    https://tr.tradingview.com/v/eEKFyQYY/

    ilginç çalışma... sadeleşip kullanılabilir....
    16.07.2024 - 10.12.2024

  7. Dynamic Grid Range V9 (Final)
    https://tr.tradingview.com/v/OiZ5MhDJ/

    ayarlarda mod var...ultra safe seçtiğimde.... https://www.tradingview.com/x/fMixJS9F/
    16.07.2024 - 10.12.2024

  8. combine kod çalışması....stratejiyi kendiniz yazın ve test edin....

    PHP Code:
    //@version=6
    indicator("combine"shorttitle="."overlay=true,
         
    max_lines_count=400max_boxes_count=50max_labels_count=5)

    // ── Enhanced Inputs
    string GRP1 "Core Pattern Matching"
    string GRP2 "Projection & Smoothing"
    string GRP3 "Quality & Filtering"
    string GRP4 "Visuals"

    int   patLen   input.int(20,   "Pattern Length",      minval=8,  maxval=200group=GRP1)
    int   fLen     input.int(30,   "Forecast Bars",       minval=5,  maxval=300group=GRP1)
    int   depth    input.int(2000"Search Depth",        minval=200,maxval=6000,group=GRP1)
    float minConf  input.float(0.30,"Min Confidence",     minval=0.10,maxval=0.95,step=0.05,group=GRP1)

    string scaling    input.string("Adaptive","Scaling Method"options=["Fixed","Adaptive","Volatility","Z-Score"], group=GRP2)
    string smoothing  input.string("EMA","Projection Smoothing"options=["None","SMA","EMA","Adaptive"], group=GRP2)
    int    smoothLen  input.int(3"Smoothing Length",     minval=2,  maxval=10group=GRP2)

    bool   useQualFilter input.bool(true,  "Enable Quality Filter"group=GRP3)
    float  minVariance   input.float(0.001,"Min Pattern Variance"minval=0.0001maxval=0.01step=0.0001group=GRP3)
    int    trendCheck    input.int(5,      "Trend Coherence Bars"minval=3maxval=15group=GRP3)

    bool showProj   input.bool(true,  "Show Projection"group=GRP4)
    bool showBands  input.bool(true,  "Show Bands",      group=GRP4)
    bool showZones  input.bool(true,  "Show Zones",      group=GRP4)

    // Enhanced colors
    color upColor   input.color(#00FF88, "Uptrend (Green)",   group=GRP4)
    color dnColor   input.color(#FF4444, "Downtrend (Red)",   group=GRP4)
    color swColor   input.color(#FFAA00, "Sideways (Yellow)", group=GRP4)

    // ── Enhanced Data buffers
    var array<floatprices = array.new<float>()
    var array<
    int>   times  = array.new<int>()
    var array<
    floathighs  = array.new<float>()
    var array<
    floatlows   = array.new<float>()

    // handles
    var array<linehProj = array.new<line>()
    var array<
    linehBand = array.new<line>()
    var array<
    box>  hBox  = array.new<box>()
    var 
    label       hLbl  na

    // ── Enhanced Helper Functions
    safeDiv(float nfloat dfloat fb) => 
        
    == 0.0 fb d

    // Enhanced cosine similarity with multiple normalization methods
    cosineSim(array<floatarrint startAint startBint lenstring method "returns") =>
        array<
    floatseqA = array.new<float>()
        array<
    floatseqB = array.new<float>()
        
        
    // Extract sequences
        
    for 0 to len 1
            
    array.push(seqA, array.get(arrstartA i))
            array.
    push(seqB, array.get(arrstartB i))
        
        
    // Normalize based on method
        
    if method == "returns"
            
    // Return-based normalization (original method)
            
    float dp 0.0na2 0.0nb2 0.0
            
    for 1 to len 1
                float a0 
    = array.get(seqA1)
                
    float a1 = array.get(seqAk)
                
    float b0 = array.get(seqB1)
                
    float b1 = array.get(seqBk)
                
    float ra safeDiv(a1 a0a00.0)
                
    float rb safeDiv(b1 b0b00.0)
                
    dp  := dp ra rb
                na2 
    := na2 ra ra
                nb2 
    := nb2 rb rb
            float den 
    math.sqrt(na2) * math.sqrt(nb2)
            
    den == 0.0 0.0 dp den
        
    else
            
    // Z-score normalization for more stable comparison
            
    float meanA 0.0meanB 0.0
            
    for 0 to len 1
                meanA 
    := meanA + array.get(seqAi)
                
    meanB := meanB + array.get(seqBi)
            
    meanA := meanA len
            meanB 
    := meanB len
            
            float stdA 
    0.0stdB 0.0
            
    for 0 to len 1
                float diffA 
    = array.get(seqAi) - meanA
                float diffB 
    = array.get(seqBi) - meanB
                stdA 
    := stdA diffA diffA
                stdB 
    := stdB diffB diffB
            stdA 
    := math.sqrt(stdA len)
            
    stdB := math.sqrt(stdB len)
            
            if 
    stdA == 0.0 or stdB == 0.0
                0.0
            
    else
                
    float dp 0.0na2 0.0nb2 0.0
                
    for 0 to len 1
                    float za 
    = (array.get(seqAi) - meanA) / stdA
                    float zb 
    = (array.get(seqBi) - meanB) / stdB
                    dp  
    := dp za zb
                    na2 
    := na2 za za
                    nb2 
    := nb2 zb zb
                float den 
    math.sqrt(na2) * math.sqrt(nb2)
                
    den == 0.0 0.0 dp den

    // Pattern quality validation
    patternQuality(array<floatarrint startint len) =>
        if 
    start or start len >= array.size(arr)
            
    0.0
        
    else
            
    // Calculate variance to ensure pattern has sufficient movement
            
    float mean 0.0
            
    for 0 to len 1
                mean 
    := mean + array.get(arrstart i)
            
    mean := mean len
            
            float variance 
    0.0
            
    for 0 to len 1
                float diff 
    = array.get(arrstart i) - mean
                variance 
    := variance diff diff
            variance 
    := variance len
            
            
    // Check trend coherence - avoid choppy patterns
            
    int trendChanges 0
            bool lastUp 
    false
            bool firstCheck 
    true
            
    for 1 to len 1
                bool currentUp 
    = array.get(arrstart i) > array.get(arrstart 1)
                if 
    not firstCheck and currentUp != lastUp
                    trendChanges 
    := trendChanges 1
                lastUp 
    := currentUp
                firstCheck 
    := false
            
            float coherence 
    1.0 - (trendChanges / (len 1))
            
    math.sqrt(variance) * coherence

    // Enhanced smoothing function
    smoothProjection(array<floatprojstring methodint length) =>
        array<
    floatsmoothed = array.new<float>()
        
    int size = array.size(proj)
        
        if 
    method == "None"
            
    for 0 to size 1
                
    array.push(smoothed, array.get(proji))
        else if 
    method == "SMA"
            
    for 0 to size 1
                float sum 
    0.0
                int count 
    0
                int start 
    math.max(0length 1)
                for 
    start to i
                    sum 
    := sum + array.get(projj)
                    
    count := count 1
                
    array.push(smoothedsum count)
        else if 
    method == "EMA"
            
    float alpha 2.0 / (length 1.0)
            array.
    push(smoothed, array.get(proj0))
            for 
    1 to size 1
                float prev 
    = array.get(smoothed1)
                
    float curr = array.get(proji)
                array.
    push(smoothedalpha curr + (1.0 alpha) * prev)
        else 
    // Adaptive
            
    for 0 to size 1
                float sum 
    0.0
                float weightSum 
    0.0
                int adaptiveLen 
    length length
                
    for 0 to adaptiveLen 1
                    float weight 
    1.0 / (1.0)
                    
    sum := sum + array.get(projj) * weight
                    weightSum 
    := weightSum weight
                
    array.push(smoothedsum weightSum)
        
        
    smoothed

    // Sample std of returns (enhanced for volatility scaling)
    retStd(array<floatarrint startint len) =>
        if 
    start or start len >= array.size(arr)
            
    0.0
        
    else
            
    float s 0.0
            float c 
    0.0
            
    for start 1 to start len
                float r 
    safeDiv(array.get(arrk) - array.get(arr1), array.get(arr1), 0.0)
                
    := r
                c 
    := 1.0
            float m 
    safeDiv(sc0.0)
            
    float ss 0.0
            
    for start 1 to start len
                float r 
    safeDiv(array.get(arrk) - array.get(arr1), array.get(arr1), 0.0)
                
    float d m
                ss 
    := ss d
            math
    .sqrt(safeDiv(ssmath.max(1.01.0), 0.0))

    // Array min/max over a range
    arrMin(array<floataint startint len) =>
        
    float m na
        int stop 
    math.min(start len, array.size(a))
        if 
    start >= and start < array.size(a)
            for 
    start to stop 1
                float v 
    = array.get(ai)
                
    := na(m) ? math.min(mv)
        
    m

    arrMax
    (array<floataint startint len) =>
        
    float m na
        int stop 
    math.min(start len, array.size(a))
        if 
    start >= and start < array.size(a)
            for 
    start to stop 1
                float v 
    = array.get(ai)
                
    := na(m) ? math.max(mv)
        
    m

    // Draw cleanup
    cleanup() =>
        for 
    l in hProj
            line
    .delete(l)
        array.
    clear(hProj)
        for 
    l in hBand
            line
    .delete(l)
        array.
    clear(hBand)
        for 
    b in hBox
            box
    .delete(b)
        array.
    clear(hBox)
        if 
    not na(hLbl)
            
    label.delete(hLbl)

    // Keep arrays bounded
    keep(int maxKeep) =>
        while array.
    size(prices) > maxKeep
            
    array.shift(prices)
            array.
    shift(times)
            array.
    shift(highs)
            array.
    shift(lows)

    // ── Ingest
    array.push(pricesclose)
    array.
    push(times,  time)
    array.
    push(highs,  high)
    array.
    push(lows,   low)
    keep(depth patLen fLen 50)

    // ── Enhanced Engine
    if barstate.islastconfirmedhistory and array.size(prices) > patLen fLen
        cleanup
    ()
        
    hLbl := na

        int N 
    = array.size(prices)
        
    int recentStart patLen
        int searchEnd   
    patLen fLen
        int searchStart 
    math.max(0searchEnd depth)

        
    float bestScore = -1.0
        int   bestIdx   
    0
        float bestQuality 
    0.0

        
    // Enhanced pattern search with quality filtering
        
    for searchStart to searchEnd
            
    // Check pattern quality first if filtering enabled
            
    float quality useQualFilter patternQuality(pricesipatLen) : 1.0
            
            
    if quality >= minVariance
                string simMethod 
    scaling == "Z-Score" "zscore" "returns"
                
    float s cosineSim(pricesrecentStartipatLensimMethod)
                
                
    // Weight similarity by pattern quality
                
    float weightedScore * (0.7 0.3 math.min(quality / (minVariance 10.0), 1.0))
                
                if 
    weightedScore bestScore
                    bestScore 
    := weightedScore
                    bestIdx 
    := i
                    bestQuality 
    := quality

        bool have 
    bestScore >= minConf
        
    if have
            
    // Enhanced scaling methods
            
    float cur      = array.get(prices1)
            
    float baseHist = array.get(pricesbestIdx patLen 1)
            
    float scale    1.0
            
            
    if scaling == "Fixed"
                
    scale := 1.0
            
    else if scaling == "Adaptive"
                
    scale := safeDiv(curbaseHist1.0)
            else if 
    scaling == "Volatility"
                
    float cstd retStd(pricespatLenpatLen)
                
    float hstd retStd(pricesbestIdxpatLen)
                
    float vr   safeDiv(cstdhstd1.0)
                
    scale := safeDiv(curbaseHist1.0) * vr
            
    else // Z-Score
                // Z-score based scaling for more stable projections
                
    float histMean 0.0
                
    for 0 to patLen 1
                    histMean 
    := histMean + array.get(pricesbestIdx i)
                
    histMean := histMean patLen
                
                float histStd 
    0.0
                
    for 0 to patLen 1
                    float diff 
    = array.get(pricesbestIdx i) - histMean
                    histStd 
    := histStd diff diff
                histStd 
    := math.sqrt(histStd patLen)
                
                
    float currentStd ta.stdev(closepatLen)
                
    scale := safeDiv(currentStdhistStd1.0)

            
    // Build raw projection path
            
    array<floatrawProj = array.new<float>()
            for 
    0 to fLen 1
                float src 
    = array.get(pricesbestIdx patLen k)
                
    float val cur + (src baseHist) * scale
                
    array.push(rawProjval)

            
    // Apply smoothing to projection
            
    array<floatproj smoothProjection(rawProjsmoothingsmoothLen)
            
            
    // Enhanced confidence bands
            
    float baseVol ta.atr(20)
            
    float confMult = (1.0 bestScore) * 2.0 + (1.0 bestQuality / (minVariance 20.0)) * 1.0
            
            
    array<floatup = array.new<float>()
            array<
    floatdn = array.new<float>()
            for 
    0 to array.size(proj) - 1
                float val 
    = array.get(proji)
                
    float dynamicConf baseVol confMult * (1.0 0.1 fLen// Expanding confidence
                
    array.push(upval dynamicConf)
                array.
    push(dnval dynamicConf)

            
    // Directional analysis with smoothed values
            
    float last = array.get(proj, array.size(proj) - 1)
            
    float pct  safeDiv(last curcur0.0) * 100.0
            color lnColor 
    math.abs(pct) < 0.3 swColor : (pct upColor dnColor)

            
    // Draw enhanced projection
            
    if showProj
                line l0 
    line.new(bar_indexcurbar_index 1, array.get(proj0), color=lnColorwidth=3)
                array.
    push(hProjl0)
                for 
    0 to array.size(proj) - 2
                    line lk 
    line.new(bar_index 1, array.get(projk),
                                       
    bar_index 2, array.get(proj1),
                                       
    color=lnColorwidth=3)
                    array.
    push(hProjlk)

            
    // Enhanced bands
            
    if showBands
                color bc 
    color.new(lnColor70)
                
    line u0 line.new(bar_indexcur baseVol confMultbar_index 1, array.get(up0), color=bcstyle=line.style_dashed)
                
    line d0 line.new(bar_indexcur baseVol confMultbar_index 1, array.get(dn0), color=bcstyle=line.style_dashed)
                array.
    push(hBandu0)
                array.
    push(hBandd0)
                for 
    0 to array.size(up) - 2
                    line uu 
    line.new(bar_index 1, array.get(upk), bar_index 2, array.get(up1), color=bcstyle=line.style_dashed)
                    
    line dd line.new(bar_index 1, array.get(dnk), bar_index 2, array.get(dn1), color=bcstyle=line.style_dashed)
                    array.
    push(hBanduu)
                    array.
    push(hBanddd)

            
    // Zones (unchanged)
            
    if showZones
                float hLow  
    arrMin(lows,  bestIdxpatLen)
                
    float hHigh arrMax(highsbestIdxpatLen)
                if 
    not na(hLow) and not na(hHigh)
                    
    box b1 box.new(array.get(timesbestIdx), hLow, array.get(timesbestIdx patLen 1), hHigh,
                                     
    xloc=xloc.bar_timebgcolor=color.new(lnColor85), border_color=color.new(lnColor55))
                    array.
    push(hBoxb1)
                
    float cLow  ta.lowest(low,  patLen)
                
    float cHigh ta.highest(high,patLen)
                
    box b2 box.new(bar_index patLen 1cLowbar_indexcHigh,
                                 
    bgcolor=color.new(color.blue85), border_color=color.new(color.blue55))
                array.
    push(hBoxb2)

            
    // Enhanced label with quality metrics
            
    string tname math.abs(pct) < 0.3 "SIDEWAYS" : (pct "BULLISH" "BEARISH")
            
    string emoji math.abs(pct) < 0.3 "↔"        : (pct "▲"      "▼")
            
    string lbl   str.format("{0} ENHANCED PROJECTION ({1})\nConfidence: {2,number,#.0}% | Quality: {3,number,#.0}%\nTarget: {4,number,#.##} | Change: {5,number,#.1}%\nMethod: {6} | Smoothing: {7}",
                                      
    emojitnamebestScore*100.0bestQuality*10000.0lastpctscalingsmoothing)
            
    hLbl := label.new(bar_index math.round(array.size(proj)/2.0), math.max(curlast) + ta.atr(10),
                              
    lblcolor=color.new(lnColor20), textcolor=color.white,
                              
    style=label.style_label_downsize=size.normal)

    ////////////////////
    // UI Options for Auto Trend Detection and No Signal in Sideways Market
    autoTrendDetection input.bool(truetitle 'Auto Trend Detection')
    noSignalSideways input.bool(truetitle 'No Signal in Sideways Market')


    // Color variables
    upTrendColor color.white
    neutralColor 
    #90bff9
    downTrendColor color.blue


    // Source
    source input(defval closetitle 'Source')


    // Sampling Period - Replaced with Sniper Machine
    period input.int(defval 9minval 1title 'Sniper Machine Period')


    // Trend Master - Replaced with Sniper Machine
    multiplier input.float(defval 3.0minval 0.1title 'Sniper Machine Multiplier')


    // Smooth Average Range
    smoothRange(xtm) =>
        
    adjustedPeriod 1
        avgRange 
    ta.ema(math.abs(x[1]), t)
        
    smoothRange ta.ema(avgRangeadjustedPeriod) * m
        smoothRange
    smoothedRange 
    smoothRange(sourceperiodmultiplier)


    // Trend Filter
    trendFilter(xr) =>
        
    filtered x
        filtered 
    := nz(filtered[1]) ? nz(filtered[1]) ? nz(filtered[1]) : nz(filtered[1]) ? nz(filtered[1]) : r
        filtered
    filter 
    trendFilter(sourcesmoothedRange)


    // Filter Direction
    upCount 0.0
    upCount 
    := filter filter[1] ? nz(upCount[1]) + filter filter[1] ? nz(upCount[1])
    downCount 0.0
    downCount 
    := filter filter[1] ? nz(downCount[1]) + filter filter[1] ? nz(downCount[1])


    // Colors
    filterColor upCount upTrendColor downCount downTrendColor neutralColor


    // Buy/Sell Signals - Adapted from Clear Trend Logic
    trendUp upCount // Equivalent to REMA_up in Clear Trend
    newBuySignal trendUp and not trendUp[1] and barstate.isconfirmed
    newSellSignal 
    not trendUp and trendUp[1] and barstate.isconfirmed


    initialCondition 
    0
    initialCondition 
    := newBuySignal newSellSignal ? -initialCondition[1]
    longSignal newBuySignal and initialCondition[1] == -1
    shortSignal 
    newSellSignal and initialCondition[1] == 1


    // Alerts and Signals
    plotshape(longSignaltitle 'Buy Signal'text '🚀'textcolor #000000, style = shape.labelup, size = size.small, location = location.belowbar, color = #fae10400) // Bright yellow for Buy
    plotshape(shortSignaltitle 'Sell Signal'text '🚨'textcolor #000000, style = shape.labeldown, size = size.small, location = location.abovebar, color = #fb020200) // Bright red for Sell


    alertcondition(longSignaltitle 'Buy alert on Sniper Machine'message 'Buy alert on Sniper Machine')
    alertcondition(shortSignaltitle 'Sell alert on Sniper Machine'message 'Sell alert on Sniper Machine')
    ///////////////

    // Inputs
    src     input.source(hlc3"Source")
    emaLen  input.int(15"Center EMA")
    spreadN input.int(200"Spread Length")
    kMult   input.float(3.0"Multiplier"step=0.1)

    upCol   input.color(color.rgb(25155), "Up Color")
    dnCol   input.color(color.rgb(26,221,127), "Down Color")

    // Core calculation
    mid    ta.ema(srcemaLen)
    spread ta.sma(high lowspreadN)
    uBand  mid kMult spread
    lBand  
    mid kMult spread

    // Crawl bands
    var float upC na
    var float dnC na
    upC 
    := na(upC[1]) ? uBand : (src[1] > upC[1] ? uBand math.min(uBandupC[1]))
    dnC := na(dnC[1]) ? lBand : (src[1] < dnC[1] ? lBand math.max(lBanddnC[1]))

    // Direction & guide
    var int dir na
    var float guide na
    if na(dir[1])
        
    dir := 1
    else
        
    dir := guide[1] == upC[1] ? (src upC ? -1) : (src dnC : -1)
    guide := dir == upC dnC

    // Background zone fill
    bgcolor(dir==color.new(upCol85) : color.new(dnCol85), title="Trend Zone")

    // Guide line
    plot(guide"Trs"color=color.new(dir==1?upCol:dnCol0), linewidth=1)

    // Signals
    trendUpbn    not na(dir[1]) and dir == -and dir[1] != -1
    trendDownbn  
    not na(dir[1]) and dir == 1  and dir[1] != 1
    pbUp       
    dir==-and high >= upC
    pbDown     
    dir==1  and low <= dnC

    dist 
    0.25 spread 
    filteredPbUp   
    pbUp   and (high upC <= dist)
    filteredPbDown pbDown and (dnC low <= dist)

    firstPbUp   filteredPbUp   and not filteredPbUp[1]
    firstPbDown filteredPbDown and not filteredPbDown[1]

    // ATR for vertical spacing of signals
    atrVal ta.atr(14)
    upY   low 15 atrVal
    downY 
    high 10 atrVal

    // Plot BUY/SELL arrows as labels for vertical spacing
    //if trendUpbn
        //label.new(bar_index, upY, text="BUY", style=label.style_triangleup, color=dnCol, textcolor=color.white, size=size.small, yloc=yloc.price)

    //if trendDownbn
        //label.new(bar_index, downY, text="SELL", style=label.style_triangledown, color=upCol, textcolor=color.white, size=size.small, yloc=yloc.price)

    // Pullback dots
    //plotshape(firstPbUp,   style=shape.circle, location=location.belowbar, color=color.new(dnCol,0), size=size.small)
    //plotshape(firstPbDown, style=shape.circle, location=location.abovebar, color=color.new(upCol,0), size=size.small)
    //////////////////////

    // --- User Inputs ---
    // NEW: Added the "20/20 Profile (Ultra-Safe)" option.
    profile input.string('20/20 Profile (Ultra-Safe)''Select Profile'options = ['20/20 Profile (Ultra-Safe)''16/16 Profile (Safe)''12/12 Profile (Balanced)''8/8 Profile (Aggressive)''Custom'], group 'Grid Calculation')

    // These inputs are now only used when "Custom" is selected.
    customRangePercent input.float(6.3title 'Custom Range as % of Price'group 'Grid Calculation')
    customGridCount input.int(12title 'Custom Grid Count'group 'Grid Calculation')

    // Style Inputs
    gridColor input.color(color.new(color.gray60), title 'Grid Line Color'group 'Line Style')
    gridWidth input.int(1title 'Grid Line Width'minval 1maxval 5group 'Line Style')
    gridStyleString input.string('Dotted'title 'Grid Line Style'options = ['Solid''Dashed''Dotted'], group 'Line Style')

    // --- Variable Declarations ---
    var array<linegridLines = array.new_line()
    var array<
    labelpriceLabels = array.new_label()
    var 
    float finalRangePercent 0.0
    var int finalGridCount 0

    // --- Logic to select parameters based on profile ---
    if profile == '20/20 Profile (Ultra-Safe)'
        
    finalRangePercent := 10.5
        finalGridCount 
    := 20
        finalGridCount
    else if profile == '16/16 Profile (Safe)'
        
    finalRangePercent := 8.4
        finalGridCount 
    := 16
        finalGridCount
    else if profile == '12/12 Profile (Balanced)'
        
    finalRangePercent := 6.3
        finalGridCount 
    := 12
        finalGridCount
    else if profile == '8/8 Profile (Aggressive)'
        
    finalRangePercent := 4.2
        finalGridCount 
    := 8
        finalGridCount
    else // Custom
        
    finalRangePercent := customRangePercent
        finalGridCount 
    := customGridCount
        finalGridCount

    // --- Helper Function ---
    getLineStyle(styleString) =>
        
    styleString == 'Solid' line.style_solid styleString == 'Dashed' line.style_dashed line.style_dotted

    // --- Drawing Logic ---
    if barstate.islast
        
    // Delete old lines and labels
        
    if array.size(gridLines) > 0
            
    for lineId in gridLines
                line
    .delete(lineId)
            array.
    clear(gridLines)
        if array.
    size(priceLabels) > 0
            
    for labelId in priceLabels
                label
    .delete(labelId)
            array.
    clear(priceLabels)

        
    // Main Calculation
        
    currentPrice close
        totalRange 
    currentPrice * (finalRangePercent 100)
        
    halfRange totalRange 2.0
        upperLimit 
    currentPrice halfRange
        lowerLimit 
    currentPrice halfRange
        selectedGridStyle 
    getLineStyle(gridStyleString)

        
    // Draw Lines & Labels
        
    array.push(gridLinesline.new(bar_index 99upperLimitbar_indexupperLimitxloc xloc.bar_indexextend extend.nonecolor color.new(color.green20), width 2))
        array.
    push(gridLinesline.new(bar_index 99lowerLimitbar_indexlowerLimitxloc xloc.bar_indexextend extend.nonecolor color.new(color.red20), width 2))
        if 
    finalGridCount 1
            stepSize 
    totalRange finalGridCount
            
    for 1 to finalGridCount 1 by 1
                gridLevel 
    lowerLimit stepSize
                
    array.push(gridLinesline.new(bar_index 99gridLevelbar_indexgridLevelxloc xloc.bar_indexextend extend.nonecolor gridColorwidth gridWidthstyle selectedGridStyle))
        array.
    push(priceLabelslabel.new(bar_indexupperLimittext str.tostring(upperLimitformat.mintick), xloc xloc.bar_indexcolor color.new(color.green70), textcolor color.whitestyle label.style_label_left))
        array.
    push(priceLabelslabel.new(bar_indexlowerLimittext str.tostring(lowerLimitformat.mintick), xloc xloc.bar_indexcolor color.new(color.red70), textcolor color.whitestyle label.style_label_left))
    ////////////////////son///////////// 
    örnek görüntüler.....
    https://www.tradingview.com/x/KjJhGhQ5/
    https://www.tradingview.com/x/XxZR1eTz/
    https://www.tradingview.com/x/o87KYC7G/
    https://www.tradingview.com/x/b5MC9ZN6/
    https://www.tradingview.com/x/n1198Qna/
    16.07.2024 - 10.12.2024

Sayfa 304/352 İlkİlk ... 204254294302303304305306314 ... SonSon

Yer İmleri

Yer İmleri

Gönderi Kuralları

  • Yeni konu açamazsınız
  • Konulara cevap yazamazsınız
  • Yazılara ek gönderemezsiniz
  • Yazılarınızı değiştiremezsiniz
  •