Cảnh báo trong chỉ báo (Indicator). Làm thế nào để chèn Cảnh báo và Mũi tên vào chỉ báo của bạn?
Thị trường MQL5. Vấn đề và lỗi khi cài đặt chuyên gia cố vấn (Expert Advisor) cùng giải pháp
Mô tả
Trong bài viết này, tôi sẽ giải thích phương pháp tính khối lượng lot dựa trên tỷ lệ phần trăm (Rủi ro (Risk) %) của Ký quỹ tự do (Free Margin) trên các cặp tiền tệ (Currency Pair) khác nhau và nhiều loại tiền nạp khác nhau. Autolot hoặc Lot động (Dynamic Lot) từ số dư (Balance). RiskManager. Tôi sẽ trình bày mã Autolot của tôi.
Hãy bắt đầu:
Các Khái Niệm Cơ Bản:
Trước hết, hãy làm rõ một số khái niệm được dùng trong việc tính toán này:
Ký quỹ tự do (Free Margin) ( AccountFreeMargin() ) – số tiền chưa được sử dụng để ký quỹ cho các vị thế đang mở. Ký quỹ tự do được tính bằng công thức: Free Margin = Số dư tài khoản hiện tại – Ký quỹ yêu cầu cho các lệnh đang mở. Chỉ số này quyết định số giao dịch mà bạn có thể mở tại thời điểm hiện tại.
Giá chào bán (Ask) là mức giá mà bạn mua một khối lượng cụ thể của công cụ tài chính từ broker. Broker bán cho bạn ở mức giá này. Khi giao dịch trên thị trường Forex, bạn sẽ thường xuyên bắt gặp kiểu giá này: từ terminal giao dịch (Trading Terminal) cho đến các báo cáo chứng khoán và bài phân tích thị trường tài chính.
Giá chào mua (Bid) là mức giá mà bạn bán một khối lượng cụ thể của công cụ tài chính cho broker. Broker mua lại của bạn với mức giá này. Khi giao dịch trên thị trường Forex, bạn cũng sẽ gặp kiểu giá này ở bất cứ nơi nào có thảo luận về thị trường Forex quốc tế: từ terminal giao dịch đến tỷ giá trên trang web broker và những bài viết phân tích về thị trường tài chính quốc tế.
Đòn bẩy (Leverage) là tỷ lệ giữa số tiền ký quỹ và số tiền vay. Khi chọn đòn bẩy ban đầu, bạn quyết định mức đòn bẩy thể hiện hệ số nhân mà khoản ký quỹ của Khách hàng được tăng lên để thực hiện các hoạt động giao dịch trên thị trường Forex. Khách hàng có thể chọn đòn bẩy từ 1:1 đến 1:500, nghĩa là có thể giao dịch chỉ với vốn tự có hoặc yêu cầu tăng số dư lên đến 500 lần để vào thị trường. Leverage, là tỷ lệ giữa số tiền nhà giao dịch sử dụng để vào thị trường và số dư của họ, đóng vai trò quan trọng vì nó cho phép nhà giao dịch khuếch đại vốn một cách đáng kể.
Một Cặp tiền tệ (Currency Pair) là ký hiệu của hai loại tiền tệ cùng tạo thành một tỷ giá hối đoái. Cặp tiền tệ là đối tượng cho các giao dịch tài chính. Một cặp tiền tệ được ký hiệu bằng cách ghép nối hai đồng tiền, có thể viết liền hoặc có dấu gạch chéo, theo định dạng: đồng tiền cơ sở / đồng tiền định giá. Đồng tiền cơ sở là đồng tiền đầu tiên được mua và bán, còn đồng tiền định giá được dùng để biểu thị giá trị của đồng tiền cơ sở. Cặp tiền tệ là khái niệm nền tảng trên thị trường ngoại hối, xuất hiện ở mọi nơi khi nhắc đến thị trường này: từ các báo cáo thị trường đến terminal giao dịch.
Lot Size (Khối lượng lot) – khối lượng đồng tiền cơ sở, hàng hóa hoặc số cổ phiếu được quy định trong đặc tả hợp đồng. Khối lượng lot phụ thuộc vào lượng tiền trong hợp đồng và là đơn vị đo lường để xác định kích thước giao dịch. Một lot có kích thước nhất định, dùng để xác định số lượng tiền tệ được sử dụng cho giao dịch tài chính trên thị trường Forex. Để thực hiện giao dịch, Khách hàng xác định khối lượng giao dịch, thể hiện bằng số lot. Khối lượng giao dịch cho biết có bao nhiêu tiền tệ sẽ được sử dụng. Một lot là kích thước của hợp đồng, tức số tiền tệ cố định dùng trong giao dịch Forex.
Tỷ giá giữa hai đồng tiền được quyết định bởi cung và cầu tại một thời điểm cụ thể.
Quá trình này được gọi là báo giá tiền tệ, và báo giá có thể là direct hoặc reversed.
Một direct quotation phản ánh giá của một đồng ngoại tệ tính bằng đơn vị đồng nội tệ.
Hầu hết các tỷ giá được thể hiện là báo giá trực tiếp của đô la Mỹ so với các đồng tiền của nhiều quốc gia.
Ví dụ, USD/UAH—30.70 có nghĩa là 1 đô la Mỹ trị giá 30.70 hryvnia Ukraina,
và USD/CHF—1.0850 chỉ ra 1 đô la Mỹ tương đương 1.0850 franc Thụy Sĩ.
Một reverse quotation biểu thị giá trị của đồng nội tệ tính theo đồng ngoại tệ.
Về mặt lịch sử, các đồng như bảng Anh, euro, đô la Úc và đô la New Zealand thường được báo giá theo cách này.
Ví dụ, EUR/USD—1.3374 có nghĩa là 1 euro trị giá 1.3374 đô la Mỹ,
trong khi GBP/USD—1.5970 nghĩa là 1 bảng Anh tương đương 1.5970 đô la Mỹ.
Cũng tồn tại khái niệm tỷ giá chéo (cross exchange rate), nơi đô la Mỹ không phải là đồng cơ sở cũng không phải là đồng định giá.
Ví dụ bao gồm EUR/JPY, GBP/CHF, và EUR/GBP.
Khía Cạnh Kỹ Thuật
- NormalizeDouble – Làm tròn một số dấu phẩy động đến độ chính xác chỉ định.
- MODE_LOTSIZE – Kích thước hợp đồng (Contract Size) tính theo đồng tiền cơ sở của công cụ.
- MODE_LOTSTEP – Bước thay đổi khối lượng lot.
- AccountCurrency – Trả về tên đồng tiền cho tài khoản hiện tại.
- MathFloor (hàm MathFloor) – Hàm trả về số nguyên lớn nhất nhỏ hơn hoặc bằng giá trị x.
Quan trọng: Để đảm bảo tất cả phép tính chính xác, hãy kích hoạt tất cả mã giao dịch trong “Bảng Market Watch (Market Watch)” :
Công Thức Tính Của Tôi cho Đồng Tiền Tài Khoản
Công thức tính của tôi như sau:
Tiền Nạp 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:
Option 1: Nếu tồn tại giá hiện tại của đồng tiền cơ sở + USD (ví dụ, nếu cặp tính toán là AUDCAD, thì giá hiện tại của đồng tiền cơ sở = AUDUSD)
Lot = Free Margin * Risk * Leverage / (Current Base Currency Price + USD) / 100 / Contract Size
Option 2: Nếu không có giá hiện tại của đồng tiền cơ sở + USD (ví dụ CADJPY)
Lot = Free Margin * Risk * Leverage / 100 / Contract Size
Tiền Nạp EUR
Deposit EUR Direct Quote
Lot = Free Margin * Risk * Leverage / 100 / Contract Size
Deposit EUR Cross Rate:
Giá hiện tại = EUR + đồng tiền định giá (ví dụ, nếu cặp tính toán là AUDCAD, thì đồng tiền định giá hiện tại = EURAUD)
Lot = Free Margin * Risk * Leverage / (giá hiện tại EUR + đồng tiền định giá) / 100 / Contract Size
Tiền Nạp UAH và Khác
Deposit UAH Back Quote (ví dụ USDUAH)
Lot = MathFloor(Free Margin * Risk * Leverage / 100 / Current Price / Contract Size / Lot Step / 20) * Lot Step
Deposit UAH Cross (ví dụ, EURGBP)
Current price = MarketInfo(StringSubstr(Symbol(), 0, 3) + UAH + StringSubstr(Symbol(), 6), MODE_BID);
if(pr != 0) Lot2 = MathFloor(Free Margin * Risk * Leverage / pr / 100 / Contract Size / Lot Step) * Lot Step;
else Lot = MathFloor(Free Margin * Risk * Leverage / 100 / Contract Size / Lot Step) * Lot Step;
Trình tự của các hàm này được xác định bằng cách tính các tham số trên nhiều loại tiền nạp khác nhau.
Nếu bạn có đề xuất về các phép tính này, vui lòng chia sẻ hàm Autolot của bạn khi đặt hàng lập trình.
Hoặc Freelance: Lập trình tùy chỉnh trên MetaTrader và MQL! Hoàn thiện?
Các Biến Bên Ngoài Hàm Tính Autolot:
Lots | Lot cố định để mở vị thế. |
RiskLotType TypeAutolot | Kiểu Tính Autolot: BALANCE (Rủi ro từ Số dư) – Autolot được tính từ số dư hiện tại. Lot được tính dựa trên số dư tài khoản. Nếu tài khoản có lệnh mở, lot tiếp theo sẽ xấp xỉ như cũ vì số dư không giảm theo số lệnh đang mở! FREEMARGIN (Rủi ro từ Ký quỹ tự do) – Cách tính lot tiêu chuẩn dựa trên ký quỹ tự do, càng nhiều lệnh mở trên tài khoản, lot tính cho vị thế tiếp theo càng nhỏ. Lý do là khi mở lệnh, ký quỹ tự do giảm, do đó mỗi lệnh mở mới có lot nhỏ hơn khi tính Autolot. Kiểu Tính Rủi ro cho Tùy chọn RiskLot: Các chế độ có sẵn: RiskLotType = 0, // Rủi ro từ Ký quỹ tự do RiskLotType = 1, // Rủi ro từ Số dư |
DynamicLot | Lot động (Dynamic Lot), Autolot, cho vị thế mở. Bạn có thể BẬT tính lot động theo tỷ lệ phần trăm của ký quỹ tự do và các yếu tố khác. Công thức và mã tính Autolot: Công thức và mã: https://expforex.com/vi/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-4 |
DynamicLotStopLoss | Rủi ro từ SL – Tính lot tự động, tính đến Cắt lỗ (Stop Loss). Mức thua lỗ tối đa bằng tỷ lệ phần trăm của số dư khi đóng lệnh ở mức cắt lỗ. Khi tính lot, Chuyên gia cố vấn (Expert Advisor) của chúng tôi sẽ xét cắt lỗ tại thời điểm mở lệnh. Nếu lệnh đóng ở cắt lỗ, khoản lỗ từ lệnh này sẽ bằng một tỷ lệ phần trăm của số dư vào lúc mở lệnh. Quan trọng! Nếu bạn thay đổi cắt lỗ sau khi mở lệnh, kích thước lot của lệnh không thể thay đổi. Khi lệnh đóng, khoản lỗ có thể lớn hơn hoặc nhỏ hơn. Quan trọng! Nếu bạn dùng Trailing Stop, cắt lỗ của lệnh thay đổi theo từng tick, nhưng lot không thể thay đổi. Công thức và mã: https://expforex.com/vi/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-5 |
LotBalancePcnt RiskLot LotBalancePercent | Phần trăm cho Autolot. Tỷ lệ phần trăm cho chức năng lot động (Autolot). Nếu RiskLot = 0, thì lệnh (Volume) sẽ được mở theo tham số Lot cố định. Nếu RiskLot khác 0, thì lệnh sẽ được mở với lot được tính động theo ký quỹ tự do (Autolot). |
RiskRate | Tỷ giá tiền tệ của bạn so với đô la (hoặc đồng tiền tài khoản của bạn). Mặc định, RiskRate = 0, nghĩa là Chuyên gia cố vấn (Expert Advisor) sẽ cố gắng tìm đúng tỷ giá trong Market Review. Để Autolot hoạt động tốt với tất cả cặp tiền tệ, bạn cần BẬT “Show All Currency Pairs” trong Bảng Market Watch. |
MaxLot | Lot tối đa mà Chuyên gia cố vấn có thể mở khi tính Autolot và Martingale cho vị thế chính đầu tiên. |
Martin | Martingale. Kiểu nhân lot tiêu chuẩn sau mỗi lệnh thua. Nếu Martin = 1, thì không kích hoạt martingale (Lot cố định). Nếu Martin = 0, thì Chuyên gia cố vấn không thể mở lệnh tiếp theo. Nếu Martin = 2, thì lot đầu = 0.1, lot thứ hai = 0.2, sau đó 0.4 – 0.8 – 1.6 – 3.2 – 6.4….. Nếu Martin = 0.5, thì lot đầu = 1, lot thứ hai = 0.5, sau đó 0.25 – 0.125. |
Bạn cần mã không?
Mã Tính Autolot Hàm Code:
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)); }
Hàm Tính Autolot với Cắt lỗ (StopLoss):
Nếu bạn muốn bổ sung chức năng Autolot dựa trên cắt lỗ trong EA của mình, bạn có thể tải mã của chúng tôi:
StopLosssd = Cắt lỗ tính theo point
Các Biến Bên Ngoài:
Lots = 0.1; // Lot cố định
DynamicLotStopLoss = // true/false
LotBalancePcnt (RiskLot) = 20; // % ký quỹ tự do
Hàm:
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)); }
Câu Hỏi?
Nếu bạn có bất kỳ thắc mắc nào, xin vui lòng hỏi. Chúng tôi không bán “mèo trong túi” (không rõ chất lượng).
Mỗi sản phẩm của chúng tôi đều có thể được kiểm thử trước khi mua.
Chúng tôi trân trọng sự quan tâm và ủng hộ của bạn đối với các sản phẩm, đồng thời luôn nỗ lực duy trì tiêu chuẩn chất lượng cao.
Cảm ơn bạn đã đồng hành cùng chúng tôi!
Bạn có thắc mắc?
2 responses to “Bí quyết Autolot của tôi. Lô động hay Autolot. Rủi ro từ sự cân bằng.”
-
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.
-
To double the lot size being copied from the master to the client account using the settings in the Copylot tool from expforex.com, you can adjust the “ratio of the lot” setting. Here’s how to do it:
Open the Copylot Settings:
Ensure you have the Copylot software installed on both the master and client terminals. Open the settings for the Copylot on the client terminal.
Adjust the Lot Ratio:Look for the setting related to “KoefLot” This setting allows you to multiply the lot size of the trades being copied.
Set this ratio to 2.0 to double the lot size. For example, if the master account opens a trade of 0.03 lots, the client account will open a trade of 0.06 lots.
Save and Apply Settings:Save the settings after adjusting the lot ratio. Ensure that the Copylot tool is actively running and connected between the master and client terminals.
-
Bài viết này cũng có sẵn bằng: English Українська Portuguese Español Deutsch Chinese Русский Français Italiano Türkçe 日本語 한국어 العربية Indonesian ไทย Tiếng Việt
Leave a Reply