Strategi Trend Super Ichimoku


Tarikh penciptaan: 2023-11-06 16:32:11 Akhirnya diubah suai: 2023-11-06 16:32:11
Salin: 0 Bilangan klik: 1427
1
fokus pada
1617
Pengikut

Strategi Trend Super Ichimoku

Gambaran keseluruhan

Strategi super satu adalah strategi perdagangan trend berdasarkan keputusan perdagangan indikator super satu. Strategi ini menggunakan garis peralihan indikator super satu, garis rujukan dan hubungan awan untuk menentukan arah trend semasa, dan menggabungkan penarikan balik harga untuk masuk.

Strategi super 1 digunakan terutamanya untuk perdagangan trend pada garis tengah dan panjang, dan boleh mendapat keuntungan dalam trend yang lebih besar. Strategi ini juga mempunyai keupayaan mengenali trend yang kuat.

Prinsip Strategi

Strategi Super 1 mempertimbangkan faktor-faktor berikut untuk menentukan arah perdagangan:

  1. Hubungan antara garisan penukaran dan garisan asas:Apabila garis penukaran naik, ia naik, apabila ia turun, ia turun

  2. Warna awan:Ketika awan berwarna hijau, anda akan melihat kenaikan harga, dan apabila merah, anda akan melihat penurunan harga.

  3. Harga naik semula:Ia memerlukan harga untuk kembali ke garis penukaran dan garis penukaran.

Secara khusus, isyarat perdagangan strategi adalah:

Buat isyarat:

  • Garis penukaran lebih tinggi daripada garis asas
  • Harga lebih tinggi daripada garis penukaran dan garis asas
  • Garis penukaran dan garis asas di atas awan
  • Harga kembali ke bawah garis penukaran dan garis penukaran

Isyarat kosong:

  • Garis penukaran di bawah garis asas
  • Harga di bawah garis penukaran dan garis penukaran
  • Garis penukaran dan garis asas di bawah awan
  • Harga kembali di atas garis penukaran dan garis asas

Apabila pada masa yang sama memenuhi isyarat melakukan lebih / kosong, operasi pembukaan kedudukan dijalankan mengikut keadaan kedudukan.

Analisis kelebihan

Strategi Super 1 mempunyai kelebihan berikut:

  1. Menggunakan kombinasi indikator super 1 untuk menentukan arah trend, ketepatan yang lebih tinggi

  2. Garis penukaran dan garis penanda dapat menilai dengan jelas trend jangka pendek dan jangka panjang

  3. Syarat yang memerlukan harga untuk menarik balik garis putaran, untuk mengelakkan kerugian akibat penembusan palsu

  4. Pengendalian risiko menggunakan harga terendah yang paling tinggi dalam tempoh yang paling rendah untuk menetapkan hentian kerugian, yang dapat mengawal kerugian tunggal dengan berkesan

  5. Mencari keuntungan yang stabil berbanding kerugian yang wajar

  6. Boleh digunakan dalam kitaran yang berbeza, sesuai untuk perdagangan trend garis panjang

  7. Idea strategi jelas dan mudah difahami, ruang untuk mengoptimumkan parameter

  8. Berkesan dalam pelbagai keadaan pasaran

Analisis risiko

Ini adalah salah satu daripada beberapa risiko yang boleh dihadapi oleh strategi Super 1:

  1. Dalam pasaran yang bergolak, hentian kerugian mungkin sering dicetuskan, menjejaskan kesan keuntungan

  2. Tidak dapat membalikkan kedudukan dalam masa yang tepat apabila trend berubah dengan cepat, dan boleh menyebabkan kerugian

  3. Nisbah keuntungan dan kerugian yang ditetapkan tidak sesuai untuk semua jenis dan perlu menyesuaikan parameter untuk standard yang berbeza

  4. Mungkin ada keuntungan yang terhad apabila ada ruang yang terhad untuk naik selepas melintasi kawasan awan.

  5. Parameter penunjuk memerlukan pengoptimuman ujian berulang, tidak sesuai untuk varieti yang sering menyesuaikan parameter

Risiko boleh dikurangkan dengan:

  1. Parameter pengoptimuman yang lebih sesuai dengan ciri-ciri kitaran dan varieti yang berbeza

  2. Menapis isyarat masuk ke dalam pasaran, bersama-sama dengan petunjuk lain, untuk mengelakkan penembusan palsu di pasaran yang bergolak

  3. Dinamika penyesuaian kedudukan hentian untuk mengurangkan kemungkinan hentian tercetus

  4. Uji tetapan keuntungan dan kerugian yang berbeza

  5. Menggunakan kaedah seperti bentuk carta untuk menentukan kekuatan isyarat trend

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan:

  1. Mengoptimumkan parameter garisan penukaran dan garisan penukaran agar lebih sesuai dengan ciri-ciri varieti yang diperdagangkan

  2. Mengoptimumkan parameter Cloudband untuk menilai trend jangka panjang dengan lebih tepat

  3. Algoritma pengoptimuman berhenti, seperti berhenti set atau berhenti dinamik mengikut ATR

  4. Penapisan isyarat yang digabungkan dengan penunjuk lain, mengkonfigurasi lebih banyak syarat penapisan, mengurangkan kebarangkalian masuk salah

  5. Mengoptimumkan tetapan rasio keuntungan dan kerugian, menyesuaikan strategi untuk pelbagai jenis dan ciri-ciri kitaran

  6. Menggunakan kaedah Martingale untuk menguruskan kedudukan, menyesuaikan diri dengan frekuensi turun naik pasaran yang berbeza

  7. Menggunakan kaedah pembelajaran mesin untuk mengoptimumkan parameter dan mencapai kestabilan yang lebih tinggi

  8. Tetapkan tempoh masa dagangan yang berbeza untuk menyesuaikan diri dengan ciri-ciri perdagangan pada waktu malam dan waktu tengah malam

ringkaskan

Strategi super satu secara keseluruhan adalah strategi yang sangat sesuai untuk perdagangan trend garis panjang dan menengah. Ia menggunakan indikator super satu untuk menentukan arah trend, dan masuk dalam kombinasi dengan penyesuaian harga dapat menghalang masuk secara berkesan. Dengan menetapkan parameter pengoptimuman, strategi dapat mencapai keuntungan yang stabil pada lebih banyak varieti dan lebih banyak kitaran.

Kod sumber strategi
/*backtest
start: 2022-11-05 00:00:00
end: 2023-11-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// Strategy based on the the SuperIchi indicator.
//
// Strategy was designed for the purpose of back testing. 
// See strategy documentation for info on trade entry logic.
// 
// Credits:
//  - SuperIchi [LUX]: LuxAlgo (https://www.tradingview.com/script/vDGd9X9y-SuperIchi-LUX/)

//@version=5
strategy("SuperIchi Strategy", overlay=true, initial_capital=1000, currency=currency.NONE, max_labels_count=500, default_qty_type=strategy.cash, commission_type=strategy.commission.percent, commission_value=0.01)

// =============================================================================
// STRATEGY INPUT SETTINGS
// =============================================================================

// ---------------
// Risk Management
// ---------------
swingLength = input.int(15, "Swing High/Low Lookback Length", group='Strategy: Risk Management', tooltip='Stop Loss is calculated by the swing high or low over the previous X candles')
accountRiskPercent = input.float(2, "Account percent loss per trade", step=0.1, group='Strategy: Risk Management', tooltip='Each trade will risk X% of the account balance')
profitFactor = input.float(2, "Profit Factor (R:R Ratio)", step = 0.1, group='Strategy: Risk Management')
useAtrOverride = input.bool(true, "Use Swing High/Low ATR Override", group='Strategy: Risk Management', tooltip='In some cases price may not have a large enough (if any) swing withing previous X candles. Turn this on to use an ATR value when swing high/low is lower than the given ATR value')
atrMultiplier = input.int(1, "Swing High/Low ATR Override Multiplier", group='Strategy: Risk Management')
atrLength = input.int(14, "Swing High/Low ATR Override Length", group='Strategy: Risk Management')

// -----------------
// Strategy Settings
// -----------------
pullbackLength = input.int(5, "Pullback Lookback Length", group='Strategy: Settings', tooltip='Number of candles to consider for a pullback into the moving averages (prerequisite for trade entry)')

// ----------
// Date Range
// ----------
start_year = input.int(title='Start Date', defval=2022, minval=2010, maxval=3000, group='Strategy: Date Range', inline='1')
start_month = input.int(title='', defval=1, group='Strategy: Date Range', inline='1', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
start_date = input.int(title='', defval=1, group='Strategy: Date Range', inline='1', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])
end_year = input.int(title='End Date', defval=2023, minval=1800, maxval=3000, group='Strategy: Date Range', inline='2')
end_month = input.int(title='', defval=1, group='Strategy: Date Range', inline='2', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
end_date = input.int(title='', defval=1, group='Strategy: Date Range', inline='2', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])
in_date_range = time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0) and time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0)

// =============================================================================
// INDICATORS
// =============================================================================

// ---------------
// SuperIchi [LUX]
// ---------------
tenkan_len  = input(9,'Tenkan          ',inline='SuperIchi', group='Indicator: SuperIchi Settings')
tenkan_mult = input(2.,'',inline='SuperIchi', group='Indicator: SuperIchi Settings')

kijun_len   = input(26,'Kijun             ',inline='SuperIchi', group='Indicator: SuperIchi Settings')
kijun_mult  = input(4.,'',inline='SuperIchi', group='Indicator: SuperIchi Settings')

spanB_len   = input(52,'Senkou Span B ',inline='SuperIchi', group='Indicator: SuperIchi Settings')
spanB_mult  = input(6.,'',inline='SuperIchi', group='Indicator: SuperIchi Settings')

offset      = input(26,'Displacement', inline='SuperIchi', group='Indicator: SuperIchi Settings')
//------------------------------------------------------------------------------
avg(src,length,mult)=>
    atr = ta.atr(length)*mult
    up = hl2 + atr
    dn = hl2 - atr
    upper = 0.,lower = 0.
    upper := src[1] < upper[1] ? math.min(up,upper[1]) : up
    lower := src[1] > lower[1] ? math.max(dn,lower[1]) : dn
    
    os = 0,max = 0.,min = 0.
    os := src > upper ? 1 : src < lower ? 0 : os[1]
    spt = os == 1 ? lower : upper
    max := ta.cross(src,spt) ? math.max(src,max[1]) : os == 1 ? math.max(src,max[1]) : spt
    min := ta.cross(src,spt) ? math.min(src,min[1]) : os == 0 ? math.min(src,min[1]) : spt
    math.avg(max,min)
//------------------------------------------------------------------------------
tenkan = avg(close,tenkan_len,tenkan_mult)
kijun = avg(close,kijun_len,kijun_mult)

senkouA = math.avg(kijun,tenkan)
senkouB = avg(close,spanB_len,spanB_mult)
//------------------------------------------------------------------------------
tenkan_css = #2157f3 //blue
kijun_css = #ff5d00 //red

cloud_a = color.new(color.teal,80)
cloud_b = color.new(color.red,80)

chikou_css = #7b1fa2

plot(tenkan,'Tenkan-Sen',tenkan_css)
plot(kijun,'Kijun-Sen',kijun_css)

plot(ta.crossover(tenkan,kijun) ? kijun : na,'Crossover',#2157f3,3,plot.style_circles)
plot(ta.crossunder(tenkan,kijun) ? kijun : na,'Crossunder',#ff5d00,3,plot.style_circles)

A = plot(senkouA,'Senkou Span A',na,offset=offset-1)
B = plot(senkouB,'Senkou Span B',na,offset=offset-1)
fill(A,B,senkouA > senkouB ? cloud_a : cloud_b)

plot(close,'Chikou',chikou_css,offset=-offset+1,display=display.none)


// =============================================================================
// STRATEGY LOGIC
// =============================================================================
plotchar(kijun, "kijun", "", location = location.top)
plotchar(senkouA[offset-1], "senkouA", "", location = location.top)


plotchar(tenkan > kijun, "line above", "", location = location.top)
plotchar(close > tenkan, "price above", "", location = location.top)
plotchar(kijun > senkouA[offset-1], "above cloud", "", location = location.top)
// blue line above red line + price above both lines + both lines above cloud
longSen = tenkan > kijun and close > tenkan and kijun > senkouA[offset-1]
// red line below blue line + price below both lines + both lines below cloud
shortSen = tenkan < kijun and close < tenkan and kijun < senkouA[offset-1]

plotchar(longSen, "longSen", "", location = location.top)
plotchar(shortSen, "shortSen", "", location = location.top)

// Cloud is green
longSenkou = senkouA[offset-1] > senkouB[offset-1]
// Cloud is red
shortSenkou = senkouA[offset-1] < senkouB[offset-1]

// price must have pulled back below sen lines before entry
barsSinceLongPullback = ta.barssince(close < kijun and close < tenkan)
longPullback = barsSinceLongPullback <= pullbackLength
// price must have pulled back above sen lines before entry
barsSinceShortPullback = ta.barssince(close > kijun and close > tenkan)
shortPullback = barsSinceShortPullback <= pullbackLength

// plotchar(lowestClose, "lowestClose", "", location = location.top)
// plotchar(highestClose, "highestClose", "", location = location.top)

inLong = strategy.position_size > 0
inShort = strategy.position_size < 0

longCondition = longSen and longSenkou and longPullback and in_date_range
shortCondition = shortSen and shortSenkou and shortPullback and in_date_range

swingLow = ta.lowest(source=low, length=swingLength)
swingHigh = ta.highest(source=high, length=swingLength)

atr = useAtrOverride ? ta.atr(atrLength) * atrMultiplier : 0
longSl = math.min(close - atr, swingLow)
shortSl = math.max(close + atr, swingHigh)

longStopPercent = math.abs((1 - (longSl / close)) * 100)
shortStopPercent = math.abs((1 - (shortSl / close)) * 100)

longTpPercent = longStopPercent * profitFactor
shortTpPercent = shortStopPercent * profitFactor
longTp = close + (close * (longTpPercent / 100))
shortTp = close - (close * (shortTpPercent / 100))

// Position sizing (default risk 2% per trade)
riskAmt = strategy.equity * accountRiskPercent / 100
longQty = math.abs(riskAmt / longStopPercent * 100) / close
shortQty = math.abs(riskAmt / shortStopPercent * 100) / close

if (longCondition and not inLong)
    strategy.entry("Long", strategy.long, qty=longQty)
    strategy.exit("Long  SL/TP", from_entry="Long", stop=longSl, limit=longTp, alert_message='Long SL Hit')
    buyLabel = label.new(x=bar_index, y=high[1], color=color.green, style=label.style_label_up)
    label.set_y(id=buyLabel, y=low)
    label.set_tooltip(id=buyLabel, tooltip="Risk Amt: " + str.tostring(riskAmt) + "\nQty: " + str.tostring(longQty) + "\nSwing low: " + str.tostring(swingLow) + "\nStop Percent: " + str.tostring(longStopPercent) + "\nTP Percent: " + str.tostring(longTpPercent))

if (shortCondition and not inShort)
    strategy.entry("Short", strategy.short, qty=shortQty)
    strategy.exit("Short  SL/TP", from_entry="Short", stop=shortSl, limit=shortTp, alert_message='Short SL Hit')
    sellLabel = label.new(x=bar_index, y=high[1], color=color.red, style=label.style_label_up)
    label.set_y(id=sellLabel, y=low)
    label.set_tooltip(id=sellLabel, tooltip="Risk Amt: " + str.tostring(riskAmt) + "\nQty: " + str.tostring(shortQty) + "\nSwing high: " + str.tostring(swingHigh) + "\nStop Percent: " + str.tostring(shortStopPercent) + "\nTP Percent: " + str.tostring(shortTpPercent))