Peringatan pada indikator. Bagaimana cara memasukkan Peringatan dan Panah ke indikator Anda?
Market MQL5. Masalah dan kesalahan dalam menginstal Penasehat Ahli (Expert Advisor) dan solusinya
Description
Dalam artikel ini, saya akan menjelaskan metode saya untuk menghitung ukuran lot berdasarkan persentase (Risk in %) dari Margin Bebas (Free Margin) pada berbagai pasangan mata uang dan jenis deposit. Autolot atau Dynamic lot dari balance. RiskManager. Saya akan menunjukkan kode Autolot saya.
Mari kita mulai:
Basic Concepts:
Pertama, mari kita soroti beberapa konsep yang digunakan dalam perhitungan ini:
Free Margin (AccountFreeMargin()) – dana yang tidak digunakan sebagai jaminan pada posisi terbuka. Margin Bebas dihitung dengan rumus: Free Margin = Saldo Deposit Saat Ini – Margin yang Diperlukan untuk Posisi Terbuka. Indikator ini menentukan berapa banyak transaksi yang dapat dibuka pada saat ini.
Ask adalah harga di mana Anda membeli sejumlah instrumen keuangan dari broker. Broker menjualnya kepada Anda pada harga ini. Saat trading di pasar Forex, Anda akan menemui jenis harga ini di mana-mana: mulai dari terminal trading hingga laporan bursa dan artikel analisis pasar keuangan.
Bid adalah harga di mana Anda menjual sejumlah instrumen keuangan kepada broker Anda. Broker membelinya dari Anda pada harga tersebut. Saat trading di pasar Forex, Anda akan menemui jenis harga ini di mana pun terjadi pembahasan tentang pasar Forex internasional: dari terminal trading dan kurs di situs broker Anda hingga laporan bursa dan artikel analisis di pasar keuangan internasional.
Leverage adalah rasio antara jumlah jaminan dan jumlah dana yang dipinjamkan. Saat Anda memilih leverage untuk pertama kalinya, Anda menentukan ukuran leverage yang menunjukkan pengali (multiplier) di mana saldo deposit Klien akan ditingkatkan untuk melakukan operasi trading di pasar Forex. Klien dapat memilih leverage dari 1:1 hingga 1:500, artinya Klien dapat trading hanya dengan dananya sendiri atau meminta peningkatan deposit hingga 500 kali lipat untuk masuk ke pasar dengan jumlah ini. Leverage, sebagai rasio antara jumlah yang digunakan trader untuk masuk pasar dan ukuran depositnya, berperan penting dalam proses trading karena memungkinkan seorang trader meningkatkan modalnya secara signifikan.
Sebuah Currency Pair adalah penunjukan dua mata uang yang bersama-sama membentuk nilai tukar. Pasangan mata uang ini menjadi objek untuk transaksi keuangan. Sebuah pasangan mata uang ditulis dengan menyertakan dua mata uang yang membentuk pasangan tersebut, dituliskan bersama atau dipisahkan oleh garis miring dalam bentuk: base currency / quote currency. Base currency adalah mata uang pertama yang dibeli dan dijual, sementara quote currency digunakan untuk mengekspresikan harga base currency. Pasangan mata uang adalah konsep fundamental di pasar valuta asing, yang ada di mana-mana selama berkaitan dengan pasar ini: mulai dari laporan pasar hingga terminal trading.
Lot Size – volume mata uang dasar, komoditas, atau jumlah saham yang ditentukan dalam spesifikasi kontrak. Ukuran lot tergantung pada jumlah mata uang yang disebutkan dalam kontrak dan menjadi satuan ukuran untuk menentukan besar kontrak trading. Satu lot memiliki ukuran tertentu, yang digunakan untuk menentukan jumlah mata uang yang digunakan untuk transaksi keuangan di pasar Forex. Untuk mengeksekusi transaksi, Klien menentukan ukuran transaksi yang diekspresikan dalam jumlah lot. Volume transaksi menunjukkan seberapa banyak mata uang yang akan membentuk transaksi tersebut. Lot adalah ukuran kontrak, sejumlah mata uang tetap yang digunakan dalam trading Forex.
Nilai tukar antara dua mata uang ditentukan oleh interaksi penawaran dan permintaan pada waktu tertentu.
Proses ini dikenal sebagai currency quoting, di mana kuotasi bisa direct atau reversed.
Sebuah direct quotation merefleksikan harga mata uang asing dalam satuan mata uang nasional.
Kebanyakan nilai tukar diekspresikan sebagai direct quotes dari dolar AS terhadap mata uang negara lainnya.
Contohnya, USD/UAH—30.70 berarti satu dolar AS bernilai 30.70 hryvnia Ukraina,
dan USD/CHF—1.0850 menunjukkan satu dolar AS setara dengan 1.0850 franc Swiss.
Sebuah reverse quotation mengekspresikan nilai mata uang nasional dalam mata uang asing.
Secara historis, mata uang seperti British pound, euro, dolar Australia, dan dolar Selandia Baru sering dikutip dengan cara ini.
Misalnya, EUR/USD—1.3374 menandakan bahwa satu euro bernilai 1.3374 dolar AS,
sementara GBP/USD—1.5970 berarti satu British pound sama dengan 1.5970 dolar AS.
Ada juga konsep cross exchange rate, di mana dolar AS tidak menjadi base maupun quoted currency.
Contoh: EUR/JPY, GBP/CHF, dan EUR/GBP.
Technical Side
- NormalizeDouble – Membulatkan angka pecahan ke presisi yang ditentukan.
- MODE_LOTSIZE – Ukuran kontrak dalam mata uang dasar instrumen.
- MODE_LOTSTEP – Langkah perubahan ukuran lot.
- AccountCurrency – Mengembalikan nama mata uang untuk akun saat ini.
- MathFloor – Fungsi yang mengembalikan integer terbesar yang kurang dari atau sama dengan x.
Hal Penting: Untuk memastikan semua perhitungan akurat, aktifkan semua simbol di panel “Market Watch”:
Formula Perhitungan Saya untuk Mata Uang Akun
Rumus perhitungan saya seperti ini:
Deposit USD
Deposit USD Direct Quote ()
Lot = Free Margin * Risk * Leverage / 100 / Contract Size
Deposit USD Back Quote()
Lot = Free Margin * Risk * Leverage / Ask / 100 / Contract Size
Deposit USD Cross Rate:
Opsi 1: Jika ada harga saat ini dari base currency + USD (contoh, jika pair settlement adalah AUDCAD, maka harga saat ini base currency = AUDUSD)
Lot = Free Margin * Risk * Leverage / (Harga Mata Uang Dasar Saat Ini + USD) / 100 / Contract Size
Opsi 2: Jika tidak ada harga saat ini dari base currency + USD (contoh, CADJPY)
Lot = Free Margin * Risk * Leverage / 100 / Contract Size
Deposit EUR
Deposit EUR Direct Quote
Lot = Free Margin * Risk * Leverage / 100 / Contract Size
Deposit EUR Cross Rate:
Harga saat ini = EUR + quote currency (contoh, jika pair settlement adalah AUDCAD, maka harga saat ini quote currency = EURAUD)
Lot = Free Margin * Risk * Leverage / (harga saat ini EUR + quote currency) / 100 / Contract Size
Deposit UAH dan Lainnya
Deposit UAH Back Quote (contoh, USDUAH)
Lot = MathFloor(Free Margin * Risk * Leverage / 100 / Harga Saat Ini / Contract Size / Lot Step / 20) * Lot Step
Deposit UAH Cross (mis. EURGBP)
Harga saat ini = MarketInfo(StringSubstr(Symbol(), 0, 3) + UAH + StringSubstr(Symbol(), 6), MODE_BID);
if(pr != 0) Lot2 = MathFloor(Free Margin * Risk * Leverage / Current Price / 100 / Contract Size / Lot Step) * Lot Step;
else Lot = MathFloor(Free Margin * Risk * Leverage / 100 / Contract Size / Lot Step) * Lot Step;
Urutan fungsi-fungsi tersebut ditentukan dengan menghitung parameter pada berbagai deposit.
Jika Anda memiliki saran untuk perhitungan ini, silakan bagikan fungsi Autolot Anda saat memesan pemrograman.
Atau Freelance: Pemrograman Kustom di MetaTrader dan MQL! Selesai?
External Variables Fungsi Perhitungan Autolot:
Lots | Lot tetap untuk membuka posisi. |
RiskLotType TypeAutolot | Jenis Perhitungan Autolot: BALANCE (Risiko dari Balance) – Autolot dihitung dari balance saat ini. Perhitungan lot didasarkan pada saldo akun. Jika ada posisi terbuka di akun, lot berikutnya akan kurang lebih sama karena balance tidak berkurang dari jumlah posisi terbuka! FREEMARGIN (Risiko dari Margin Bebas) – Perhitungan lot standar dari margin bebas saat ini adalah semakin banyak posisi terbuka di akun, semakin kecil lot yang dihitung untuk posisi berikutnya. Hal ini karena saat membuka posisi, margin bebas menurun, sehingga setiap posisi baru akan memiliki lot lebih kecil saat menghitung Autolot. Jenis Perhitungan Risiko untuk Opsi RiskLot: Mode yang tersedia: RiskLotType = 0, // Risk dari Free Margin RiskLotType = 1, // Risk dari Balance |
DynamicLot | Sebuah lot dinamis, Autolot, untuk membuka posisi. Anda dapat mengaktifkan perhitungan lot dinamis sebagai persentase dari margin bebas dan faktor lainnya. Perhitungan Autolot Kami: Rumus dan kode: https://expforex.com/id/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-4 |
DynamicLotStopLoss | Risiko dari SL – Menghitung lot otomatis dengan memperhitungkan Stop Loss. Kerugian maksimum sebagai persentase dari balance saat menutup deal di Stop Loss. Saat menghitung lot, Expert Advisor kami memperhitungkan stop loss saat order dibuka. Jika order ditutup di stop loss, kerugian dari order tersebut akan sama dengan persentase balance pada saat order dibuka. Penting! Jika stop loss Anda diubah setelah order dibuka, ukuran lot order tidak dapat diubah. Saat order ditutup, kerugian bisa lebih besar atau lebih kecil. Penting! Jika Anda menggunakan Trailing Stop, Stop Loss order akan berubah setiap tick, tetapi ukuran lot tidak bisa diubah. Rumus dan kode: https://expforex.com/id/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-5 |
LotBalancePcnt RiskLot LotBalancePercent | Persentase untuk Autolot. Persentase untuk fungsi lot dinamis (Autolot). Jika RiskLot = 0, maka LOT (Volume) order akan dihitung berdasarkan parameter Lot. Jika RiskLot tidak sama dengan 0, maka order di terminal klien akan dibuka dengan lot sebagai persentase dari margin bebas klien (Autolot). |
RiskRate | Nilai kurs mata uang Anda terhadap dolar (atau mata uang akun Anda). Secara default, RiskRate = 0, artinya Expert Advisor akan mencoba menemukan kurs yang benar di Market Review. Agar Autolot berfungsi optimal pada semua pasangan mata uang, Anda perlu mengaktifkan “Show All Currency Pairs” di Market Watch. |
MaxLot | Lot maksimum yang dapat dibuka oleh Expert Advisor saat menghitung Autolot dan Martingale untuk posisi utama pertama. |
Martin | Martingale. Perkalian standar lot dari posisi terakhir yang ditutup dalam kondisi rugi. Jika Martin = 1, maka martingale tidak aktif (Fixed lots). Jika Martin = 0, maka Expert Advisor tidak dapat membuka posisi berikutnya. Jika Martin = 2, maka lot pertama = 0.1, lot kedua = 0.2, dan seterusnya: 0.4 – 0.8 – 1.6 – 3.2 – 6.4….. Jika Martin = 0.5, maka lot pertama = 1, lot kedua = 0.5, dan seterusnya: 0.25 – 0.125. |
Perlukah kode?
Kode Perhitungan Autolot Function:
input double Lots=0.01; //Lots --> Fixed lot of opened positions and orders input bool DynamicLot=false; //DynamicLot --> The calculation lot from free margin input bool DynamicLotStopLoss=false; //DynamicLotStopLoss --> The calculation lot from StopLoss and free margin input double LotBalancePercent=1; //LotBalancePercent --> Percentage for the calculation of the lot extern double RiskRate=0; //RiskRate --> Symbol rate to deposit currency for lot calculation input double MaxLot=999; //MaxLot --> Maximum lot when opening positions double GetSizeLot(double ll=1) // The function returns the lot size { string Author = "Author of function template: www.expforex.com"; string lotcalc; double pr; string Valdepo = AccountCurrency(); // If MM is enabled, then determine the lot size double Lot2, MinLots, MaxLots; int lotdig; if (MarketInfo(Symbol(), MODE_LOTSTEP) == 0.01) lotdig = 2; else lotdig = 1; if (Valdepo == "USD") { if (StringSubstr(Symbol(), 0, 3) == "USD") Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePercent * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); else if (StringSubstr(Symbol(), 3, 3) == "USD") Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePercent * AccountLeverage() / Ask / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); else { pr = MarketInfo(StringSubstr(Symbol(), 0, 3) + "USD", MODE_ASK); if (pr != 0) Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePercent * AccountLeverage() / pr / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); else Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePercent * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); } } if (Valdepo == "EUR") { if (StringSubstr(Symbol(), 0, 3) == "EUR") Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePercent * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); else { pr = MarketInfo("EUR" + StringSubstr(Symbol(), 0, 3), MODE_BID); if (pr != 0) Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePercent * AccountLeverage() * pr / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); else Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePercent * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); } } if (Valdepo == "UAH") { if (StringSubstr(Symbol(), 0, 3) == "USD") Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePercent * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); else if (StringSubstr(Symbol(), 3, 3) == "USD") Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePercent * AccountLeverage() / Ask / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); else { pr = MarketInfo(StringSubstr(Symbol(), 0, 3) + "USD", MODE_ASK); if (pr != 0) Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePercent * AccountLeverage() / pr / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); else Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePercent * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); } } MinLots = MarketInfo(Symbol(), MODE_MINLOT); MaxLots = MaxLot; lotcalc = "Autolot=" + Lot2; if (!DynamicLot) Lot2 = Lots; if (Lot2 < MinLots) Lot2 = MinLots; if (Lot2 > MaxLots) Lot2 = MaxLots; lotcalc = lotcalc + " MinLots=" + MinLots + " LOT=" + NormalizeDouble(Lot2, lotdig); Print(lotcalc); return (NormalizeDouble(Lot2, lotdig)); }
Fungsi Perhitungan Autolot Stoploss:
Jika Anda ingin menambahkan fungsionalitas stop loss Autolot ke EA Anda, Anda dapat mengunduh kode kami:
StopLosssd = Stop Loss dalam poin
External Variables:
Lots = 0.1; // Fixed lot
DynamicLotStopLoss = // true/false
LotBalancePcnt (RiskLot) = 20; // % dari margin bebas
Function:
double GetSizeLotStopLoss(double StopLosssd=1) // The function returns the lot size { string Author = "Author of function template: www.expforex.com"; string Valdepo = AccountCurrency(); // If MM is enabled, then determine the lot size double MinLots; int lotdig; if (MarketInfo(Symbol(), MODE_LOTSTEP) == 0.01) lotdig = 2; else lotdig = 1; double Free = AccountFreeMargin(); double LotVal = MarketInfo(Symbol(), MODE_TICKVALUE); // Cost of 1 pip for 1 lot double Min_Lot = MarketInfo(Symbol(), MODE_MINLOT); double Max_Lot = MarketInfo(Symbol(), MODE_MAXLOT); double Step = MarketInfo(Symbol(), MODE_LOTSTEP); double Lot = MathFloor((Free * LotBalancePcnt / 100) / (StopLosssd * LotVal) / Step) * Step; MinLots = MarketInfo(Symbol(), MODE_MINLOT); if (Lot < MinLots) Lot = MinLots; return (NormalizeDouble(Lot, lotdig)); }
Questions?
Jika Anda memiliki pertanyaan, silakan ajukan. Kami tidak menjual kucing dalam karung.
Setiap produk kami dapat diuji sebelum pembelian.
Kami menghargai ketertarikan dan dukungan Anda pada produk kami, dan kami berupaya menjaga standar kualitas yang tinggi.
Terima kasih telah bersama kami!
Apakah Anda punya pertanyaan?
3 tanggapan untuk “My Autolot Secrets. Dynamic Lot atau Autolot. Risiko dari Balance.”
-
I want to be able to double whatever lot size that is being copied from the master onto the client.. How do I do that with settings… so no matter what every new position the client with be 2x that.. master opens a trade of .03, then it will be copied to client as .06.
-
I want to be able to double whatever lot size that is being copied from the master onto the client.. How do I do that with settings… so no matter what every new position the client with be 2x that.. master opens a trade of .03, then it will be copied to client as .06.
Postingan ini juga tersedia dalam: English Українська Portuguese Español Deutsch Chinese Русский Français Italiano Türkçe 日本語 한국어 العربية Indonesian ไทย Tiếng Việt
Tinggalkan Balasan