"Strategi EMA Berganda yang Ajaib" dari YouTube

Penulis:Mimpi kecil, Dicipta: 2022-10-09 15:56:22, Dikemas kini: 2023-09-15 20:50:38

img

"Strategi EMA Berganda yang Ajaib" dari YouTube

Dalam edisi ini, kami akan membincangkan "strategi EMA berpusat dua yang ajaib" yang berasal dari YouTube, yang dikenali sebagai strategi pembunuh pasaran saham dan mata wang kripto. Saya melihat video dan mengetahui bahawa strategi ini adalah strategi bahasa pinus untuk trading view, menggunakan 2 indikator trading view.

Indikator yang digunakan dalam strategi

1 EMA Indikator

Untuk kemudahan reka bentuk, kita tidak menggunakan Eksponensial Purata Bergerak yang disenaraikan dalam video ini. Kami menggunakan ta.ema terbina dalam trading view sebagai gantinya.

2. Indikator VuManChu Swing Free

Ini adalah satu indikator dalam Trading View, dan kita perlu pergi ke Trading View dan memuat turun kod sumbernya.

img

Kod VuManChu Swing Free:

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// Credits to the original Script - Range Filter DonovanWall https://www.tradingview.com/script/lut7sBgG-Range-Filter-DW/
// This version is the old version of the Range Filter with less settings to tinker with

//@version=4
study(title="Range Filter - B&S Signals", shorttitle="RF - B&S Signals", overlay=true)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Functions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Size Function
rng_size(x, qty, n)=> 
//    AC       = Cond_EMA(abs(x - x[1]), 1, n)
    wper      = (n*2) - 1
    avrng     = ema(abs(x - x[1]), n)
    AC = ema(avrng, wper)*qty
    rng_size = AC

//Range Filter Function
rng_filt(x, rng_, n)=>
    r          = rng_
    var rfilt  = array.new_float(2, x)
    array.set(rfilt, 1, array.get(rfilt, 0))
    if x - r > array.get(rfilt, 1)
        array.set(rfilt, 0, x - r)
    if x + r < array.get(rfilt, 1)
        array.set(rfilt, 0, x + r)
    rng_filt1 = array.get(rfilt, 0)
    
    hi_band   = rng_filt1 + r
    lo_band   = rng_filt1 - r
    rng_filt  = rng_filt1
    [hi_band, lo_band, rng_filt]
 
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Inputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Source
rng_src = input(defval=close, type=input.source, title="Swing Source")

//Range Period
rng_per = input(defval=20, minval=1, title="Swing Period")

//Range Size Inputs
rng_qty   = input(defval=3.5, minval=0.0000001, title="Swing Multiplier")

//Bar Colors
use_barcolor = input(defval=false, type=input.bool, title="Bar Colors On/Off")

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Definitions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Filter Values
[h_band, l_band, filt] = rng_filt(rng_src, rng_size(rng_src, rng_qty, rng_per), rng_per)

//Direction Conditions
var fdir = 0.0
fdir    := filt > filt[1] ? 1 : filt < filt[1] ? -1 : fdir
upward   = fdir==1 ? 1 : 0
downward = fdir==-1 ? 1 : 0

//Trading Condition
longCond = rng_src > filt and rng_src > rng_src[1] and upward > 0 or rng_src > filt and rng_src < rng_src[1] and upward > 0 
shortCond = rng_src < filt and rng_src < rng_src[1] and downward > 0 or rng_src < filt and rng_src > rng_src[1] and downward > 0

CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
longCondition = longCond and CondIni[1] == -1
shortCondition = shortCond and CondIni[1] == 1

//Colors
filt_color = upward ? #05ff9b : downward ? #ff0583 : #cccccc
bar_color  = upward and (rng_src > filt) ? (rng_src > rng_src[1] ? #05ff9b : #00b36b) :
             downward and (rng_src < filt) ? (rng_src < rng_src[1] ? #ff0583 : #b8005d) : #cccccc

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Outputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Filter Plot
filt_plot = plot(filt, color=filt_color, transp=67, linewidth=3, title="Filter")

//Band Plots
h_band_plot = plot(h_band, color=color.new(#05ff9b, 100), title="High Band")
l_band_plot = plot(l_band, color=color.new(#ff0583, 100), title="Low Band")

//Band Fills
fill(h_band_plot, filt_plot, color=color.new(#00b36b, 92), title="High Band Fill")
fill(l_band_plot, filt_plot, color=color.new(#b8005d, 92), title="Low Band Fill")

//Bar Color
barcolor(use_barcolor ? bar_color : na)

//Plot Buy and Sell Labels
plotshape(longCondition, title = "Buy Signal", text ="BUY", textcolor = color.white, style=shape.labelup, size = size.normal, location=location.belowbar, color = color.new(color.green, 0))
plotshape(shortCondition, title = "Sell Signal", text ="SELL", textcolor = color.white, style=shape.labeldown, size = size.normal, location=location.abovebar, color = color.new(color.red, 0))

//Alerts
alertcondition(longCondition, title="Buy Alert", message = "BUY")
alertcondition(shortCondition, title="Sell Alert", message = "SELL")

Logik Strategi

Indikator EMA: Strategi menggunakan dua garis EMA, satu garis cepat (parameter kitaran kecil) dan satu garis perlahan (parameter kitaran besar).

  • Peringkat berbilang Laluan pantas di atas jalur perlahan.

  • Barisan kosong Di bawah talian perlahan terdapat talian pantas.

Indikator VuManChu Swing Free: Indikator VuManChu Swing Free digunakan untuk menghantar isyarat, kemudian digabungkan dengan syarat lain untuk menentukan sama ada pesanan akan ditukar. Dari sumber isyarat VuManChu Swing Free, anda dapat melihat: pembolehubah LongCondition mewakili isyarat beli, pembolehubah ShortCondition mewakili isyarat jual.

Sekarang, mari kita bincangkan syarat-syarat pencetus isyarat dagangan yang khusus untuk strategi:

1. Peraturan untuk masuk berbilang tajuk: Harga penutupan garis K akan berada di atas garis EMA yang cepat, dua garis EMA rata akan menunjukkan pelbagai kedudukan (garis cepat di atas garis perlahan), dan penunjuk VuManChu Swing Free akan menunjukkan isyarat beli (kondisi panjang adalah benar). Tiga syarat berlaku, garis K adalah garis K utama untuk melakukan banyak kemasukan, dan harga penutupan garis K adalah kedudukan kemasukan.

2, Peraturan untuk masuk dengan kepala kosong (berlawanan dengan kepala berbilang): Harga penutupan garis K negatif harus berada di bawah garis EMA cepat, dua garis EMA rata harus menunjukkan kedudukan kosong (garis cepat di bawah garis perlahan), dan penunjuk VuManChu Swing Free harus menunjukkan isyarat jual (garis pendek adalah benar). Tiga syarat berlaku, harga penutupan garis K ini adalah untuk membuat kedudukan masuk kosong.

Logik dagangan adalah sangat mudah, kerana video yang keluar tidak menunjukkan secara khusus mengenai stop loss, penulis bebas bermain di sini menggunakan kaedah stop loss yang lebih sederhana, menggunakan stop loss titik tetap, menjejaki stop loss.

Reka bentuk kod

Kod untuk VuManChu Swing Free indicator, yang kami masukkan secara langsung ke dalam kod strategi kami.

img

Kemudian, kami menulis satu kod dalam bahasa Pine untuk mewujudkan fungsi transaksi:

// extend
fastEmaPeriod = input(50, "fastEmaPeriod")         // 快线周期
slowEmaPeriod = input(200, "slowEmaPeriod")        // 慢线周期
loss = input(30, "loss")                           // 止损点数
trailPoints = input(30, "trailPoints")             // 移动止盈触发点数
trailOffset = input(30, "trailOffset")             // 移动止盈偏移量(点数)
amount = input(1, "amount")                        // 下单量

emaFast = ta.ema(close, fastEmaPeriod)             // 计算快线EMA
emaSlow = ta.ema(close, slowEmaPeriod)             // 计算慢线EMA

buyCondition = longCondition and emaFast > emaSlow and close > open and close > emaFast         // 做多入场条件
sellCondition = shortCondition and emaFast < emaSlow and close < open and close < emaFast       // 做空入场条件

if buyCondition and strategy.position_size == 0
    strategy.entry("long", strategy.long, amount)
    strategy.exit("exit_long", "long", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)
if sellCondition and strategy.position_size == 0
    strategy.entry("short", strategy.short, amount)
    strategy.exit("exit_short", "short", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)

A.可以看到,当buyCondition为真时即:

1, long Condition adalah benar (VuManChu Swing Free menunjukkan lebih banyak isyarat). 2,emaFast > emaSlow (EMA pelbagai tajuk) ≠ 3, close > open (menunjukkan bahawa BAR semasa adalah garis matahari), close > emaFast (menunjukkan bahawa harga penutupan di atas garis cepat EMA);

Jika anda mempunyai lebih daripada tiga syarat, anda akan berjaya.

B.当sellCondition为真时,则做空的三个条件成立(这里不再赘述)。

Kemudian, jika isyarat penghakiman syarat dipicu, gunakan fungsi strategi.entry untuk masuk dan buka dagangan, sambil menetapkan strategi.exit untuk menghentikan kerugian, mengikuti penangguhan.

Kod penuh

/*backtest
start: 2022-01-01 00:00:00
end: 2022-10-08 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
args: [["ZPrecision",0,358374]]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// Credits to the original Script - Range Filter DonovanWall https://www.tradingview.com/script/lut7sBgG-Range-Filter-DW/
// This version is the old version of the Range Filter with less settings to tinker with

//@version=4
study(title="Range Filter - B&S Signals", shorttitle="RF - B&S Signals", overlay=true)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Functions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Size Function
rng_size(x, qty, n)=> 
//    AC       = Cond_EMA(abs(x - x[1]), 1, n)
    wper      = (n*2) - 1
    avrng     = ema(abs(x - x[1]), n)
    AC = ema(avrng, wper)*qty
    rng_size = AC

//Range Filter Function
rng_filt(x, rng_, n)=>
    r          = rng_
    var rfilt  = array.new_float(2, x)
    array.set(rfilt, 1, array.get(rfilt, 0))
    if x - r > array.get(rfilt, 1)
        array.set(rfilt, 0, x - r)
    if x + r < array.get(rfilt, 1)
        array.set(rfilt, 0, x + r)
    rng_filt1 = array.get(rfilt, 0)
    
    hi_band   = rng_filt1 + r
    lo_band   = rng_filt1 - r
    rng_filt  = rng_filt1
    [hi_band, lo_band, rng_filt]
 
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Inputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Source
rng_src = input(defval=close, type=input.source, title="Swing Source")

//Range Period
rng_per = input(defval=20, minval=1, title="Swing Period")

//Range Size Inputs
rng_qty   = input(defval=3.5, minval=0.0000001, title="Swing Multiplier")

//Bar Colors
use_barcolor = input(defval=false, type=input.bool, title="Bar Colors On/Off")

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Definitions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Filter Values
[h_band, l_band, filt] = rng_filt(rng_src, rng_size(rng_src, rng_qty, rng_per), rng_per)

//Direction Conditions
var fdir = 0.0
fdir    := filt > filt[1] ? 1 : filt < filt[1] ? -1 : fdir
upward   = fdir==1 ? 1 : 0
downward = fdir==-1 ? 1 : 0

//Trading Condition
longCond = rng_src > filt and rng_src > rng_src[1] and upward > 0 or rng_src > filt and rng_src < rng_src[1] and upward > 0 
shortCond = rng_src < filt and rng_src < rng_src[1] and downward > 0 or rng_src < filt and rng_src > rng_src[1] and downward > 0

CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
longCondition = longCond and CondIni[1] == -1
shortCondition = shortCond and CondIni[1] == 1

//Colors
filt_color = upward ? #05ff9b : downward ? #ff0583 : #cccccc
bar_color  = upward and (rng_src > filt) ? (rng_src > rng_src[1] ? #05ff9b : #00b36b) :
             downward and (rng_src < filt) ? (rng_src < rng_src[1] ? #ff0583 : #b8005d) : #cccccc

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Outputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Filter Plot
filt_plot = plot(filt, color=filt_color, transp=67, linewidth=3, title="Filter")

//Band Plots
h_band_plot = plot(h_band, color=color.new(#05ff9b, 100), title="High Band")
l_band_plot = plot(l_band, color=color.new(#ff0583, 100), title="Low Band")

//Band Fills
fill(h_band_plot, filt_plot, color=color.new(#00b36b, 92), title="High Band Fill")
fill(l_band_plot, filt_plot, color=color.new(#b8005d, 92), title="Low Band Fill")

//Bar Color
barcolor(use_barcolor ? bar_color : na)

//Plot Buy and Sell Labels
plotshape(longCondition, title = "Buy Signal", text ="BUY", textcolor = color.white, style=shape.labelup, size = size.normal, location=location.belowbar, color = color.new(color.green, 0))
plotshape(shortCondition, title = "Sell Signal", text ="SELL", textcolor = color.white, style=shape.labeldown, size = size.normal, location=location.abovebar, color = color.new(color.red, 0))

//Alerts
alertcondition(longCondition, title="Buy Alert", message = "BUY")
alertcondition(shortCondition, title="Sell Alert", message = "SELL")


// extend
fastEmaPeriod = input(50, "fastEmaPeriod")
slowEmaPeriod = input(200, "slowEmaPeriod")
loss = input(30, "loss")
trailPoints = input(30, "trailPoints")
trailOffset = input(30, "trailOffset")
amount = input(1, "amount")

emaFast = ta.ema(close, fastEmaPeriod)
emaSlow = ta.ema(close, slowEmaPeriod)

buyCondition = longCondition and emaFast > emaSlow and close > open and close > emaFast
sellCondition = shortCondition and emaFast < emaSlow and close < open and close < emaFast

if buyCondition and strategy.position_size == 0
    strategy.entry("long", strategy.long, amount)
    strategy.exit("exit_long", "long", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)
if sellCondition and strategy.position_size == 0
    strategy.entry("short", strategy.short, amount)
    strategy.exit("exit_short", "short", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)

Ujian semula

Jangkaan masa ujian penyesuaian dipilih dari Januari 2022 hingga Oktober 2022, kitaran K adalah 15 minit, menggunakan model penutupan harga penyesuaian. Pasar memilih kontrak kekal ETH_USDT Binance. Parameter ditetapkan seperti yang dinyatakan dalam video keluar, kitaran cepat 50 kitaran, kitaran perlahan 200, parameter lain tidak berubah secara lalai.

img

img

Hasil Ujian Ulang Mahar Mahar Mahar Mahar Mahar, beberapa kali Ujian Ulang nampaknya menghalang parameter ini untuk memberi kesan kepada hasil Ujian Ulang. Saya merasakan bahawa aspek ini juga memerlukan pengoptimuman reka bentuk.

Kami akan menukar kontrak kekal BTC_USDT untuk mencuba:

img

Hasilnya dalam BTC juga membengkak:

img

img

Alamat strategi:https://www.fmz.com/strategy/385745

Nampaknya kaedah dagangan ini adalah lebih boleh dipercayai untuk mengambil tendensi, dan boleh terus mengoptimumkan reka bentuk berdasarkan idea ini. Dalam artikel ini, kita bukan sahaja memahami idea strategi dua garis lurus, tetapi juga memahami bagaimana menggunakan strategi minyak (youtube) untuk memproses dan belajar. OK, kod strategi di atas hanyalah penyesuaian kecil yang saya buang, dan hasil uji semula tidak mewakili kesan sebenar yang spesifik, untuk reka bentuk kod strategi, hanya untuk rujukan. Terima kasih atas sokongan anda, selamat tinggal!


Berkaitan

Lebih lanjut

pengembaraanAdakah strategi ini juga boleh digunakan untuk parameter yang sama?

hyc1743Mimpi besar, mengapa ikon menunjukkan isyarat tetapi papan tulis tidak dibuka? /upload/asset/23cc031609caa7a896da3.jpg /upload/asset/23cae1c5d5b26ec763ea6.jpg /upload/asset/23d49ff4aec3475793e5e.jpg

Awan ringanMenariknya, beliau mencadangkan untuk mencari dua atau tiga strategi yang lebih representatif dari paip minyak, yang lebih sukar untuk ditulis semula, fungsi, parameter, dan kaedah pengoperasian yang lebih banyak untuk membuat beberapa tutorial bertulis, seperti tutorial yang serupa dengan line.delete. Saya kini telah belajar untuk mengubah beberapa strategi gabungan yang tidak terlalu rumit dengan strategi bergaris lurus ini. Saya telah mengubah lebih daripada sedozen strategi gabungan, salah satu atau dua daripadanya adalah 21 tahun 22 tahun data kembali hasil yang sangat baik, dan telah diuji pada cakera sebenar, tetapi mengalami operasi parameter fungsi yang rumit seperti tip: line: 62 Could not find function or function reference 'line.delete', namun dalam dokumen FMZ PINE Script tidak dapat mencari penjelasan yang berkaitan dengan line.delete, penerangan penggunaan, lingkaran, jadi saya berharap anak-anak dapat mencari sedikit strategi yang rumit untuk menulis, tentu saja ulasan juga lebih baik. Terima kasih banyak.

HaykoMasa Pilihan 21 April - 10 Oktober, BTC lebih teruk

yingjunSaya tidak faham apa yang dimaksudkan dengan stop loss ini. bolehkah anda jelaskan? contohnya, 30 secara lalai bermaksud BTC turun 30 inci? berhenti kerugian?

Awan ringanSaya ingin bertanya kepada anda, bolehkah PINE menulis cara yang agak rumit untuk menghentikan kencing? Jika PINE boleh disatukan dengan JS, contohnya menulis petunjuk dengan PINE, JS menulis bahagian urus niaga akan lebih mudah.

yingjunRekod sebenar akan berlaku pada tahun 2022

FmzeroKaedah Simpan Mencadangkan Permainan Ini REST: sql: no rows in result set

FmzeroMimpi yang penuh dengan kegelisahan

Mimpi kecilHahaa, strategi trend itu sendiri adalah, "Ya, jika pasaran masa depan mempunyai trend, jika tidak, anda akan melakukan strategi kejutan".

Mimpi kecilTidak sopan.

hyc1743Terima kasih kepada Dream Big.

Mimpi kecilHalo, ini kerana tanda BUY yang ditunjukkan pada carta hanya menunjukkan isyarat petunjuk dalam artikel, dan di belakang terdapat garis rata. `` //Plot Beli dan Jual Label plotshape ((longCondition, title = "Buy Signal", text ="BUY", textcolor = color.white, style=shape.labelup, size = size.normal, location=location.belowbar, color = color.new(color.green, 0)) plotshape ((shortCondition, title = "Sell Signal", text ="SELL", textcolor = color.white, style=shape.labeldown, size = size.normal, location=location.abovebar, color = color.new(color.red, 0)) `` plotshape ((longCondition, title = "Buy Signal", text ="BUY Gambar menunjukkan bahawa hanya syarat-syarat longCondition yang dipenuhi. Syarat di bawah adalah untuk bahagian ini: `` if buyKondisi dan strategi.position_size == 0 strategy.entry (("panjang", strategy.long, jumlah) strategy.exit (("exit_long", "long", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset) if sellKondisi dan strategi.position_size == 0 Strategy.entry (("short", strategy.short, amount) strategy.exit (("exit_short", "short", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset) ``

Awan ringanTidak hairanlah, saya faham, terima kasih.

Mimpi kecilline objek ini tidak disokong pada FMZ buat sementara, jadi beberapa garis mungkin tidak dapat diubah. Beberapa dasar menggunakan objek ini untuk mengambil bahagian dalam pengiraan.

Mimpi kecilIni mungkin disebabkan oleh masa yang terlalu lama dan data yang terlalu banyak.

Mimpi kecilTutorial bahasa Pine mempunyai bab dengan penerangan, anda boleh lihat di sini: https://www.fmz.com/bbs-topic/9390#%E5%B8%A6%E8%B7%F%E8%B8%AA%E6%AD%A2%E6%8D%9F%E6%AD%A2%E7%9B%88%E7%9A%84%E8%B6%85%E7%BA%A7%E8%B6%8B%E5%8A%BF%E7%AD%96%E7%95%A5

Awan ringanOh, saya tetapkan dalam setahun atau 10 bulan, pada dasarnya saya boleh melakukannya, dan selepas setahun, saya akan mempunyai petua ini atau banyak lagi.

Mimpi kecilTidak ada batasan, pelaporan ini sepatutnya terlalu besar untuk jangka masa pengulangan.

Awan ringanBaiklah, terima kasih, dan bolehkah anda beritahu saya jika terdapat batasan masa untuk mengulas semula PINE? Saya memilih 1 Januari 2021 hingga 11 Oktober 2022, yang menunjukkan kesilapan: RunError: abort(undefined) at Error at StackTrace (eval at self.onmessage (https://www.fmz.com/scripts/worker_detours.393054f7.js:1:147), :1:2096171) at stackTrace (eval at self.onmessage (https://www.fmz.com/scripts/worker_detours.393054f7.js:1:147), :1:2096345) at abort (eval at self.onmessage (https://www.fmz.com/scripts/worker_detours.393054f7.js:147), :192xx:1408) at _aborttime at self.message (https://www.fmz.com/scripts/functionanonymous_detours.js:147:147:147),

Mimpi kecilPine sepatutnya dapat merancang penyekatan yang lebih kompleks, yang belum ada untuk sementara waktu.

Mimpi kecilAnda boleh menghantar screenshot untuk melihat laporan kesalahan tertentu.

Mimpi kecilOh, maaf, alamat dasar yang salah, telah diubah.