การแจ้งเตือนในตัวบ่งชี้ วิธีการแทรกการแจ้งเตือนและลูกศรลงในตัวบ่งชี้ของคุณ?
ตลาด 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


ใส่ความเห็น