
Strategi ini berdasarkan kepada Wall Street Capture Glow Indicator, yang membandingkan tren turun-turun dalam pasaran cryptocurrency asas, untuk mewujudkan strategi perdagangan automatik untuk melakukan operasi bullish-bullish terhadap mata wang kripto sasaran. Strategi ini dapat mengikuti perdagangan untuk pelbagai mata wang kripto berdasarkan parameter indikator sokongan yang ditetapkan oleh mata wang kripto yang berbeza.
Hitung garis purata Wall Street Ratcatcher Sphere Indicator untuk mata wang kripto asas, dengan panjang garis purata ditetapkan 200 kitaran.
Untuk menilai keadaan penurunan garis purata: apabila garis purata naik, strategi mengambil operasi bullish; apabila garis purata turun, strategi mengambil operasi bearish.
Strategi untuk membuka dan menutup kedudukan secara automatik mengikut keadaan rata-rata dan keadaan kedudukan semasa:
Apabila garis purata naik dan tiada kedudukan pada masa ini, harga pasaran strategi secara automatik membuka lebih banyak kedudukan;
Apabila purata turun dan tiada kedudukan semasa, harga pasaran strategi secara automatik membuka posisi short;
Harga pasaran strategi secara automatik akan merata apabila keuntungan dalam pelbagai kedudukan mencapai peratusan berhenti yang ditetapkan;
Apabila keuntungan dari kedudukan short mencapai peratusan stop yang ditetapkan, harga pasaran strategi secara automatik akan menebus pesanan short;
Harga pasaran strategi secara automatik akan merata apabila kerugian dagangan melebihi kadar stop loss yang ditetapkan;
Apabila kerugian kedudukan short mencapai peratusan stop loss yang ditetapkan, harga pasaran strategi secara automatik akan menebus short.
Strategi untuk mengemas kini harga stop loss dalam masa nyata mengikut perubahan dalam pasaran mata wang kripto asas.
Strategi ini mempunyai kemampuan beradaptasi yang kuat, dengan parameter yang berbeza untuk pelbagai cryptocurrency yang berbeza, yang membolehkan pelacakan transaksi untuk pelbagai cryptocurrency.
Menggunakan Wall Street Rat Trap Gloss Indicator untuk menilai trend pasaran, boleh mengelakkan kesalahan perdagangan yang disebabkan oleh kebisingan. Indeks ini mempunyai keterlambatan tertentu terhadap terobosan naik dan turun, dapat mengurangkan kerugian yang disebabkan oleh terobosan palsu.
Strategi ini termasuk mekanisme stop loss, yang membolehkan anda menangkap trend untuk mengejar penurunan dan mengawal kerugian tunggal.
Strategi untuk perdagangan automatik sepenuhnya, tanpa campur tangan manusia, boleh beroperasi 24 jam.
Terdapat kemungkinan bahawa harga cryptocurrency tertentu tidak sepadan dengan mata wang kripto asas, yang menyebabkan risiko bahawa strategi tidak dapat berdagang dengan baik. Anda boleh mengoptimumkan untuk menggunakan beberapa mata wang kripto asas untuk mengira faktor berkaitan dan memilih mata wang kripto asas yang paling relevan.
Terdapat risiko bahawa penutupan akan ditembusi oleh turun naik pasaran yang tidak normal. Anda boleh menyesuaikan nisbah penutupan dengan sewajarnya atau memasukkan pengesanan penutupan.
Terdapat risiko bahawa penyetempatan stop-loss yang terlalu kecil menyebabkan tidak dapat menangkap keuntungan trend yang mencukupi. Anda boleh menambah trend tracking atau stop-loss dinamik.
Terdapat risiko penembusan palsu yang menyebabkan kerugian kedudukan yang terhenti. Anda boleh menyesuaikan parameter penunjuk, penempatan pengenalan atau menyertakan mekanisme kemasukan semula.
Menggunakan analisis relevansi untuk memilih lebih banyak mata wang kripto asas, mengombinasikan indikator pengiraan, mengurangkan risiko mata wang asas tunggal.
Menambah mekanisme trend-tracking, menyesuaikan stop loss mengikut pergerakan kadar turun naik.
Meningkatkan tahap kemusnahan untuk mengelakkan kemusnahan yang melampau.
Menambah mekanisme kemasukan semula untuk mengelakkan kehilangan selepas kehilangan.
Mengoptimumkan parameter penunjuk, identificationsettings, meningkatkan kesan penunjuk.
Mengoptimumkan parameter untuk mata wang kripto yang berbeza, meningkatkan kesesuaian strategi.
Mengoptimumkan pengurusan kedudukan, menyesuaikan kedudukan secara dinamik mengikut saiz dana.
Strategi ini secara keseluruhannya adalah strategi pengesanan trend yang tipikal. Idea utamanya adalah untuk menilai arah trend mata wang kripto asas berdasarkan petunjuk Wall Street Mouse Ring Gloss, untuk menentukan arah perdagangan mata wang kripto sasaran. Strategi ini mempunyai kelebihan tertentu, tetapi terdapat juga beberapa risiko yang perlu diperhatikan.
/*backtest
start: 2022-10-25 00:00:00
end: 2023-10-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © levieux
//@version=5
strategy(title='Correlation Strategy', shorttitle='Correlation Strategy', initial_capital=1000, overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)
supportLength = input.int(200, minval=1, title='Support Length')
supportSymbol = input('BTC_USDT:swap', title='Correlated Symbol')
supportSource = input(hlc3, title='Price Source')
takeprofitLong = input.float(0.2, 'Take Profit Long', step=0.01)
takeprofitShort = input.float(0.15, 'Take Profit Short', step=0.01)
stoplossLong = input.float(0.1, 'Stop Loss Long', step=0.01)
stoplossShort = input.float(0.04, 'Stop Loss Short', step=0.01)
start = input(defval = timestamp("01 Jan 2016 00:00 +0000"), title = "Start Time")
end = input(defval = timestamp("31 Dec 2050 23:59 +0000"), title = "End Time")
supportTicker = request.security(supportSymbol, timeframe.period, supportSource, lookahead=barmerge.lookahead_off) //input(close, title="Source")
supportLine = ta.wma(supportTicker, supportLength)
window() => true
if not window()
strategy.cancel_all()
supportLongPrice = close
supportShortPrice = close
if strategy.position_size > 0
supportLongPrice := supportLongPrice[1]
if strategy.position_size < 0
supportShortPrice := supportShortPrice[1]
longCondition = ta.rising(supportLine, 5) and window() and strategy.position_size <= 0
shortCondition = ta.falling(supportLine, 5) and window() and window() and strategy.position_size > 0
takeprofitLongCondition = takeprofitLong > 0 and window() and strategy.position_size > 0 and supportTicker > supportLongPrice * (1 + takeprofitLong)
stoplossLongCondition = stoplossLong > 0 and window() and strategy.position_size > 0 and supportTicker < supportLongPrice * (1 - stoplossLong)
takeprofitShortCondition = takeprofitShort > 0 and window() and strategy.position_size < 0 and supportTicker > supportShortPrice * (1 + takeprofitShort)
stoplossShortCondition = stoplossShort > 0 and window() and strategy.position_size < 0 and supportTicker < supportShortPrice * (1 - stoplossShort)
if longCondition
strategy.entry('Long', strategy.long)
supportLongPrice := supportTicker
if shortCondition
strategy.entry('Short', strategy.short)
supportShortPrice := supportTicker
if takeprofitLongCondition
strategy.close('Long')
if stoplossLongCondition
strategy.close('Long')
if takeprofitShortCondition
strategy.close('Short')
if stoplossShortCondition
strategy.close('Short')
///////////////////
// MONTHLY TABLE //
new_month = month(time) != month(time[1])
new_year = year(time) != year(time[1])
eq = strategy.equity
bar_pnl = eq / eq[1] - 1
bar_bh = (close-close[1])/close[1]
cur_month_pnl = 0.0
cur_year_pnl = 0.0
cur_month_bh = 0.0
cur_year_bh = 0.0
// Current Monthly P&L
cur_month_pnl := new_month ? 0.0 :
(1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1
cur_month_bh := new_month ? 0.0 :
(1 + cur_month_bh[1]) * (1 + bar_bh) - 1
// Current Yearly P&L
cur_year_pnl := new_year ? 0.0 :
(1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1
cur_year_bh := new_year ? 0.0 :
(1 + cur_year_bh[1]) * (1 + bar_bh) - 1
// Arrays to store Yearly and Monthly P&Ls
var month_pnl = array.new_float(0)
var month_time = array.new_int(0)
var month_bh = array.new_float(0)
var year_pnl = array.new_float(0)
var year_time = array.new_int(0)
var year_bh = array.new_float(0)
end_time = false
end_time:= time_close + (time_close - time_close[1]) > timenow or barstate.islastconfirmedhistory
if (not na(cur_month_pnl[1]) and (new_month or end_time))
if (end_time[1])
array.pop(month_pnl)
array.pop(month_time)
array.push(month_pnl , cur_month_pnl[1])
array.push(month_time, time[1])
array.push(month_bh , cur_month_bh[1])
if (not na(cur_year_pnl[1]) and (new_year or end_time))
if (end_time[1])
array.pop(year_pnl)
array.pop(year_time)
array.push(year_pnl , cur_year_pnl[1])
array.push(year_time, time[1])
array.push(year_bh , cur_year_bh[1])
// Monthly P&L Table
var monthly_table = table(na)
getCellColor(pnl, bh) =>
if pnl > 0
if bh < 0 or pnl > 2 * bh
color.new(color.green, transp = 20)
else if pnl > bh
color.new(color.green, transp = 50)
else
color.new(color.green, transp = 80)
else
if bh > 0 or pnl < 2 * bh
color.new(color.red, transp = 20)
else if pnl < bh
color.new(color.red, transp = 50)
else
color.new(color.red, transp = 80)
if end_time
monthly_table := table.new(position.bottom_right, columns = 14, rows = array.size(year_pnl) + 1, border_width = 1)
table.cell(monthly_table, 0, 0, "", bgcolor = #cccccc)
table.cell(monthly_table, 1, 0, "Jan", bgcolor = #cccccc)
table.cell(monthly_table, 2, 0, "Feb", bgcolor = #cccccc)
table.cell(monthly_table, 3, 0, "Mar", bgcolor = #cccccc)
table.cell(monthly_table, 4, 0, "Apr", bgcolor = #cccccc)
table.cell(monthly_table, 5, 0, "May", bgcolor = #cccccc)
table.cell(monthly_table, 6, 0, "Jun", bgcolor = #cccccc)
table.cell(monthly_table, 7, 0, "Jul", bgcolor = #cccccc)
table.cell(monthly_table, 8, 0, "Aug", bgcolor = #cccccc)
table.cell(monthly_table, 9, 0, "Sep", bgcolor = #cccccc)
table.cell(monthly_table, 10, 0, "Oct", bgcolor = #cccccc)
table.cell(monthly_table, 11, 0, "Nov", bgcolor = #cccccc)
table.cell(monthly_table, 12, 0, "Dec", bgcolor = #cccccc)
table.cell(monthly_table, 13, 0, "Year", bgcolor = #999999)
for yi = 0 to array.size(year_pnl) - 1
table.cell(monthly_table, 0, yi + 1, str.tostring(year(array.get(year_time, yi))), bgcolor = #cccccc)
y_color = getCellColor(array.get(year_pnl, yi), array.get(year_bh, yi))
table.cell(monthly_table, 13, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100)) + " (" + str.tostring(math.round(array.get(year_bh, yi) * 100)) + ")", bgcolor = y_color)
for mi = 0 to array.size(month_time) - 1
m_row = year(array.get(month_time, mi)) - year(array.get(year_time, 0)) + 1
m_col = month(array.get(month_time, mi))
m_color = getCellColor(array.get(month_pnl, mi), array.get(month_bh, mi))
table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100)) + " (" + str.tostring(math.round(array.get(month_bh, mi) * 100)) +")", bgcolor = m_color)