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.
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.
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")
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.
Kod untuk VuManChu Swing Free indicator, yang kami masukkan secara langsung ke dalam kod strategi kami.
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.
/*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)
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.
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:
Hasilnya dalam BTC juga membengkak:
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!
Anak lembu aisMimpi, sekarang mengulas semula, tidak akan berdagang apa yang berlaku selepas 3 Januari 2022 dan tidak akan membuat kesalahan.
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
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
Anak lembu aisYa /upload/asset/101a198b65be7e8fe8487.png
Pencipta Kuantiti - Impian KecilAdakah ini strategi yang anda maksudkan?
Pencipta Kuantiti - Impian KecilHahaa, strategi trend itu sendiri adalah, "Ya, jika pasaran masa depan mempunyai trend, jika tidak, anda akan melakukan strategi kejutan".
Pencipta Kuantiti - Impian KecilTidak sopan.
hyc1743Terima kasih kepada Dream Big.
Pencipta Kuantiti - Impian 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.
Pencipta Kuantiti - Impian 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.
Pencipta Kuantiti - Impian KecilIni mungkin disebabkan oleh masa yang terlalu lama dan data yang terlalu banyak.
Pencipta Kuantiti - Impian 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.
Pencipta Kuantiti - Impian 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),
Pencipta Kuantiti - Impian KecilPine sepatutnya dapat merancang penyekatan yang lebih kompleks, yang belum ada untuk sementara waktu.
Pencipta Kuantiti - Impian KecilAnda boleh menghantar screenshot untuk melihat laporan kesalahan tertentu.
Pencipta Kuantiti - Impian KecilOh, maaf, alamat dasar yang salah, telah diubah.