Perdagangan otomatis berdasarkan strategi perdagangan STOCH


Tanggal Pembuatan: 2023-09-28 11:38:44 Akhirnya memodifikasi: 2023-09-28 11:38:44
menyalin: 0 Jumlah klik: 702
1
fokus pada
1617
Pengikut

Strategi ini dirancang sebagai sistem perdagangan otomatis sederhana berdasarkan indikator STOCH. Strategi ini cocok untuk pasar seperti forex, indeks saham, komoditas, dan juga dapat diperluas ke pasar saham dan cryptocurrency.

Tinjauan Strategi

Strategi ini menggunakan indikator STOCH untuk mengidentifikasi status overbought oversold, digabungkan dengan titik PIVOT untuk mengatur posisi stop loss, untuk melakukan pelacakan tren. Bila indikator STOCH menunjukkan overbought oversold, lakukan lebih banyak operasi shorting; titik stop loss terletak di dekat titik PIVOT hari itu, dapat mengontrol risiko secara efektif; titik stop yang sebagian diatur untuk menutup sebagian posisi setelah keuntungan tertentu.

Prinsip Strategi

Strategi ini menggunakan garis cepat% K dan garis lambat% D dari indikator STOCH untuk melakukan overbought dan overbought. Logika spesifiknya adalah, ketika% K dari bawah ke atas menerobos% D, melakukan overbought; ketika% K dari atas ke bawah menerobos% D, melakukan overbought.

Untuk mengontrol risiko, posisi long melakukan stop loss di dekat titik PIVOT terendah pada hari itu, dan posisi kosong melakukan stop loss di dekat titik PIVOT tertinggi pada hari itu, untuk mengunci risiko secara efektif.

Bagian dari logika stop-loss adalah untuk menutup 50% dari posisi pada tingkat keuntungan tertentu setelah membuka posisi. Dengan demikian, Anda dapat mengoptimalkan efisiensi penggunaan dana Anda.

Secara keseluruhan, strategi ini adalah titik tepat ketika Capture overbought oversold status; Kontrol aspek pengendalian risiko; Mengoptimalkan efisiensi penggunaan dana. Dapat dikatakan sebagai kombinasi organik dari Capture, Control dan Optimize.

Keunggulan Strategis

  • Dengan menggunakan indikator STOCH dapat secara efektif menangkap fenomena overbought dan oversold, ditambah dengan titik PIVOT dapat mengontrol risiko, sehingga dapat mengendalikan risiko perdagangan sepenuhnya.

  • Mekanisme penutupan sebagian dapat mengoptimalkan efisiensi penggunaan dana. Menggunakan metode penutupan sebagian, memastikan sebagian dari keuntungan, tetapi tetap mempertahankan ruang untuk operasi yang menguntungkan selanjutnya.

  • Parameter strategi dapat disesuaikan, dan pedagang dapat menyesuaikan parameter sesuai dengan preferensi pasar dan risiko, yang memungkinkan penggunaan strategi yang fleksibel.

  • Logika strategi sangat sederhana dan jelas, mudah dimengerti, cocok untuk digunakan oleh berbagai pedagang. Kode intuitif dan mudah dibaca, mudah dimodifikasi dan dipertahankan.

Risiko Strategis

  • Sebagai strategi trend-following, mudah terjebak dalam situasi yang bergejolak dan tidak dapat menghasilkan keuntungan.

  • Indeks STOCH dapat menghasilkan sinyal yang salah, yang memicu perilaku perdagangan yang tidak perlu.

  • Stop loss dekat dengan titik pivot hari, mungkin terlalu dekat setelah breakout setup, harus ditarik tepat stop loss jarak.

  • Beberapa parameter strategi, seperti panjang periode, perlu disesuaikan dengan pasar yang berbeda, yang dapat mempengaruhi kinerja strategi.

  • Perhitungan hanya berdasarkan data historis dan tidak menjamin kinerja di masa depan.

  • Sistem perdagangan otomatis harus memastikan stabilitas server, untuk menghindari transaksi yang tidak normal karena masalah koneksi.

Arah optimasi strategi

  • Anda dapat memasukkan filter tren untuk menghindari perdagangan buta ketika tren tidak jelas. Misalnya, Anda dapat menambahkan indikator MA untuk menentukan arah tren.

  • Dapat ditambahkan untuk pemantauan volume transaksi, seperti pelepasan, pelepasan kosong, dll, untuk memfilter terobosan palsu.

  • Parameter dapat disesuaikan sesuai dengan varietas dan periode yang berbeda untuk mengoptimalkan kinerja strategi. Misalnya, menyesuaikan parameter STOCH.

  • Pertimbangkan untuk menambahkan algoritma pembelajaran mesin, menggunakan model pelatihan data besar, dan mengoptimalkan parameter secara otomatis.

  • Anda dapat mengatur rasio kerugian untuk mengontrol risiko dan menghindari kerugian besar.

  • Anda dapat menambahkan lebih banyak kondisi untuk memfilter waktu masuk dan meningkatkan strategi kemenangan.

Meringkaskan

Strategi ini secara keseluruhan menggunakan metode pelacakan tren yang relatif sederhana dan intuitif, mengidentifikasi kondisi overbought dan oversold dengan indikator STOCH, dan menambahkan stop loss PIVOT untuk mengontrol risiko, sambil memperkenalkan sebagian stop loss untuk mengoptimalkan efisiensi dana. Didesain dari tiga tingkat Capture, Control, dan Optimize, membentuk sistem perdagangan otomatis yang relatif lengkap.

Kode Sumber Strategi
/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
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 - Forex, indices, commodities, stocks, crypto", commission_type=strategy.commission.cash_per_contract, commission_value=0.00003, overlay=false, default_qty_value=20000, initial_capital=1000)
//
// This script was created for educational purposes only.
// It is showing how to use Alerts-Straight-From-Strategies and
// dynamic variables in TradingView alerts.
// And how to auto-execute them in Forex, indices, commodities markets
// 
// (This method will also work with stocks and crypto - anything your 
// broker is offering via their MT4/MT5 platform).
 
TakeProfitLevel=input(400)
TakePartialProfitLevel=input(150)

// **** Entries logic **** {
periodK = input(13, title="K", minval=1)
periodD = input(3, title="D", minval=1)
smoothK = 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 and year>2009
GoShort=crossunder(k,d) and k>20 and year>2009

AlertTest=open>close or open<close or open==close
// } 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
// } End of Pivot-points and stop-loss logic

// **** Trade counter and partial closing mechanism **** {
var int trade_id=0
if GoLong or GoShort
    trade_id:=trade_id+1

TakePartialProfitLong = barssince(GoLong)<barssince(GoShort) and crossover(high,(valuewhen(GoLong,close,0)+TakePartialProfitLevel*syminfo.mintick))
TakePartialProfitShort = barssince(GoLong)>barssince(GoShort) and crossunder(low,(valuewhen(GoShort,close,0)-TakePartialProfitLevel*syminfo.mintick))
// } End of Trade counter and partial closing mechanism

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

if GoLong
    alertsyntax_golong='long slprice=' + tostring(stoploss_long) + ' tradeid=' + tostring(trade_id) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_golong, freq=alert.freq_once_per_bar_close)
if GoShort
    alertsyntax_goshort='short slprice=' + tostring(stoploss_short) + ' tradeid=' + tostring(trade_id) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_goshort, freq=alert.freq_once_per_bar_close)
if TakePartialProfitLong
    alertsyntax_closepartlong='closepart tradeid=' + tostring(trade_id) + ' part=0.5'
    alert(message=alertsyntax_closepartlong, freq=alert.freq_once_per_bar_close)
if TakePartialProfitShort
    alertsyntax_closepartshort='closepart tradeid=' + tostring(trade_id) + ' part=0.5'
    alert(message=alertsyntax_closepartshort, freq=alert.freq_once_per_bar_close)