Strategi ini menggunakan gabungan purata bergerak dalam bingkai masa, mengenal pasti pergantian trend pada carta jam pertengahan dan besar, dan mencapai pengesanan perdagangan trend yang rendah risiko. Strategi ini mempunyai kelebihan yang fleksibel, mudah, cekap dana yang tinggi, sesuai untuk pedagang yang memegang jangka panjang dan sederhana untuk mengikuti trend.
Strategi ini menggunakan tiga purata bergerak 5, 20, dan 40 hari untuk menentukan kombinasi susunan trend di bawah bingkai masa yang berbeza. Mengikut prinsip konsistensi trend carta jam besar, menentukan tempoh berbilang ruang kosong.
Khususnya, laluan 20 hari di garis laju 5 hari dianggap sebagai isyarat kenaikan garis pendek dan laluan 40 hari di garis perlahan 20 hari dianggap sebagai isyarat kenaikan garis tengah. Apabila laluan 3 hari adalah betul (hari 5 > 20 > 40 hari), ia dianggap sebagai kitaran berbilang kepala; apabila laluan 3 hari adalah berbalik (hari 5 < 20 < 40 hari), ia dianggap sebagai kitaran kosong.
Dengan cara ini, berdasarkan arah trend kitaran besar, kemudian dikombinasikan dengan kekuatan kitaran kecil untuk mengesan kemasukan tertentu; iaitu, hanya apabila trend besar adalah serentak dan kitaran kecil kuat, perdagangan dibuka, yang dapat menapis secara berkesan terbalik palsu terobosan, untuk mencapai operasi kadar kemenangan yang tinggi.
Di samping itu, strategi ini juga menggunakan ATR stop loss untuk mengawal risiko wang tunggal dan meningkatkan keuntungan lebih lanjut.
Konfigurasi fleksibel, pengguna boleh menyesuaikan sendiri parameter purata bergerak untuk menyesuaikan diri dengan jenis dan keutamaan dagangan yang berbeza
Perisian ini mudah digunakan dan mudah digunakan oleh pengguna baru.
Penggunaan modal yang cekap dan menggunakan kuasa kuasa sepenuhnya
Pengendalian risiko, mekanisme menghentikan kerugian yang berkesan untuk mengelakkan kerugian besar
Kemampuan untuk mengikuti trend yang kuat, keuntungan berterusan selepas kitaran besar menentukan arah
Kadar kemenangan yang lebih tinggi, kualiti isyarat dagangan yang lebih baik, dan kesalahan laluan yang lebih sedikit
Penghakiman kitaran besar bergantung pada susunan garis rata perpindahan, terdapat risiko kesalahan penghakiman lewat
Pengesanan intensiti kitaran kecil hanya dengan satu garis K, mungkin dipicu lebih awal, boleh santai dengan betul
Penghentian yang tetap dan boleh dioptimumkan untuk penghentian dinamik
Syarat penapisan tambahan seperti tenaga jumlah dagangan boleh dipertimbangkan
Cuba kombinasi parameter purata bergerak yang berbeza untuk mengoptimumkan strategi
Strategi ini mengintegrasikan analisis pelbagai bingkai masa dan pengurusan stop loss, yang mencapai perdagangan trend tracking yang rendah risiko. Dengan menyesuaikan parameter, ia boleh digunakan untuk pelbagai jenis untuk memenuhi keperluan pengikut trend. Ia memberikan keputusan perdagangan yang lebih kukuh dan isyarat yang lebih cekap berbanding dengan sistem bingkai masa tunggal tradisional. Secara keseluruhan, strategi ini mempunyai kesesuaian pasaran dan prospek pertumbuhan yang baik.
Strategi ini menggunakan gabungan purata bergerak merentasi bingkai masa untuk mengenal pasti putaran trend pada carta jam, harian dan mingguan. Ia membolehkan trend berisiko rendah selepas perdagangan. Strategi ini fleksibel, mudah dilaksanakan, cekap modal dan sesuai untuk peniaga trend jangka menengah dan panjang.
Strategi ini menggunakan purata bergerak 5, 20 dan 40 hari untuk menentukan keselarasan trend dalam jangka masa yang berbeza. Berdasarkan konsistensi antara jangka masa yang lebih besar dan lebih kecil, ia mengenal pasti kitaran menaik dan menurun.
Secara khusus, melintasi MA cepat 5 hari di atas MA sederhana 20 hari menunjukkan trend menaik dalam jangka pendek. Melintasi MA sederhana 20 hari di atas MA perlahan 40 hari menandakan trend menaik dalam jangka sederhana. Apabila MA cepat, sederhana dan perlahan sejajar positif (5 hari > 20 hari > 40 hari), ia adalah kitaran lembu. Apabila mereka sejajar negatif (5 hari < 20 hari < 40 hari), ia adalah kitaran beruang.
Dengan menentukan arah dari kitaran yang lebih besar dan mengesahkan kekuatan pada kitaran yang lebih kecil, strategi ini membuka kedudukan hanya apabila trend utama dan momentum kecil sejajar.
Strategi ini juga menggunakan hentian trailing ATR untuk mengawal risiko perdagangan tunggal dan meningkatkan keuntungan.
Konfigurasi fleksibel untuk menyesuaikan instrumen dan gaya dagangan yang berbeza
Mudah dilaksanakan walaupun untuk peniaga pemula
Kecekapan modal yang tinggi untuk memaksimumkan leverage
Kawalan risiko yang berkesan untuk mengelakkan kerugian besar
Trend yang kuat mengikuti keupayaan untuk keuntungan yang berterusan
Kadar kemenangan yang tinggi disebabkan oleh isyarat yang kuat dan kurang whipsaws
Persalinan MA mungkin terlambat dan menyebabkan pengesanan trend lewat
Pengesanan kekuatan lilin tunggal boleh mencetuskan kemasukan awal, keadaan santai
Tetap kehilangan hentian ATR, mengoptimumkan hentian dinamik
Pertimbangkan untuk menambah penapis tambahan seperti jumlah
meneroka parameter MA yang berbeza untuk pengoptimuman
Strategi ini mengintegrasikan pelbagai analisis jangka masa dan pengurusan risiko untuk trend berisiko rendah selepas perdagangan. Dengan menyesuaikan parameter, ia boleh disesuaikan dengan instrumen yang berbeza untuk memenuhi peniaga trend. Berbanding dengan sistem jangka masa tunggal, ia membuat keputusan perdagangan yang lebih kukuh dan menghasilkan isyarat kecekapan yang lebih tinggi. Kesimpulannya, strategi ini mempunyai daya adaptasi pasaran yang baik dan potensi pembangunan.
/*backtest start: 2023-10-17 00:00:00 end: 2023-11-16 00:00:00 period: 1h basePeriod: 15m 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/ // © kgynofomo //@version=5 strategy(title="[Salavi] | Andy Advance Pro Strategy [BTC|M15]",overlay = true, pyramiding = 1,initial_capital = 10000, default_qty_type = strategy.cash,default_qty_value = 10000) ema_short = ta.ema(close,5) ema_middle = ta.ema(close,20) ema_long = ta.ema(close,40) cycle_1 = ema_short>ema_middle and ema_middle>ema_long cycle_2 = ema_middle>ema_short and ema_short>ema_long cycle_3 = ema_middle>ema_long and ema_long>ema_short cycle_4 = ema_long>ema_middle and ema_middle>ema_short cycle_5 = ema_long>ema_short and ema_short>ema_middle cycle_6 = ema_short>ema_long and ema_long>ema_middle bull_cycle = cycle_1 or cycle_2 or cycle_3 bear_cycle = cycle_4 or cycle_5 or cycle_6 // label.new("cycle_1") // bgcolor(color=cycle_1?color.rgb(82, 255, 148, 60):na) // bgcolor(color=cycle_2?color.rgb(82, 255, 148, 70):na) // bgcolor(color=cycle_3?color.rgb(82, 255, 148, 80):na) // bgcolor(color=cycle_4?color.rgb(255, 82, 82, 80):na) // bgcolor(color=cycle_5?color.rgb(255, 82, 82, 70):na) // bgcolor(color=cycle_6?color.rgb(255, 82, 82, 60):na) // Inputs a = input(2, title='Key Vaule. \'This changes the sensitivity\'') c = input(7, title='ATR Period') h = false xATR = ta.atr(c) nLoss = a * xATR src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close xATRTrailingStop = 0.0 iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1 xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2 pos = 0 iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0) pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3 xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue ema = ta.ema(src, 1) above = ta.crossover(ema, xATRTrailingStop) below = ta.crossover(xATRTrailingStop, ema) buy = src > xATRTrailingStop and above sell = src < xATRTrailingStop and below barbuy = src > xATRTrailingStop barsell = src < xATRTrailingStop atr = ta.atr(14) atr_length = input.int(25) atr_rsi = ta.rsi(atr,atr_length) atr_valid = atr_rsi>50 long_condition = buy and bull_cycle and atr_valid short_condition = sell and bear_cycle and atr_valid Exit_long_condition = short_condition Exit_short_condition = long_condition if long_condition strategy.entry("Andy Buy",strategy.long, limit=close,comment="Andy Buy Here") if Exit_long_condition strategy.close("Andy Buy",comment="Andy Buy Out") // strategy.entry("Andy fandan Short",strategy.short, limit=close,comment="Andy 翻單 short Here") // strategy.close("Andy fandan Buy",comment="Andy short Out") if short_condition strategy.entry("Andy Short",strategy.short, limit=close,comment="Andy short Here") // strategy.exit("STR","Long",stop=longstoploss) if Exit_short_condition strategy.close("Andy Short",comment="Andy short Out") // strategy.entry("Andy fandan Buy",strategy.long, limit=close,comment="Andy 翻單 Buy Here") // strategy.close("Andy fandan Short",comment="Andy Buy Out") inLongTrade = strategy.position_size > 0 inLongTradecolor = #58D68D notInTrade = strategy.position_size == 0 inShortTrade = strategy.position_size < 0 // bgcolor(color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na) plotshape(close!=0,location = location.bottom,color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na) plotshape(long_condition, title='Buy', text='Andy Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny) plotshape(short_condition, title='Sell', text='Andy Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny) //atr > close *0.01* parameter // MONTHLY TABLE PERFORMANCE - Developed by @QuantNomad // ************************************************************************************************************************************************************************************************************************************************************************* show_performance = input.bool(true, 'Show Monthly Performance ?', group='Performance - credits: @QuantNomad') prec = input(2, 'Return Precision', group='Performance - credits: @QuantNomad') if show_performance new_month = month(time) != month(time[1]) new_year = year(time) != year(time[1]) eq = strategy.equity bar_pnl = eq / eq[1] - 1 cur_month_pnl = 0.0 cur_year_pnl = 0.0 // Current Monthly P&L cur_month_pnl := new_month ? 0.0 : (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1 // Current Yearly P&L cur_year_pnl := new_year ? 0.0 : (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1 // Arrays to store Yearly and Monthly P&Ls var month_pnl = array.new_float(0) var month_time = array.new_int(0) var year_pnl = array.new_float(0) var year_time = array.new_int(0) last_computed = false if (not na(cur_month_pnl[1]) and (new_month or barstate.islastconfirmedhistory)) if (last_computed[1]) array.pop(month_pnl) array.pop(month_time) array.push(month_pnl , cur_month_pnl[1]) array.push(month_time, time[1]) if (not na(cur_year_pnl[1]) and (new_year or barstate.islastconfirmedhistory)) if (last_computed[1]) array.pop(year_pnl) array.pop(year_time) array.push(year_pnl , cur_year_pnl[1]) array.push(year_time, time[1]) last_computed := barstate.islastconfirmedhistory ? true : nz(last_computed[1]) // Monthly P&L Table var monthly_table = table(na) if (barstate.islastconfirmedhistory) monthly_table := table.new(position.bottom_center, 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 = array.get(year_pnl, yi) > 0 ? color.new(color.teal, transp = 40) : color.new(color.gray, transp = 40) table.cell(monthly_table, 13, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100, prec)), bgcolor = y_color, text_color=color.new(color.white, 0)) 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 = array.get(month_pnl, mi) > 0 ? color.new(color.teal, transp = 40) : color.new(color.gray, transp = 40) table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100, prec)), bgcolor = m_color, text_color=color.new(color.white, 0))