การแจ้งเตือนในตัวบ่งชี้ วิธีการแทรกการแจ้งเตือนและลูกศรลงในตัวบ่งชี้ของคุณ?
ตลาด MQL5 (Market). ปัญหาและข้อผิดพลาดในการติดตั้งที่ปรึกษาผู้เชี่ยวชาญ (Expert Advisor) และแนวทางแก้ไข
Description
ในบทความนี้ ฉันจะอธิบายวิธีการคำนวณขนาดล็อตจากเปอร์เซ็นต์ (Risk in %) ของ Free Margin ในคู่สกุลเงินต่างๆ และเงินฝากหลายประเภท Autolot หรือการตั้ง Lot แบบไดนามิกจากยอดคงเหลือ RiskManager ฉันจะแสดงโค้ด Autolot ของฉันให้ดู
มาเริ่มกันเลย:
Basic Concepts:
ก่อนอื่น มาทบทวนแนวคิดบางอย่างที่ใช้ในการคำนวณครั้งนี้:
Free Margin ( AccountFreeMargin() ) – คือจำนวนเงินที่ยังไม่ถูกใช้เป็นหลักประกันในออเดอร์ที่เปิดอยู่ โดยคำนวณจากสูตร: Free Margin = ยอดคงเหลือปัจจุบัน – มาร์จิ้นที่ต้องใช้สำหรับออเดอร์ที่เปิดอยู่ ค่านี้จะบ่งบอกว่าคุณสามารถเปิดออเดอร์เพิ่มเติมได้มากน้อยแค่ไหนในขณะนั้น
Ask คือราคาที่คุณจะซื้อเครื่องมือทางการเงินจากโบรกเกอร์ โดยโบรกเกอร์จะขายให้คุณในราคานี้ เมื่อเทรดในตลาด Forex คุณจะพบเห็นราคาประเภทนี้ทั่วไป ตั้งแต่ในเทอร์มินัลการเทรดไปจนถึงรายงานด้านตลาดและบทวิเคราะห์ต่างๆ
Bid คือราคาที่คุณจะขายเครื่องมือทางการเงินให้กับโบรกเกอร์ โดยโบรกเกอร์จะซื้อจากคุณในราคานี้ เมื่อเทรดในตลาด Forex คุณจะพบเห็นราคาประเภทนี้ในทุกที่ที่มีการพูดถึงตลาด Forex นานาชาติ ตั้งแต่เทอร์มินัลการเทรดจนถึงรายงานด้านตลาดและบทวิเคราะห์ต่างๆ
Leverage คืออัตราส่วนระหว่างเงินที่ใช้เป็นหลักประกันกับเงินที่ยืมมา เมื่อคุณเลือกเลเวอเรจตอนเริ่มต้น คุณกำหนดขนาดเลเวอเรจซึ่งบ่งบอกว่าจำนวนเงินฝากของลูกค้าจะถูกขยายด้วยตัวคูณเท่าใด (เช่น 1:1 ถึง 1:500) เลเวอเรจช่วยให้เทรดเดอร์สามารถเพิ่มขนาดเงินทุนในการเทรดและเข้าสู่ตลาดด้วยจำนวนเงินที่มากขึ้น เลเวอเรจมีความสำคัญอย่างยิ่งในการเทรด เพราะทำให้ผู้เทรดเพิ่มเงินทุนได้อย่างมาก
Currency Pair คือการกำหนดคู่สกุลเงินสองสกุลที่ใช้ระบุอัตราแลกเปลี่ยน คู่สกุลเงินเป็นวัตถุสำหรับทำธุรกรรมทางการเงิน โดยเขียนชื่อสกุลเงินสองสกุลเรียงต่อกันหรือคั่นด้วยเครื่องหมายทับในรูปแบบ: base currency / quote currency สกุลเงินตัวแรกคือสกุลเงินหลักที่เราซื้อและขาย ส่วนสกุลเงินที่สองเป็นสกุลเงินอ้างอิงที่ใช้แสดงราคาของสกุลเงินหลัก นี่เป็นแนวคิดพื้นฐานในตลาดแลกเปลี่ยนเงินตราต่างประเทศ พบเห็นได้ทั่วไปในรายงานตลาดไปจนถึงเทอร์มินัลการเทรด
Lot Size คือปริมาณสกุลเงินหลัก สินค้าโภคภัณฑ์ หรือจำนวนหุ้นตามที่ระบุในสเปคสัญญา ขนาดล็อตขึ้นอยู่กับจำนวนเงินสกุลที่ระบุในสัญญาและเป็นหน่วยวัดปริมาณในการกำหนดขนาดของสัญญาการเทรด ล็อตจะมีขนาดเฉพาะ ซึ่งใช้ในการระบุจำนวนสกุลเงินที่ใช้ทำธุรกรรมทางการเงินในตลาด Forex เมื่อต้องการทำธุรกรรม ผู้เทรดจะกำหนดขนาดธุรกรรมในหน่วยล็อต โดยปริมาณของออเดอร์จะแสดงว่าต้องใช้สกุลเงินเท่าไหร่ในการทำธุรกรรม ล็อตคือขนาดสัญญา ซึ่งเป็นจำนวนเงินคงที่ที่ใช้ในการเทรด Forex
อัตราแลกเปลี่ยนระหว่างสองสกุลเงินถูกกำหนดโดยอุปสงค์และอุปทาน (supply and demand) ในช่วงเวลาหนึ่ง
กระบวนการนี้เรียกว่า การเสนอราคา (currency quoting) และอาจอยู่ในรูป direct หรือ reversed.
direct quotation จะแสดงราคาของสกุลเงินต่างประเทศเป็นจำนวนหน่วยของ สกุลเงินท้องถิ่น
ส่วนใหญ่ เรามักเห็นค่าเงินดอลลาร์สหรัฐฯ เมื่อเทียบกับสกุลเงินของประเทศอื่น ๆ ในรูป direct quotation
ตัวอย่างเช่น USD/UAH—30.70 หมายความว่า 1 ดอลลาร์สหรัฐ มีค่าเท่ากับ 30.70 ฮรีฟเนียยูเครน
และ USD/CHF—1.0850 หมายความว่า 1 ดอลลาร์สหรัฐ เท่ากับ 1.0850 ฟรังก์สวิส
reverse quotation คือการแสดงมูลค่าของ สกุลเงินท้องถิ่นในรูปของ สกุลเงินต่างประเทศ
โดยตามประวัติแล้วค่าเงินอย่าง ปอนด์อังกฤษ, ยูโร, ดอลลาร์ออสเตรเลีย และ ดอลลาร์นิวซีแลนด์ มักจะแสดงในรูปแบบนี้
ตัวอย่างเช่น EUR/USD—1.3374 หมายความว่า 1 ยูโร มีค่าเท่ากับ 1.3374 ดอลลาร์สหรัฐ
ในขณะที่ GBP/USD—1.5970 หมายความว่า 1 ปอนด์อังกฤษ เท่ากับ 1.5970 ดอลลาร์สหรัฐ
ยังมีแนวคิดของ cross exchange rate ที่สกุลเงินดอลลาร์สหรัฐไม่ได้เป็น base หรือ quote
ตัวอย่างเช่น EUR/JPY, GBP/CHF, และ EUR/GBP
Technical Side
- NormalizeDouble – ใช้สำหรับปัดตัวเลขทศนิยมให้ได้จำนวนตำแหน่งที่กำหนด
- MODE_LOTSIZE – ขนาดสัญญาในสกุลเงินหลักของเครื่องมือเทรด
- MODE_LOTSTEP – ระยะห่างขั้นของขนาดล็อตที่สามารถเปลี่ยนได้
- AccountCurrency – คืนชื่อสกุลเงินบัญชีปัจจุบัน
- MathFloor – ฟังก์ชันที่คืนค่าสำหรับจำนวนเต็มที่ไม่เกินจากค่าที่กำหนด (ปัดลง)
สิ่งสำคัญ: เพื่อให้การคำนวณถูกต้อง ควรเปิดใช้สัญลักษณ์ทั้งหมดใน “Market Watch” panel:
My Calculation Formula for Account Currency
สูตรการคำนวณของฉันเป็นดังนี้:
USD Deposit
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: ถ้ามีราคาปัจจุบันของ Base Currency + USD (เช่น ถ้าคู่คำนวณคือ AUDCAD ให้ใช้ราคาปัจจุบันของ AUDUSD)
Lot = Free Margin * Risk * Leverage / (Current Base Currency Price + USD) / 100 / Contract Size
Option 2: ถ้าไม่มีราคาปัจจุบันของ Base Currency + USD (เช่น CADJPY)
Lot = Free Margin * Risk * Leverage / 100 / Contract Size
EUR Deposit
Deposit EUR Direct Quote
Lot = Free Margin * Risk * Leverage / 100 / Contract Size
Deposit EUR Cross Rate:
Current price = EUR + quote currency (เช่น ถ้าคู่คำนวณคือ AUDCAD ราคาปัจจุบันของ quote currency คือ EURAUD)
Lot = Free Margin * Risk * Leverage / (current price EUR + quote currency) / 100 / Contract Size
UAH Deposit and Other
Deposit UAH Back Quote (เช่น USDUAH)
Lot = MathFloor(Free Margin * Risk * Leverage / 100 / Current Price / Contract Size / Lot Step / 20) * Lot Step
Deposit UAH Cross (เช่น 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;
ลำดับของฟังก์ชันเหล่านี้เกิดจากการคำนวณตามพารามิเตอร์ในเงินฝากต่าง ๆ
หากคุณมีข้อเสนอแนะเพิ่มเติมสำหรับการคำนวณนี้ โปรดแจ้ง Autolot functions ของคุณเมื่อ สั่งเขียนโปรแกรม.
หรือ Freelance: Custom Programming on MetaTrader and MQL! Finish?
External Variables Autolot Calculation Function:
Lots | ล็อตคงที่สำหรับเปิดออเดอร์ |
RiskLotType TypeAutolot |
ประเภทการคำนวณ Autolot: BALANCE (Risk from Balance) – Autolot คำนวณจากยอดคงเหลือในบัญชี โดยจะอิงจากยอดคงเหลือเป็นหลัก หากมีออเดอร์เปิดอยู่ ยอดบาลานซ์จะไม่ลดลงจากจำนวนออเดอร์ที่เปิด! FREEMARGIN (Risk from Free Margin) – การคำนวณล็อตจาก Free Margin โดยตรง ยิ่งมีการเปิดออเดอร์มากขึ้น Free Margin จะน้อยลง ทำให้ล็อตถัดไปเล็กลง ประเภทการคำนวณ Risk สำหรับตัวเลือก RiskLot: โหมดที่ใช้ได้: RiskLotType = 0, // Risk from Free Margin RiskLotType = 1, // Risk from Balance |
DynamicLot |
Lot แบบไดนามิก (Autolot) สำหรับเปิดออเดอร์ คุณสามารถเปิดใช้งานการคำนวณล็อตเป็นเปอร์เซ็นต์ของ Free Margin และปัจจัยอื่น ๆ ได้ การคำนวณ Autolot ของเรา: สูตรและโค้ด: https://expforex.com/th/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-4 |
DynamicLotStopLoss |
Risk จากจุดหยุดขาดทุน (Stop Loss) – คำนวณล็อตอัตโนมัติ โดยพิจารณาจุดหยุดขาดทุน ขาดทุนสูงสุดเป็นเปอร์เซ็นต์ของบาลานซ์ถ้ามีการปิดออเดอร์ด้วย Stop Loss เมื่อคำนวณล็อต Expert Advisor จะดูจุดหยุดขาดทุนในขณะเปิดออเดอร์ ถ้าออเดอร์ปิดด้วย Stop Loss การขาดทุนจะเท่ากับเปอร์เซ็นต์หนึ่งของบาลานซ์ ณ เวลาที่เปิดออเดอร์ สำคัญ! หากคุณเปลี่ยน Stop Loss หลังเปิดออเดอร์แล้ว ขนาดล็อตในออเดอร์จะไม่เปลี่ยนตาม ทำให้ผลขาดทุนจริงอาจแตกต่าง สำคัญ! หากคุณใช้ Trailing Stop จุดหยุดขาดทุนจะเลื่อนทุกครั้งที่ราคาเคลื่อนไหว แต่ขนาดล็อตจะไม่เปลี่ยน สูตรและโค้ด: https://expforex.com/th/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-5 |
LotBalancePcnt RiskLot LotBalancePercent |
เปอร์เซ็นต์สำหรับ Autolot เป็นเปอร์เซ็นต์สำหรับฟังก์ชันล็อตไดนามิก (Autolot) ถ้า RiskLot = 0 ออเดอร์จะเปิดด้วยล็อต Lot ตามค่าคงที่ ถ้า RiskLot ไม่เท่ากับ 0 ออเดอร์ที่เปิดจะถูกคำนวณล็อตตามเปอร์เซ็นต์ (Autolot) |
RiskRate |
อัตราแลกเปลี่ยนของสกุลเงินบัญชีเทียบกับดอลลาร์ (หรือสกุลเงินบัญชีของคุณ) ค่าเริ่มต้น RiskRate = 0 หมายความว่า Expert Advisor จะพยายามค้นหาอัตรานี้จาก Market Review โดยอัตโนมัติ สำหรับการใช้งาน Autolot กับทุกคู่สกุลเงิน คุณต้องเปิด “Show All Currency Pairs” ใน Market Watch. |
MaxLot | ขนาดล็อตสูงสุดที่ Expert Advisor สามารถเปิดได้ (ทั้งการคำนวณ Autolot และ Martingale สำหรับออเดอร์แรก) |
Martin |
Martingale การคูณล็อตตามมาตรฐานเมื่อเกิดการขาดทุนจากออเดอร์ก่อนหน้า ถ้า Martin = 1 จะไม่เปิดใช้งาน Martingale (ล็อตคงที่) ถ้า Martin = 0 EA จะไม่สามารถเปิดออเดอร์ถัดไป ถ้า Martin = 2 ล็อตแรก = 0.1, ล็อตที่สอง = 0.2, ต่อไป = 0.4 – 0.8 – 1.6 – 3.2 – 6.4…. ถ้า Martin = 0.5 ล็อตแรก = 1, ล็อตที่สอง = 0.5, ต่อไป = 0.25 – 0.125 |
ต้องการโค้ดใช่ไหม?
Autolot Calculation Code 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() * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); else if (StringSubstr(Symbol(), 3, 3) == "USD") Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / Ask / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); else { pr = MarketInfo(StringSubstr(Symbol(), 0, 3) + "USD", MODE_ASK); if (pr != 0) Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / pr / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); else Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); } } if (Valdepo == "EUR") { if (StringSubstr(Symbol(), 0, 3) == "EUR") Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); else { pr = MarketInfo("EUR" + StringSubstr(Symbol(), 0, 3), MODE_BID); if (pr != 0) Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() * pr / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); else Lot2 = NormalizeDouble(AccountFreeMargin() * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); } } if (Valdepo == "UAH") { if (StringSubstr(Symbol(), 0, 3) == "USD") Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePcnt * AccountLeverage() / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); else if (StringSubstr(Symbol(), 3, 3) == "USD") Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePcnt * 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 * LotBalancePcnt * AccountLeverage() / pr / 100 / MarketInfo(Symbol(), MODE_LOTSIZE), lotdig); else Lot2 = NormalizeDouble(AccountFreeMargin() / 40 * LotBalancePcnt * 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)); }
Stoploss Autolot Calculation Function:
หากคุณต้องการเพิ่มฟังก์ชัน Autolot โดยคำนวณร่วมกับ Stoploss ใน EA ของคุณ สามารถดาวน์โหลดโค้ดได้ที่นี่:
StopLosssd = Stop Loss เป็นจุด
ตัวแปรภายนอก (External Variables):
Lots = 0.1; // ล็อตคงที่
DynamicLotStopLoss = // true/false
LotBalancePcnt (RiskLot) = 20; // % ของ Free Margin
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?
ถ้าคุณมีคำถามใด ๆ โปรดสอบถาม เราไม่ขายสินค้าแบบสุ่มสี่สุ่มห้า
สินค้าทุกตัวของเราสามารถทดสอบได้ก่อนซื้อ
เราขอขอบคุณที่คุณสนใจและสนับสนุนสินค้าเราอย่างต่อเนื่อง และเราจะพยายามรักษาคุณภาพให้สูงอยู่เสมอ
ขอบคุณที่อยู่กับเรา!
มีคำถามไหม?
2 ตอบกลับไปที่ “ความลับ Autolot ของฉัน ล็อตไดนามิกหรือ Autolot ความเสี่ยงจากความสมดุล”
-
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.
โพสต์นี้มีให้บริการใน: English Українська Portuguese Español Deutsch Chinese Русский Français Italiano Türkçe 日本語 한국어 العربية Indonesian ไทย Tiếng Việt
ใส่ความเห็น