ความลับ Autolot ของฉัน ล็อตไดนามิกหรือ Autolot ความเสี่ยงจากความสมดุล

การแจ้งเตือนในตัวบ่งชี้ วิธีการแทรกการแจ้งเตือนและลูกศรลงในตัวบ่งชี้ของคุณ?
ตลาด MQL5 (Market). ปัญหาและข้อผิดพลาดในการติดตั้งที่ปรึกษาผู้เชี่ยวชาญ (Expert Advisor) และแนวทางแก้ไข
การแจ้งเตือนในตัวบ่งชี้ วิธีการแทรกการแจ้งเตือนและลูกศรลงในตัวบ่งชี้ของคุณ?
ตลาด 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

  1. NormalizeDouble – ใช้สำหรับปัดตัวเลขทศนิยมให้ได้จำนวนตำแหน่งที่กำหนด
  2. MODE_LOTSIZE – ขนาดสัญญาในสกุลเงินหลักของเครื่องมือเทรด
  3. MODE_LOTSTEP – ระยะห่างขั้นของขนาดล็อตที่สามารถเปลี่ยนได้
  4. AccountCurrency – คืนชื่อสกุลเงินบัญชีปัจจุบัน
  5. MathFloor – ฟังก์ชันที่คืนค่าสำหรับจำนวนเต็มที่ไม่เกินจากค่าที่กำหนด (ปัดลง)


สิ่งสำคัญ: เพื่อให้การคำนวณถูกต้อง ควรเปิดใช้สัญลักษณ์ทั้งหมดใน “Market Watch” panel:

แสดงสัญลักษณ์ทั้งหมดใน Market Watch เพื่อคำนวณ Autolot

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.
แสดงสัญลักษณ์ทั้งหมดใน Market Watch เพื่อคำนวณ Autolot
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 ความเสี่ยงจากความสมดุล”

  1. erik Avatar
    erik

    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


    Please wait, contacting ...

    คำเตือนความเสี่ยง:


    ผลการเทรดในอดีตไม่รับประกันผลลัพธ์ในอนาคต.

    การเทรดแลกเปลี่ยนเงินตราต่างประเทศด้วยการเทรดแบบมีมาร์จิ้นมีความเสี่ยงสูงและอาจไม่เหมาะสำหรับนักลงทุนทุกคน.

    โปรดทราบว่าการใช้หุ่นยนต์เทรด (trading robots) มีความเสี่ยงอย่างมาก และคุณอาจสูญเสียมากกว่าการลงทุนเริ่มต้นของคุณ.

    โปรดดำเนินการด้วยความระมัดระวัง ประเมินสถานการณ์ทางการเงินของคุณอย่างละเอียด และพิจารณาขอคำแนะนำจากผู้เชี่ยวชาญที่มีคุณสมบัติเหมาะสม.

    Disclaimer

    เว็บไซต์นี้ใช้คุกกี้เพื่อปรับปรุงประสบการณ์ของคุณ เมื่อคุณใช้เว็บไซต์นี้ แสดงว่าคุณยอมรับนโยบายการปกป้องข้อมูลและข้อจำกัดความรับผิดชอบของเรา
    อ่านเพิ่มเติม