표시기의 경고. 인디케이터에 알림 및 화살표를 삽입하는 방법은 무엇인가요?
Market MQL5. Expert Advisor 설치 시 발생하는 문제 및 오류와 해결책
설명
이 기사에서는 다양한 통화쌍과 다양한 유형의 예금에 걸쳐 Free Margin의 백분율(Risk in %)을 기반으로 로트 크기를 계산하는 방법에 대해 설명하겠습니다. Autolot 또는 잔액에서의 동적 로트. RiskManager. 제 Autolot 코드를 보여드리겠습니다.
시작해봅시다:
기본 개념:
먼저, 이 계산에 사용되는 몇 가지 개념을 강조해 보겠습니다:
Free Margin ( AccountFreeMargin() ) – 열린 포지션에서 담보로 사용되지 않는 자금. Free Margin은 다음 공식을 사용하여 계산됩니다: Free Margin = 현재 예금 잔액 – 열린 포지션에 필요한 마진. 이 지표는 현재 순간에 열 수 있는 거래의 수를 결정합니다.
Ask는 브로커로부터 특정 수량의 금융 상품을 구매하는 가격입니다. 브로커는 이 가격으로 이를 판매합니다. Forex 시장에서 거래할 때, 거래 터미널에서부터 주식 보고서 및 금융 시장에 대한 분석 기사에 이르기까지 이 유형의 가격을 어디에서나 접하게 될 것입니다.
Bid는 브로커에게 특정 수량의 금융 상품을 판매하는 가격입니다. 브로커는 이 가격으로 이를 구매합니다. Forex 시장에서 거래할 때, 국제 Forex 시장에 대한 논의가 이루어지는 곳 어디에서나 이 유형의 가격을 접하게 될 것입니다: 거래 터미널에서부터 브로커 웹사이트의 환율, 국제 금융 시장에 대한 주식 보고서 및 분석 기사에 이르기까지.
Leverage는 담보 금액과 차입 금액의 비율입니다. 초기 레버리지를 선택할 때, 거래를 수행하기 위해 클라이언트의 예금을 몇 배로 늘릴 것인지를 나타내는 레버리지 크기를 선택합니다. 클라이언트는 1:1에서 1:500까지 레버리지를 선택할 수 있으며, 이는 클라이언트가 자신의 자금만으로 거래할 수 있거나 예금을 최대 500배까지 늘려 이 금액으로 시장에 진입할 수 있음을 의미합니다. 레버리지는 거래 프로세스에서 중요한 역할을 합니다. 이는 트레이더가 자본을 크게 늘릴 수 있게 해주기 때문입니다.
통화쌍은 함께 환율을 형성하는 두 통화의 표기입니다. 통화쌍은 금융 거래의 대상이 됩니다. 통화쌍은 기본 통화와 표시 통화의 연속적인 표기로 표시되며, 다음 형식으로 함께 또는 슬래시로 구분하여 씁니다: 기본 통화 / 표시 통화. 기본 통화는 구매 및 판매되는 첫 번째 통화이며, 표시 통화는 기본 통화의 가격을 표현하는 데 사용됩니다. 통화쌍은 외환 시장의 기본 개념으로, 시장 보고서에서 거래 터미널에 이르기까지 이 시장과 관련된 모든 곳에 존재합니다.
Lot Size – 계약 명세서에 지정된 기본 통화, 상품 또는 주식 수량의 규모. 로트 크기는 계약에 지정된 통화의 양에 따라 달라지며, 거래 계약의 크기를 결정하는 측정 단위입니다. 로트는 금융 거래에서 사용되는 특정 크기를 가지며, Forex 거래에서 거래 계약의 크기를 결정하는 데 사용됩니다. 거래를 실행하기 위해 클라이언트는 거래 크기를 로트 수로 결정합니다. 거래의 거래량은 거래를 구성할 통화의 양을 나타냅니다. 로트는 계약의 크기이며, Forex 거래에서 사용되는 고정된 통화 금액입니다.
두 통화 간의 환율은 특정 순간의 수요와 공급의 상호 작용에 의해 결정됩니다.
이 과정을 통화 견적이라고 하며, 견적은 직접 또는 역방향일 수 있습니다.
직접 견적은 국가 통화 단위로 외국 통화의 가격을 반영합니다.
대부분의 환율은 다양한 국가의 통화에 대한 미국 달러의 직접 견적으로 표현됩니다.
예를 들어, USD/UAH—30.70는 1 미국 달러가 30.70 우크라이나 그리브나에 해당함을 의미하고,
USD/CHF—1.0850는 1 미국 달러가 1.0850 스위스 프랑에 해당함을 나타냅니다.
역방향 견적은 국가 통화의 가치를 외국 통화 단위로 표현합니다.
역사적으로, 영국 파운드, 유로, 호주 달러, 뉴질랜드 달러와 같은 통화가 이러한 방식으로 견적되었습니다.
예를 들어, EUR/USD—1.3374는 1 유로가 1.3374 미국 달러에 해당함을 의미하고,
GBP/USD—1.5970는 1 영국 파운드가 1.5970 미국 달러에 해당함을 나타냅니다.
또한, 미국 달러가 기본 통화도 표시 통화도 아닌 교차 환율 개념도 있습니다.
예를 들어, EUR/JPY, GBP/CHF, EUR/GBP 등이 있습니다.
기술적 측면
- NormalizeDouble – 부동 소수점 숫자를 지정된 정밀도로 반올림합니다.
- MODE_LOTSIZE – 도구 기본 통화의 계약 크기.
- MODE_LOTSTEP – 로트 크기 변경 단계.
- AccountCurrency – 현재 계좌의 통화 이름을 반환합니다.
- MathFloor – 함수는 x 이하의 가장 큰 정수를 반환합니다.
필수 사항: 모든 계산이 정확하도록 “Market Watch” 패널에서 모든 심볼을 활성화하세요 :
계좌 통화를 위한 나의 계산 공식
나의 계산 공식은 다음과 같습니다:
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:
옵션 1: 기본 통화 + USD의 현재 가격이 있는 경우 (예: 정산 쌍이 AUDCAD인 경우, 기본 통화의 현재 가격 = AUDUSD)
Lot = Free Margin * Risk * Leverage / (Current Base Currency Price + USD) / 100 / Contract Size
옵션 2: 기본 통화 + USD의 현재 가격이 없는 경우 (예: CADJPY)
Lot = Free Margin * Risk * Leverage / 100 / Contract Size
EUR 예금
Deposit EUR Direct Quote
Lot = Free Margin * Risk * Leverage / 100 / Contract Size
Deposit EUR Cross Rate:
현재 가격 = EUR + 표시 통화 (예: 정산 쌍이 AUDCAD인 경우, 표시 통화의 현재 가격 = EURAUD)
Lot = Free Margin * Risk * Leverage / (current price EUR + 표시 통화) / 100 / Contract Size
UAH 예금 및 기타
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)
현재 가격 = 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;
이러한 함수의 순서는 다양한 예금에서 매개변수를 계산하여 결정되었습니다.
이 계산에 대한 제안이 있으시면, 프로그래밍 주문 시 Autolot 함수를 공유해 주세요.
또는 프리랜스: MetaTrader 및 MQL 맞춤 프로그래밍! 완료?
외부 변수 Autolot 계산 함수:
Lots | 포지션을 열기 위한 고정 로트. |
RiskLotType TypeAutolot | Autolot 계산 유형: BALANCE (잔액에서의 리스크) – Autolot은 현재 잔액에서 계산됩니다. 로트 계산은 계좌 잔액을 기준으로 합니다. 계좌에 열린 포지션이 있는 경우, 다음 로트는 현재 열린 포지션 수로 인해 잔액이 감소하지 않기 때문에 대략 동일하게 유지됩니다! FREEMARGIN (Free Margin에서의 리스크) – 현재 free margin에서의 표준 로트 계산은 계좌에 열린 포지션이 많을수록 다음 포지션에 대해 계산된 로트가 작아집니다. 이는 포지션을 열 때 free margin이 감소하기 때문에 Autolot을 계산할 때마다 새로운 열린 포지션의 로트가 작아지기 때문입니다. RiskLot 옵션에 대한 리스크 계산 유형: 사용 가능한 모드: RiskLotType = 0, // Free Margin에서의 리스크 RiskLotType = 1, // 잔액에서의 리스크 |
DynamicLot | 동적 로트, Autolot, 열린 포지션을 위해. free margin의 백분율 및 기타 요소로 동적 로트 계산을 활성화할 수 있습니다. 우리의 Autolot 계산: 공식 및 코드: https://expforex.com/ko/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-4 |
DynamicLotStopLoss | SL에서의 리스크 – Stop Loss를 고려하여 자동 로트를 계산합니다. Stop Loss에서 거래를 마감할 때 잔액의 백분율로 최대 손실을 계산합니다. 로트를 계산할 때, 우리의 Expert Advisor는 거래를 열 때 Stop Loss를 고려합니다. 만약 거래가 Stop Loss에서 마감되면, 이 거래의 손실은 거래를 열 때의 잔액의 백분율과 동일합니다. 중요! 거래가 열린 후 Stop Loss가 변경되면, 거래의 로트 크기를 변경할 수 없습니다. 거래를 마감할 때 손실이 더 많거나 적을 수 있습니다. 중요! Trailing Stop을 사용하는 경우, 거래의 Stop Loss는 각 틱마다 변경되지만 로트 크기는 변경할 수 없습니다. 공식 및 코드: https://expforex.com/ko/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-5 |
LotBalancePcnt RiskLot LotBalancePercent | Autolot의 백분율. 동적 로트 (Autolot) 함수의 백분율. 만약 RiskLot = 0, 그러면 거래 로트(Volume)는 Lot 매개변수에 따라 계산됩니다. 만약 RiskLot가 0이 아닌 경우, 클라이언트 터미널에서 거래가 클라이언트의 free margin의 백분율로 열립니다 (Autolot). |
RiskRate | 달러(또는 계좌 통화)에 대한 귀하의 통화 비율. 기본값으로, RiskRate = 0이며, 이는 Expert Advisor가 Market Review에서 올바른 비율을 찾으려고 시도함을 의미합니다. Autolot이 모든 통화쌍과 잘 작동하려면, Market Watch에서 “모든 통화쌍 표시”를 활성화해야 합니다. |
MaxLot | Expert Advisor가 Autolot과 Martingale을 계산할 때 열 수 있는 최대 로트입니다. |
Martin | Martingale. 손실 시 마지막으로 닫힌 포지션의 로트를 표준으로 곱합니다. 만약 Martin = 1이면, martingale이 활성화되지 않습니다 (고정 로트). 만약 Martin = 0이면, Expert Advisor는 다음 포지션을 열 수 없습니다. 만약 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 계산 코드 함수:
input double Lots=0.01; //Lots --> 고정된 포지션 및 주문의 로트
input bool DynamicLot=false; //DynamicLot --> 사용 가능 마진에서 로트 계산
input bool DynamicLotStopLoss=false; //DynamicLotStopLoss --> 손절매 및 사용 가능 마진에서 로트 계산
input double LotBalancePercent=1; //LotBalancePercent --> 로트 계산을 위한 비율
extern double RiskRate=0; //RiskRate --> 로트 계산을 위한 통화 환율
input double MaxLot=999; //MaxLot --> 포지션 개설 시 최대 로트
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 계산 함수:
EA에 Stop Loss Autolot 기능을 추가하고 싶다면, 저희 코드를 다운로드할 수 있습니다:
StopLosssd = 포인트 단위의 Stop Loss
외부 변수:
Lots = 0.1; // 고정 로트
DynamicLotStopLoss = // true/false
LotBalancePcnt (RiskLot) = 20; // free margin의 %
함수:
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)); }
질문이 있으신가요?
질문이 있으시면 언제든지 문의해 주세요. 저희는 속임수를 쓰지 않습니다.
저희 제품은 구매 전에 테스트할 수 있습니다.
저희 제품에 대한 관심과 지원에 감사드리며, 높은 품질 기준을 유지하기 위해 노력하고 있습니다.
저희와 함께 해주셔서 감사합니다!
질문이 있으신가요?
2 responses to “ 나의 오토롯 비밀. 다이나믹 로트 또는 오토롯.”
-
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.
-
This post is also available in: English Українська Portuguese Español Deutsch Chinese Русский Français Italiano Türkçe 日本語 한국어
Leave a Reply