Peringatan TradingView untuk MT4 MT5 + pembolehubah dinamik

Penulis:ChaoZhang, Tarikh: 2022-05-24 16:59:00
Tag:SMAMT4MT5

Secara tidak sengaja, saya berkongsi strategi Forex yang menguntungkan sumber terbuka. Secara tidak sengaja, kerana ini bertujuan untuk menjadi bahan pendidikan semata-mata. Beberapa hari yang lalu TradingView mengeluarkan ciri yang sangat kuat nilai dinamik dari PineScript kini dibenarkan untuk lulus dalam pemberitahuan. Dan terima kasih kepada TradingConnector, mereka boleh dieksekusi dengan serta-merta di MT4 atau MT5 platform mana-mana broker di dunia. Jadi ya - TradingConnector berfungsi dengan indeks dan komoditi juga.

Logik strategi EURUSD 6h ini sangat mudah - ia berdasarkan persilangan Stochastic dengan stop-loss ditetapkan di bawah titik pusingan terkini. Menetapkan stop-loss dengan ketepatan pembedahan adalah mungkin dengan tepat berkat pelunasan nilai dinamik dalam amaran. TradingConnector juga telah dinaik taraf untuk memanfaatkan nilai dinamik ini dan kini membolehkan pelaksanaan perdagangan dengan stop-loss, mengambil keuntungan, serta perintah berhenti dan had yang dihitung sebelumnya.

Satu lagi ciri baru TradingConnector, adalah menutup kedudukan hanya sebahagiannya - dengan syarat broker membenarkannya, tentu saja. Kedudukan perlu mempunyai trade_id yang ditentukan pada kemasukan, dirujuk dalam amaran lanjut dengan penutupan separa. Spesifikasi terperinci sintaks amaran dan fungsi boleh didapati di laman web TradingConnector. Cara memasukkan pembolehubah dinamik dalam mesej amaran dapat dilihat di hujung skrip dalam panggilan alertcondition (().

Strategi ini juga mengambil kira komisen.

Slippage sengaja ditinggalkan pada 0. Oleh kerana masa penghantaran TradingConnector kurang dari 1 saat, slippage hampir tidak wujud. Ini dapat dicapai terutamanya jika anda menggunakan pelayan VPS, yang dihoskan di pusat data yang sama dengan pelayan broker anda. Saya menggunakan persediaan sedemikian, ia boleh dilakukan. Slippage kecil dan penyebaran sudah termasuk dalam nilai komisen.

Strategi ini adalah NON-REPAINTING dan menggunakan NO TRAILING-STOP atau ciri lain yang diketahui rosak dalam backtester TradingView. Adakah ia menjadikan strategi ini tidak boleh ditembak dan 100% dijamin berjaya? Sial tidak! Ingat peraturan no.1 backtesting - tidak kira seberapa menguntungkan dan cantik skrip, ia hanya memberitahu tentang masa lalu. Tidak ada jaminan sama strategi akan mendapat hasil yang sama di masa depan.

Untuk mengubah skrip ini ke dalam kajian supaya amaran boleh dihasilkan, lakukan 2 perkara:

  1. komen garis strategi di awal dan tanpa komen garis kajian
  2. baris komen 54-59 dan baris komen 62-65. Kemudian tambah skrip ke carta dan sesuaikan amaran.

Skrip ini dibuat untuk tujuan pendidikan sahaja.

Sudah tentu ini bukan nasihat kewangan. sesiapa yang menggunakan skrip ini atau mana-mana bahagian dalam apa-apa cara, mesti sedar risiko tinggi yang berkaitan dengan perdagangan.

Terima kasih @LucF dan @a.tesla2018 kerana membantu saya dengan pembetulan kod :)

Ujian belakang

img


/*backtest
start: 2022-04-23 00:00:00
end: 2022-05-22 23:59:00
period: 15m
basePeriod: 5m
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/
// © Peter_O

//@version=5
strategy(title='TradingView Alerts to MT4 MT5 Strategy example', commission_type=strategy.commission.cash_per_order, commission_value=0.00003, overlay=false, default_qty_value=100000, initial_capital=1000)
//study(title="TradingView Alerts to MT4 MT5 Strategy example")  //uncomment this line and comment previous one to make it a study producing alerts
//
// This script was created for educational purposes only.
// It is showing how to use dynamic variables in TradingView alerts.
// And how to execute them in Forex, indices and commodities markets

TakeProfitDistance = input(400)
TakePartialProfitDistance = input(150)

// **** Entries logic **** {
periodK = input.int(13, title='K', minval=1)
periodD = input.int(3, title='D', minval=1)
smoothK = input.int(4, title='Smooth', minval=1)
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)
plot(k, title='%K', color=color.new(color.blue, 0))
plot(d, title='%D', color=color.new(color.orange, 0))
h0 = hline(80)
h1 = hline(20)
fill(h0, h1, color=color.new(color.purple, 75))

GoLong = ta.crossover(k, d) and k < 80
GoShort = ta.crossunder(k, d) and k > 20
// } End of entries logic

// **** Pivot-points and stop-loss logic **** {
piv_high = ta.pivothigh(high, 1, 1)
piv_low = ta.pivotlow(low, 1, 1)
var float stoploss_long = low
var float stoploss_short = high

pl = ta.valuewhen(piv_low, piv_low, 0)
ph = ta.valuewhen(piv_high, piv_high, 0)

if GoLong
    stoploss_long := low < pl ? low : pl
    stoploss_long
if GoShort
    stoploss_short := high > ph ? high : ph
    stoploss_short
// } End of Pivot-points and stop-loss logic

strategy.entry('Long', strategy.long, when=GoLong)
strategy.exit('XPartLong', from_entry='Long', qty_percent=50, profit=TakePartialProfitDistance)
strategy.exit('XLong', from_entry='Long', stop=stoploss_long, profit=TakeProfitDistance)
strategy.entry('Short', strategy.short, when=GoShort)
strategy.exit('XPartShort', from_entry='Short', qty_percent=50, profit=TakePartialProfitDistance)
strategy.exit('XShort', from_entry='Short', stop=stoploss_short, profit=TakeProfitDistance)

if GoLong
    alertsyntax_golong = 'long slprice=' + str.tostring(stoploss_long) + ' tp1=' + str.tostring(TakePartialProfitDistance) + ' part1=0.5 tp=' + str.tostring(TakeProfitDistance)
    alert(message=alertsyntax_golong, freq=alert.freq_once_per_bar_close)
if GoShort
    alertsyntax_goshort = 'short slprice=' + str.tostring(stoploss_short) + ' tp1=' + str.tostring(TakePartialProfitDistance) + ' part1=0.5 tp=' + str.tostring(TakeProfitDistance)
    alert(message=alertsyntax_goshort, freq=alert.freq_once_per_bar_close)


if GoLong
    strategy.entry("Enter Long", strategy.long)
else if GoShort
    strategy.entry("Enter Short", strategy.short)

Berkaitan

Lebih lanjut