Laman utama Perdagangan Sistem Siaran

Robot Trader RSI atau MFI yang Mengoptimumkan Diri Sendiri untuk MetaTrader 4

Lampiran
19392.zip (4.86 KB, Muat turun 2 kali)

Impian saya adalah untuk memiliki robot yang dapat mengoptimumkan diri sendiri, supaya saya tahu ia sentiasa beroperasi dengan nilai terbaik. Ini adalah percubaan ikhlas saya untuk membawa sebahagian daripada impian ini menjadi kenyataan. Robot penasihat yang dilampirkan ini mengoptimumkan tahap terlebih beli dan terlebih jual yang digunakannya untuk membuat perdagangan. Saya berharap orang lain dapat mengambil konsep ini dan mengembangkannya untuk mencipta sesuatu yang lebih hebat. Jika anda melakukannya, sila maklumkan kepada saya. Jangan lupa untuk memberi penilaian kepada robot saya menggunakan bintang di atas.

Strategi ini boleh digunakan untuk mana-mana pasangan mata wang dengan mana-mana rangka masa, dengan syarat anda menggunakan tetapan yang betul.


Input

  • magic = 4376 - Nombor unik untuk EA ini.
  • optomizingPeriods = 144 - Tempoh pengoptimuman (bar). Ini adalah bilangan bar yang anda ingin robot jalankan untuk pengoptimuman. Sebagai contoh, jika anda menggunakan carta jam dan memilih 144, robot akan melihat 144 jam, yang bersamaan dengan enam hari.
  • inAggressive = false - Membuat EA lebih agresif? Berisiko. Mod agresif akan menyebabkan penasihat pakar mengambil perdagangan dengan cara yang lebih agresif. Bukannya menunggu persilangan tahap terlebih beli atau terlebih jual, dalam mod agresif, robot akan mengambil perdagangan beli jika kebelakangan ini pembelian lebih menguntungkan daripada penjualan, dan sebaliknya.
  • inTradeReverse = false - Perdagangan terbalik. Perdagangan terbalik akan menukar arah perdagangan anda.
  • inOneOrderAtATime = true - Hanya satu pesanan terbuka pada satu masa?. Jika benar, robot akan hanya mempunyai satu pesanan pada satu masa, jika salah, ia akan membuka pesanan tanpa had mengikut syarat kemasukan.
  • Lot_sizing_dynamic_invalidates_static - Sekadar pemisah untuk memisahkan mekanik saiz lot daripada input lain.
  • Lots = 0.01 - Saiz Lot statik untuk pesanan. Tentukan saiz lot untuk pesanan anda menggunakan angka statik.
  • inUseDynamicLotSize = true - Gunakan saiz lot dinamik. Menghidupkan saiz lot dinamik yang akan digunakan sebagai ganti saiz lot statik. Namun, jika saiz lot dinamik terbukti tidak sah, robot akan kembali kepada saiz lot statik.
  • inPercentageOfRisk = 2 - % baki untuk risiko pada setiap perdagangan (2 = 2%). Apabila menggunakan saiz lot dinamik, anda menentukan saiz lot anda sebagai peratusan daripada baki anda. 2 adalah sama dengan 2 peratus. Tiada keperluan untuk memasukkan 0.02; jika anda melakukannya, peratusan yang digunakan akan sangat kecil. Peratusan maksimum yang boleh digunakan adalah 10 peratus.
  • Index_Indicator_Values - Sekadar pemisah untuk memisahkan parameter penunjuk indeks daripada input lain.
  • indicator index = _RSI_ - Pilih penunjuk indeks yang ingin digunakan. Membolehkan anda memilih penunjuk yang anda ingin gunakan. Pilihan semasa adalah Indeks Kekuatan Relatif (RSI) atau Indeks Aliran Wang (MFI).
  • IndicatorTopValue = 100 - Nilai tertinggi yang anda akan berdagang. Ini adalah nilai tertinggi yang anda akan melakukan perdagangan menggunakan penunjuk anda. Tinggalkan pada 100 untuk mempertimbangkan semua nilai penunjuk indeks.
  • IndicatorBottomValue = 0 - Nilai terendah yang anda akan berdagang. Ini adalah nilai terendah yang anda akan melakukan perdagangan menggunakan penunjuk anda. Tinggalkan pada 0 untuk mempertimbangkan semua nilai penunjuk indeks.
  • IndyTimeframe = PERIOD_CURRENT - Rangka masa untuk indeks. Pilih rangka masa yang anda ingin gunakan untuk penunjuk semasa pengoptimuman dan perdagangan. PERIOD_CURRENT bermaksud bahawa ia akan menggunakan rangka masa carta yang anda lampirkan pada penasihat pakar. Anda boleh menggunakan rangka masa yang berbeza untuk pengiraan anda jika anda mahu; di sini adalah tempat anda boleh menukar tetapan itu.
  • inIndyPeriods = 14 - Tempoh purata untuk indeks dan pengiraan ATR. Purata Jarak Benar (ATR) digunakan untuk menetapkan stop-loss dinamik atau take-profit dalam pilihan input lebih lanjut di bawah.
  • IndyAppPrice = PRICE_CLOSE - Harga yang digunakan untuk indeks jika perlu.
  • SL_TP_Dynamic_invalidates_static_values - Sekadar pemisah untuk memisahkan parameter stop loss dan take profit daripada input lain.
  • iStoploss = 1000 - Nilai Stoploss statik dalam mata. Nilai stop loss adalah dalam mata, yang merupakan unit terkecil pergerakan di terminal anda.
  • iTakeprofit = 2000 - Nilai Takeprofit statik dalam mata. Nilai take profit adalah dalam mata, yang merupakan unit terkecil pergerakan di terminal anda.
  • input inDynamic = true - Gunakan stop loss & tp dinamik berdasarkan gandaan ATR? Jika anda menghidupkan stop loss dan take profit dinamik, ia akan digunakan sebagai ganti stop loss atau take profit statik. Tetapan dinamik boleh menarik kerana ia mampu menyesuaikan diri dengan tingkah laku pasaran. Oleh kerana ATR lebih besar apabila terdapat lebih banyak pergerakan, menggunakan dinamik akan menghasilkan stop loss dan take profit yang lebih besar apabila pasaran bergerak pantas dan tetapan lebih dekat apabila pasaran perlahan.
  • inStoplossMultiple = 2 - SL dinamik = X * ATR (Tempoh Purata). Stop loss akan menjadi nilai yang anda letakkan di sini didarab dengan Purata Jarak Benar (ATR) menggunakan tempoh yang ditentukan dalam tetapan inIndyPeriods.
  • inTakeProfitMultiple = 7 - TP dinamik = X * ATR (Tempoh Purata). Take profit akan menjadi nilai yang anda letakkan di sini didarab dengan Purata Jarak Benar (ATR) menggunakan tempoh yang ditentukan dalam tetapan inIndyPeriods.
  • Break_Even_Settings - Padding mesti lebih rendah daripada Trigger. Pemisah untuk tetapan Break Even. Cara ia berfungsi adalah apabila mata keuntungan melepasi jumlah pemicu, stop loss dipindahkan ke break even. Jika anda mempunyai tetapan padding, maka stop loss dipindahkan ke break even + padding untuk mengunci jumlah keuntungan padding.
  • bUseBreakEven = true - Gunakan Break Even (BE). Hidupkan penggunaan break even atau matikan.
  • inTrigger = 200 - Jika BE = [true] tetapkan mata dalam keuntungan untuk memicu. Jika perdagangan mencapai mata ini dalam keuntungan, stop loss akan dipindahkan ke break even.
  • inPadding = 100 - Mata padding untuk ditambah kepada BE mesti lebih rendah daripada pemicu. Ini adalah bilangan mata keuntungan yang ingin anda kunci ketika bergerak ke break even; jumlah ini mesti kurang daripada pemicu.

Bagaimana robot ini mengoptimumkan diri? Inilah rahsianya, robot ini menguji setiap pembolehubah dalam penunjuk indeks dua kali, jadi jika satu penunjuk mempunyai seratus nilai kemungkinan, ia mengambil setiap nilai dan cuba melakukan perdagangan pada nilai tersebut dengan melihat kembali sejumlah bar tertentu (optomizingPeriods). Kemudian ia memberikan penilaian nilai tersebut berdasarkan berapa banyak wang yang akan diperoleh atau rugi dengan berdagang pada nilai tersebut. Ia sedikit lebih kompleks daripada itu, tetapi anda membaca ini untuk mendapatkan lebih banyak butiran, jadi inilah penerangannya.

Yang diberikan adalah bahawa apabila penunjuk melintasi nilai terlebih beli dari atas, pesanan jual dikeluarkan, dan pesanan beli dikeluarkan apabila penunjuk melintasi dari bawah nilai terlebih jual ke atas nilai terlebih jual. Sebagai contoh, jika terlebih beli ditetapkan kepada 80 dan nilai penunjuk anda adalah 85 pada bar sebelum yang terakhir dan nilai penunjuk pada bar terakhir adalah 79, maka pesanan jual akan dikeluarkan. 85 → 79 melintasi 80 ke bawah, pesanan jual dikeluarkan. Jika terlebih jual = 23, maka 19 → 27 ke atas akan mencipta pesanan beli.

Jadi, robot ini mengambil setiap nilai untuk penunjuk dari IndicatorTopValue - dan IndicatorBottomValue - dan menjalankan ujian, dua ujian lebih khusus. Ia menjalankan ujian beli dan jual pada setiap nilai. Sebagai contoh, jika nilai tertinggi adalah 100, ia mengambil nilai tertinggi dan melakukan backtest pada optomizingPeriods, katakanlah itu adalah 144 tempoh. Jadi ia akan melihat sama ada membeli pada 100 dan menjual pada 100 akan menguntungkan dalam 144 tempoh terakhir. Jika ia menguntungkan, ia mengekalkan jumlah wang itu.

Memandangkan berapa banyak tempoh anda melakukan backtest, ia mungkin mempunyai peluang untuk membeli beberapa kali semasa backtest. Jika ia mencapai take profit sebelum ia mencapai stop loss, maka ia akan mempunyai hasil yang menguntungkan; jika ia mencapai stop loss sebelum mencapai take profit, ia mempunyai hasil negatif. Selepas menguji semua tempoh dalam optomizingPeriods, ia menambah semua hasil yang menguntungkan dengan semua kerugian untuk mengekalkan nilai monetari. Kemudian penunjuk bergerak ke nilai penunjuk yang lebih rendah dan mengujinya untuk keuntungan.

Apabila ia telah menguji semua nilai, ia memilih nilai dengan jumlah monetari tertinggi dan memilihnya sebagai nilai beli optimum. Seterusnya, ia melakukan pemeriksaan serupa untuk nilai jual. Setelah ini selesai, ia membandingkan nilai beli terbaik dengan nilai jual terbaik dan mencari perdagangan yang terbaik dari yang terbaik. Contohnya, setelah menjalankan pengoptimuman ini, ia menentukan bahawa beli terbaik adalah pada 65 kerana beli pada 65 menghasilkan untung paling banyak, katakanlah $329 dalam backtest, ia akan memeriksa nilai yang ada untuk jual terbaik, dan jika jual terbaik adalah 32 dengan keuntungan $530, robot akan mencari perdagangan jual dengan penunjuk melintasi tahap 32 kerana jual adalah lebih baik daripada beli berdasarkan keuntungan yang dihasilkan dalam backtest.


Idea Pengembangan Masa Depan

  • Perdagangan pelbagai pasangan mata wang pada masa yang sama, mungkin ditapis mengikut saiz spread.
  • Pembelajaran sendiri, di mana ia belajar daripada perdagangan sendiri apa yang terbaik.
  • Backtesting juga boleh memasukkan komponen pengujian ke depan.
  • Lebih banyak penunjuk untuk dipilih.

Sila tinggalkan cadangan dan komen anda, dan jangan lupa untuk memberi penilaian!

Kini tersedia di pasar MetaTrader: https://www.mql5.com/en/market/product/26332


Dikemaskini dengan tanda kurung yang hilang dalam baris 137-142 untuk menyelesaikan ralat yang dikenal pasti dalam komen.

Siaran berkaitan

Komen (0)