Strategi berjalan secara rawak adalah strategi perdagangan automatik berdasarkan penjanaan nombor rawak. Strategi ini menggunakan penjana isotopi linear untuk menghasilkan nombor secara rawak dari benih berdasarkan tetapan, nombor yang lebih besar daripada nilai terendah dan lebih kecil daripada nilai terendah kosong, untuk memasuki secara rawak dalam kedudukan kosong.
Strategi ini melibatkan perdagangan rawak melalui beberapa bahagian:
Tetapkan parameter a, c dan modul m yang dihasilkan oleh nombor rawak, dan benih awal.
Mendefinisikan fungsi penjanaan nombor rawak GetRandom, yang menggunakan algoritma isomorfik linear untuk menghasilkan nombor rawak antara 0-m.
Pada setiap baris K, jika tidak ada kedudukan semasa, jumlah rawak yang dihasilkan lebih kecil, lebih besar daripada m / 2, jika tidak, kosong.
Tetapkan syarat henti rugi, dan tentukan peratusan henti rugi dan henti rugi.
Tetapkan kitaran pengulangan melalui tempoh masa.
Melalui langkah-langkah di atas, strategi ini mewujudkan operasi melakukan lebih banyak dan kosong secara rawak. Apabila jumlah rawak lebih besar daripada m / 2, buka lebih banyak atau kosong, dan kemudian set Stop Loss Stop Stop untuk keluar dari kedudukan.
Strategi logiknya mudah difahami dan mudah dilaksanakan.
Perdagangan secara rawak berkesan mengelakkan pengaruh emosi manusia dan mengurangkan kesilapan subjektif.
Parameter algoritma penjanaan nombor rawak yang boleh disesuaikan untuk menyesuaikan keacakan.
Anda boleh secara fleksibel menetapkan syarat-syarat stop loss dan kawalan kerugian tunggal.
Menyokong pengoptimuman parameter pengukuran semula untuk menguji kesan parameter yang berbeza terhadap hasil keseluruhan.
Perdagangan rawak mungkin tidak mempunyai trend yang jelas dalam jangka masa panjang, dan keuntungan tidak pasti.
Tidak dapat menyesuaikan kedudukan mengikut keadaan pasaran, mungkin terlepas peluang trend.
Keuntungan individu adalah terhad, risiko penarikan balik adalah tinggi.
Anda perlu menetapkan peratusan stop-loss yang munasabah untuk mengelakkan kerugian yang berlebihan.
Kemunculan secara rawak boleh menyebabkan pembukaan kedudukan rendah yang kerap dan meningkatkan kos transaksi.
Ia memerlukan pengesahan semula parameter pengesahan untuk menetapkan kesahihan dan tidak boleh digunakan secara membabi buta.
Anda boleh mengurangkan risiko dengan menambah fungsi seperti penilaian trend, mengurangkan bilangan kedudukan terbuka secara rawak, mengoptimumkan mekanisme penangguhan kerugian, dan mengawal kerugian tunggal dengan ketat.
Untuk meningkatkan penilaian trend dan mengelakkan kedudukan berlawanan.
Menyertai pengurusan kedudukan, menyesuaikan saiz kedudukan mengikut perubahan dana.
Mengoptimumkan algoritma penjanaan nombor rawak untuk meningkatkan keacakan.
Dinamika penyesuaian Stop Loss Stop Rate.
Penambahan had frekuensi pembukaan kedudukan.
Uji balas gabungan berbilang parameter untuk mencari parameter optimum.
Strategi berjalan secara rawak mewujudkan perdagangan mekanikal melalui kawalan nombor rawak. Strategi ini bersifat rawak, tidak dipengaruhi oleh emosi individu, dan mengelakkan risiko salah laku subjektif. Tetapi, peluang tren yang mungkin dilewatkan, keuntungan tunggal terhad, dan mekanisme kawalan risiko yang perlu dioptimumkan. Secara keseluruhan, strategi ini sesuai untuk digunakan untuk mengesahkan konsep perdagangan dan memahami kesan tetapan parameter terhadap keuntungan, tetapi penerapan sebenar memerlukan penilaian yang berhati-hati.
/*backtest
start: 2022-10-02 00:00:00
end: 2023-10-08 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//@author=Tr0sT
strategy(title = "Random strategy", shorttitle = "Random", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)
a = 16
c = 10
m = 1000
GetRandom(prev) =>
GetRandom = (a * prev + c) % m
seed = input(200, minval = 2, maxval = m)
stopLoss = input(30, title = "Stop loss percentage(0.1%)")
takeProfit = input(30, title = "Take profit percentage(0.1%)")
curRandom = na
curRandom := nz(curRandom[1]) == 0 ? seed : GetRandom(curRandom[1])
if (strategy.position_size == 0)
if (curRandom >= m / 2)
strategy.entry("Enter", strategy.long)
else
strategy.entry("Enter", strategy.short)
strategy.exit("Exit", "Enter", loss = close * stopLoss / 1000 / syminfo.mintick, profit = close * takeProfit / 1000 / syminfo.mintick)
// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
strategy.cancel_all()
strategy.close_all()