Strategi menaik dan menurun mata wang kripto berdasarkan penunjuk Halo Mouse Wall Street


Tarikh penciptaan: 2023-11-01 11:27:20 Akhirnya diubah suai: 2023-11-01 11:27:20
Salin: 0 Bilangan klik: 681
1
fokus pada
1617
Pengikut

Strategi menaik dan menurun mata wang kripto berdasarkan penunjuk Halo Mouse Wall Street

Gambaran keseluruhan

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.

Prinsip Strategi

  1. Hitung garis purata Wall Street Ratcatcher Sphere Indicator untuk mata wang kripto asas, dengan panjang garis purata ditetapkan 200 kitaran.

  2. Untuk menilai keadaan penurunan garis purata: apabila garis purata naik, strategi mengambil operasi bullish; apabila garis purata turun, strategi mengambil operasi bearish.

  3. 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.

  4. Strategi untuk mengemas kini harga stop loss dalam masa nyata mengikut perubahan dalam pasaran mata wang kripto asas.

Analisis kelebihan

  1. Strategi ini mempunyai kemampuan beradaptasi yang kuat, dengan parameter yang berbeza untuk pelbagai cryptocurrency yang berbeza, yang membolehkan pelacakan transaksi untuk pelbagai cryptocurrency.

  2. 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.

  3. Strategi ini termasuk mekanisme stop loss, yang membolehkan anda menangkap trend untuk mengejar penurunan dan mengawal kerugian tunggal.

  4. Strategi untuk perdagangan automatik sepenuhnya, tanpa campur tangan manusia, boleh beroperasi 24 jam.

Analisis risiko

  1. 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.

  2. Terdapat risiko bahawa penutupan akan ditembusi oleh turun naik pasaran yang tidak normal. Anda boleh menyesuaikan nisbah penutupan dengan sewajarnya atau memasukkan pengesanan penutupan.

  3. 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.

  4. Terdapat risiko penembusan palsu yang menyebabkan kerugian kedudukan yang terhenti. Anda boleh menyesuaikan parameter penunjuk, penempatan pengenalan atau menyertakan mekanisme kemasukan semula.

Arah pengoptimuman

  1. Menggunakan analisis relevansi untuk memilih lebih banyak mata wang kripto asas, mengombinasikan indikator pengiraan, mengurangkan risiko mata wang asas tunggal.

  2. Menambah mekanisme trend-tracking, menyesuaikan stop loss mengikut pergerakan kadar turun naik.

  3. Meningkatkan tahap kemusnahan untuk mengelakkan kemusnahan yang melampau.

  4. Menambah mekanisme kemasukan semula untuk mengelakkan kehilangan selepas kehilangan.

  5. Mengoptimumkan parameter penunjuk, identificationsettings, meningkatkan kesan penunjuk.

  6. Mengoptimumkan parameter untuk mata wang kripto yang berbeza, meningkatkan kesesuaian strategi.

  7. Mengoptimumkan pengurusan kedudukan, menyesuaikan kedudukan secara dinamik mengikut saiz dana.

ringkaskan

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.

Kod sumber strategi
/*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)