
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.
Strategi Super 1 mempertimbangkan faktor-faktor berikut untuk menentukan arah perdagangan:
Hubungan antara garisan penukaran dan garisan asas:Apabila garis penukaran naik, ia naik, apabila ia turun, ia turun
Warna awan:Ketika awan berwarna hijau, anda akan melihat kenaikan harga, dan apabila merah, anda akan melihat penurunan harga.
Harga naik semula:Ia memerlukan harga untuk kembali ke garis penukaran dan garis penukaran.
Secara khusus, isyarat perdagangan strategi adalah:
Buat isyarat:
Isyarat kosong:
Apabila pada masa yang sama memenuhi isyarat melakukan lebih / kosong, operasi pembukaan kedudukan dijalankan mengikut keadaan kedudukan.
Strategi Super 1 mempunyai kelebihan berikut:
Menggunakan kombinasi indikator super 1 untuk menentukan arah trend, ketepatan yang lebih tinggi
Garis penukaran dan garis penanda dapat menilai dengan jelas trend jangka pendek dan jangka panjang
Syarat yang memerlukan harga untuk menarik balik garis putaran, untuk mengelakkan kerugian akibat penembusan palsu
Pengendalian risiko menggunakan harga terendah yang paling tinggi dalam tempoh yang paling rendah untuk menetapkan hentian kerugian, yang dapat mengawal kerugian tunggal dengan berkesan
Mencari keuntungan yang stabil berbanding kerugian yang wajar
Boleh digunakan dalam kitaran yang berbeza, sesuai untuk perdagangan trend garis panjang
Idea strategi jelas dan mudah difahami, ruang untuk mengoptimumkan parameter
Berkesan dalam pelbagai keadaan pasaran
Ini adalah salah satu daripada beberapa risiko yang boleh dihadapi oleh strategi Super 1:
Dalam pasaran yang bergolak, hentian kerugian mungkin sering dicetuskan, menjejaskan kesan keuntungan
Tidak dapat membalikkan kedudukan dalam masa yang tepat apabila trend berubah dengan cepat, dan boleh menyebabkan kerugian
Nisbah keuntungan dan kerugian yang ditetapkan tidak sesuai untuk semua jenis dan perlu menyesuaikan parameter untuk standard yang berbeza
Mungkin ada keuntungan yang terhad apabila ada ruang yang terhad untuk naik selepas melintasi kawasan awan.
Parameter penunjuk memerlukan pengoptimuman ujian berulang, tidak sesuai untuk varieti yang sering menyesuaikan parameter
Risiko boleh dikurangkan dengan:
Parameter pengoptimuman yang lebih sesuai dengan ciri-ciri kitaran dan varieti yang berbeza
Menapis isyarat masuk ke dalam pasaran, bersama-sama dengan petunjuk lain, untuk mengelakkan penembusan palsu di pasaran yang bergolak
Dinamika penyesuaian kedudukan hentian untuk mengurangkan kemungkinan hentian tercetus
Uji tetapan keuntungan dan kerugian yang berbeza
Menggunakan kaedah seperti bentuk carta untuk menentukan kekuatan isyarat trend
Strategi ini boleh dioptimumkan dengan:
Mengoptimumkan parameter garisan penukaran dan garisan penukaran agar lebih sesuai dengan ciri-ciri varieti yang diperdagangkan
Mengoptimumkan parameter Cloudband untuk menilai trend jangka panjang dengan lebih tepat
Algoritma pengoptimuman berhenti, seperti berhenti set atau berhenti dinamik mengikut ATR
Penapisan isyarat yang digabungkan dengan penunjuk lain, mengkonfigurasi lebih banyak syarat penapisan, mengurangkan kebarangkalian masuk salah
Mengoptimumkan tetapan rasio keuntungan dan kerugian, menyesuaikan strategi untuk pelbagai jenis dan ciri-ciri kitaran
Menggunakan kaedah Martingale untuk menguruskan kedudukan, menyesuaikan diri dengan frekuensi turun naik pasaran yang berbeza
Menggunakan kaedah pembelajaran mesin untuk mengoptimumkan parameter dan mencapai kestabilan yang lebih tinggi
Tetapkan tempoh masa dagangan yang berbeza untuk menyesuaikan diri dengan ciri-ciri perdagangan pada waktu malam dan waktu tengah malam
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.
/*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))