Strategi ini berdasarkan Stochastic oscillator yang menilai keadaan pasaran yang terlalu banyak dibeli dan dijual, digabungkan dengan prinsip berhenti elastis untuk melakukan perdagangan jangka pendek. Berbuat lebih banyak apabila garpu emas di atas petunjuk Stochastic, kosong ketika garpu mati, sambil menetapkan berhenti elastis berdasarkan titik-titik pusat awal, sambil mengawal risiko dalam menjamin keuntungan.
Stochastic oscillator indicator contains %K line and%D line. Apabila %K line dari bawah ke atas menembusi %D line, buat golden fork signal, buat lebih; apabila %K line dari atas ke bawah menembusi %D line, buat dead fork signal, buat kosong. Strategi ini adalah berdasarkan Stochastic indicator untuk menilai golden fork dead fork signal masuk.
Khususnya, pada garpu emas Stochastic, jika nilai garis% K kurang dari 80 ((tidak overbought), anda akan melakukan overbought; pada garpu mati Stochastic, jika nilai garis% K lebih besar daripada 20 ((tidak oversold), anda akan melakukan overbought.
GoLong=crossover(k,d) and k<80
GoShort=crossunder(k,d) and k>20
Strategi ini menggunakan kaedah Elastic Stop dan menetapkan harga stop berdasarkan titik-titik pivot awal, dengan kod berikut:
piv_high = pivothigh(high,1,1)
piv_low = pivotlow(low,1,1)
stoploss_long=valuewhen(piv_low,piv_low,0)
stoploss_short=valuewhen(piv_high,piv_high,0)
Titik pusat mewakili rintangan sokongan yang penting, dan jika harga menembusi titik pusat, keluar dari kedudukan, menjadikan harga berhenti berlanjutan dengan perubahan titik pusat.
Di samping itu, harga hentian juga akan mengambil kira harga minimum dan harga tertinggi dalam tempoh semasa, untuk mengoptimumkan lagi kedudukan hentian, seperti yang ditunjukkan oleh kod berikut:
if GoLong
stoploss_long := low<pl ? low : pl
if GoShort
stoploss_short := high>ph ? high : ph
Menggunakan Stochastic untuk menilai keadaan pasaran yang terlalu terlampau dan tidak mahu mengejar kenaikan dan penurunan;
Menggunakan prinsip Elastik Stop yang boleh mengoptimumkan kedudukan Stop mengikut perubahan pasaran;
Mencapai penangguhan yang lebih berkesan dengan menggabungkan titik-titik pusat penembusan;
Pertimbangkan untuk mengoptimumkan hentian kerugian pada harga tertinggi dan terendah pada masa itu untuk memastikan hentian kerugian lebih tepat.
Indeks Stochastic Berisiko Menerima Isyarat Palsu
Risiko peningkatan kerugian akibat penembusan
Risiko kenaikan yuran urus niaga akibat transaksi yang kerap
Mengoptimumkan strategi hentikan kerugian, seperti menggunakan Chandelier Exit, hentikan bergerak, hentikan bergoyang
Mengoptimumkan syarat kemasukan untuk mengelakkan isyarat palsu Stochastic dalam kombinasi dengan petunjuk lain
Mengoptimumkan kaedah penangguhan, seperti menggunakan penangguhan bergerak, penangguhan bergoyang, dan lain-lain, untuk mencapai kadar penangguhan yang lebih tinggi
Menambah pengurusan kedudukan, seperti jumlah tetap per unit, peratusan pelaburan tetap, dan lain-lain untuk mengawal risiko unit
Tetapan parameter pengoptimuman, seperti bilangan K, D, kitaran halus, dan lain-lain, untuk menyesuaikan parameter untuk pasaran yang berbeza
Strategi ini menggunakan indikator Stochastic untuk menilai kemasukan ke dalam keadaan overbought dan oversold, dan menggunakan kaedah stop loss yang fleksibel untuk pengurusan risiko. Strategi ini mempunyai kelebihan seperti mengelakkan mengejar tinggi dan rendah, menghentikan kerugian, tetapi juga terdapat risiko isyarat palsu tertentu.
/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 2h
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/
// © Peter_O
//@version=4
//strategy(title="TradingView Alerts to MT4 MT5 example with cancelling pending orders", commission_type=strategy.commission.cash_per_order, commission_value=0.00003, overlay=true, default_qty_value=100000, initial_capital=1000)
// This script was created for educational purposes only.
// It is showing how to create pending orders and cancel them
// Together with syntax to send these events through TradingView alerts system
// All the way to brokers for execution
TakeProfitLevel=input(400)
// **** Entries logic **** {
periodK = 13 //input(13, title="K", minval=1)
periodD = 3 //input(3, title="D", minval=1)
smoothK = 4 //input(4, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)
// plot(k, title="%K", color=color.blue)
// plot(d, title="%D", color=color.orange)
// h0 = hline(80)
// h1 = hline(20)
// fill(h0, h1, color=color.purple, transp=75)
GoLong=crossover(k,d) and k<80
GoShort=crossunder(k,d) and k>20
// } End of entries logic
// **** Pivot-points and stop-loss logic **** {
piv_high = pivothigh(high,1,1)
piv_low = pivotlow(low,1,1)
var float stoploss_long=low
var float stoploss_short=high
pl=valuewhen(piv_low,piv_low,0)
ph=valuewhen(piv_high,piv_high,0)
if GoLong
stoploss_long := low<pl ? low : pl
if GoShort
stoploss_short := high>ph ? high : ph
plot(stoploss_long, color=color.lime, title="stoploss_long")
plot(stoploss_short, color=color.red, title="stoploss_short")
// } End of Pivot-points and stop-loss logic
CancelLong=crossunder(low,stoploss_long) and strategy.position_size[1]<=0 and strategy.position_size<=0
CancelShort=crossover(high,stoploss_short) and strategy.position_size[1]>=0 and strategy.position_size>=0
entry_distance=input(10, title="Entry distance for stop orders")
plotshape(CancelLong ? stoploss_long[1]-10*syminfo.mintick : na, location=location.absolute, style=shape.labelup, color=color.gray, textcolor=color.white, text="cancel\nlong", size=size.tiny)
plotshape(CancelShort ? stoploss_short[1]+10*syminfo.mintick : na, location=location.absolute, style=shape.labeldown, color=color.gray, textcolor=color.white, text="cancel\nshort", size=size.tiny)
strategy.entry("Long", strategy.long, when=GoLong, stop=close+entry_distance*syminfo.mintick)
strategy.exit("XLong", from_entry="Long", stop=stoploss_long, profit=TakeProfitLevel)
strategy.cancel("Long", when = CancelLong)
strategy.entry("Short", strategy.short, when=GoShort, stop=close-entry_distance*syminfo.mintick)
strategy.exit("XShort", from_entry="Short", stop=stoploss_short, profit=TakeProfitLevel)
strategy.cancel("Short", when = CancelShort)
if GoLong
alertsyntax_golong='long offset=' + tostring(entry_distance) + ' slprice=' + tostring(stoploss_long) + ' tp=' + tostring(TakeProfitLevel)
alert(message=alertsyntax_golong, freq=alert.freq_once_per_bar_close)
if GoShort
alertsyntax_goshort='short offset=' + tostring(-entry_distance) + ' slprice=' + tostring(stoploss_short) + ' tp=' + tostring(TakeProfitLevel)
alert(message=alertsyntax_goshort, freq=alert.freq_once_per_bar_close)
if CancelLong
alertsyntax_cancellong='cancel long'
alert(message=alertsyntax_cancellong, freq=alert.freq_once_per_bar_close)
if CancelShort
alertsyntax_cancelshort='cancel short'
alert(message=alertsyntax_cancelshort, freq=alert.freq_once_per_bar_close)