Алерт в индикатор. Как вставить Alert и Arrow в индикатор?
Маркет MQL5. Проблемы и ошибки при установке эксперта и их решение
Описание
В этой статье я объясню свои методы расчета размера лота на основе процента (Риск в %) от Свободной Маржи для различных валютных пар и различных типов депозитов. Автолот или Динамический лот от баланса. РискМенеджер. Покажу вам мой код Автолота.
Начнем:
Основные Понятия:
Сначала давайте выделим несколько понятий, используемых в этом расчете:
Свободная Маржа ( AccountFreeMargin() ) – средства, не используемые в качестве залога в открытых позициях. Свободная маржа рассчитывается по формуле: Свободная Маржа = Текущий Баланс Депозита – Требуемая Маржа для Открытых Позиции. Этот индикатор определяет количество сделок, которые можно открыть в текущий момент.
Ask — это цена, по которой вы покупаете определенное количество финансового инструмента у брокера. Брокер продает его вам по этой цене. При торговле на рынке Forex вы будете сталкиваться с этим типом цены повсюду: от торгового терминала до отчетов по акциям и аналитических статей о финансовых рынках.
Bid — это цена, по которой вы продаете определенное количество финансового инструмента своему брокеру. Брокер покупает его у вас по этой цене. При торговле на рынке Forex вы будете сталкиваться с этим типом цены везде, где ведутся обсуждения международного рынка Forex: от торгового терминала и обменных курсов на сайте вашего брокера до отчетов по акциям и аналитических статей на международных финансовых рынках.
Кредитное плечо — это отношение суммы залога к сумме, которую вы берете взаймы. При первоначальном выборе кредитного плеча вы выбираете его размер, который указывает множитель, на который депозит Клиента будет увеличен для проведения торговых операций на рынке Forex. Клиент может выбрать кредитное плечо от 1:1 до 1:500, что означает, что клиент может торговать только своими собственными средствами или запросить увеличение своего депозита до 500 раз, чтобы войти на рынок с этой суммой. Кредитное плечо, как отношение суммы, с которой трейдер входит на рынок, к размеру его депозита, играет ключевую роль в процессе торговли, поскольку позволяет трейдеру значительно увеличить свой капитал.
Валютная Пара — это обозначение двух валют, которые вместе образуют обменный курс. Валютная пара служит объектом для финансовых транзакций. Валютная пара обозначается последовательными обозначениями двух валют, составляющих пару, записанными либо вместе, либо разделенными косой чертой в следующей форме: базовая валюта / котируемая валюта. Базовая валюта — это первая валюта, которую покупают и продают, а котируемая валюта используется для выражения цены базовой валюты. Валютная пара является фундаментальным понятием на рынке иностранной валюты, присутствующим повсюду, касающимся этого рынка: от рыночных отчетов до торгового терминала.
Размер Лота — объем базовой валюты, товара или количество акций, указанных в спецификации контракта. Размер лота зависит от суммы валюты, указанной в контракте, и является единицей измерения для определения размера торгового контракта. Лот имеет определенный размер, который используется для определения количества валюты, используемой для финансовых транзакций на рынке Forex. Для выполнения транзакции Клиент определяет размер транзакции, выраженный в количестве лотов. Объем торговой транзакции указывает, сколько валюты будет составлять транзакцию. Лот — это размер контракта, фиксированное количество валюты, используемое в торговле Forex.
Обменный курс между двумя валютами определяется взаимодействием спроса и предложения в конкретный момент времени.
Этот процесс известен как котировка валюты, и котировки могут быть как прямыми, так и обратными.
Прямая котировка отражает цену иностранной валюты в единицах национальной валюты.
Большинство обменных курсов выражены как прямые котировки доллара США по отношению к валютам различных стран.
Например, USD/UAH—30.70 означает, что один доллар США стоит 30.70 украинских гривен,
а USD/CHF—1.0850 указывает, что один доллар США равен 1.0850 швейцарских франков.
Обратная котировка выражает стоимость национальной валюты в терминах иностранной валюты.
Исторически валюты, такие как британский фунт, евро, австралийский доллар и новозеландский доллар, котировались таким образом.
Например, EUR/USD—1.3374 означает, что один евро стоит 1.3374 доллара США,
а GBP/USD—1.5970 означает, что один британский фунт равен 1.5970 доллара США.
Существует также понятие кросс-курса, когда доллар США не является ни базовой, ни котируемой валютой.
Примеры включают EUR/JPY, GBP/CHF и EUR/GBP.
Техническая Сторона
- NormalizeDouble — округляет число с плавающей запятой до указанной точности.
- MODE_LOTSIZE — размер контракта в базовой валюте инструмента.
- MODE_LOTSTEP — шаг изменения размера лота.
- AccountCurrency — возвращает название валюты текущего счета.
- MathFloor — функция возвращает наибольшее целое число, меньшее или равное x.
Важно: Чтобы обеспечить точность всех расчетов, активируйте все символы в панели “Наблюдение за рынком” (MarketWatch):
Моя Формула Расчета для Валюты Счета
Моя формула расчета выглядит следующим образом:
Депозит USD
Депозит USD Прямая Котировка ()
Лот = Свободная Маржа * Риск * Кредитное Плечо / 100 / Размер Контракта
Депозит USD Обратная Котировка()
Лот = Свободная Маржа * Риск * Кредитное Плечо / Ask / 100 / Размер Контракта
Депозит USD Кросс-Курс:
Вариант 1: Если существует текущая цена базовой валюты + USD (например, если расчетная пара AUDCAD, тогда текущая цена базовой валюты = AUDUSD)
Лот = Свободная Маржа * Риск * Кредитное Плечо / (Текущая Цена Базовой Валюты + USD) / 100 / Размер Контракта
Вариант 2: Если нет текущей цены базовой валюты + USD (например, CADJPY)
Лот = Свободная Маржа * Риск * Кредитное Плечо / 100 / Размер Контракта
Депозит EUR
Депозит EUR Прямая Котировка
Лот = Свободная Маржа * Риск * Кредитное Плечо / 100 / Размер Контракта
Депозит EUR Кросс-Курс:
Текущая цена = EUR + котируемая валюта (например, если расчетная пара AUDCAD, тогда текущая цена = котируемая валюта = EURAUD)
Лот = Свободная Маржа * Риск * Кредитное Плечо / (текущая цена EUR + котируемая валюта) / 100 / Размер Контракта
Депозит UAH и Другие
Депозит UAH Обратная Котировка (например, USDUAH)
Лот = MathFloor(Свободная Маржа * Риск * Кредитное Плечо / 100 / Текущая Цена / Размер Контракта / Шаг Лота / 20) * Шаг Лота
Депозит UAH Кросс (например, EURGBP)
Текущая цена = MarketInfo(StringSubstr(Symbol(), 0, 3) + UAH + StringSubstr(Symbol(), 6), MODE_BID);
if(pr != 0) Lot2 = MathFloor(Свободная Маржа * Риск * Кредитное Плечо / Текущая Цена / 100 / Размер Контракта / Шаг Лота) * Шаг Лота;
иначе Лот = MathFloor(Свободная Маржа * Риск * Кредитное Плечо / 100 / Размер Контракта / Шаг Лота) * Шаг Лота;
Порядок этих функций был определен путем расчета параметров на различных депозитах.
Если у вас есть предложения по этим расчетам, пожалуйста, поделитесь своими функциями Autolot при заказе программирования.
Или Фриланс: Индивидуальное Программирование на MetaTrader и MQL! Завершить?
Внешние Переменные Функция Расчета автолот:
Лоты | Фиксированный лот для открытия позиции. |
RiskLotType TypeAutolot | Тип Расчета Автолот : BALANCE (Риск от Баланса) — Автолот рассчитывается от текущего баланса. Расчет лота основан на балансе счета. Если на счете есть открытые позиции, следующий лот будет примерно таким же, потому что баланс не уменьшается от количества текущих открытых позиций! FREEMARGIN (Риск от Свободной Маржи) — стандартный расчет лота от текущей свободной маржи заключается в том, что чем больше открытых позиций на счете, тем меньше лот рассчитывается для следующей позиции. Это происходит потому, что при открытии позиции свободная маржа уменьшается, поэтому каждый новый открытый лот имеет меньший размер при расчете Автолот . Тип Расчета Риска для Опции RiskLot: Доступные режимы: RiskLotType = 0, // Риск от Свободной Маржи RiskLotType = 1, // Риск от Баланса |
DynamicLot | Динамический лот, Autolot, для открытой позиции. Вы можете включить динамический расчет лота как процент от свободной маржи и других факторов. Расчет Нашего Автолот : Формула и код: https://expforex.com/ru/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-4 |
DynamicLotStopLoss | Риск от SL — рассчитывает автоматический лот с учетом Stop Loss. Максимальный убыток в процентах от баланса при закрытии сделки на Stop Loss. При расчете лота наш Эксперт-советник учитывает стоп-лосс в момент открытия сделки. Если сделка закрывается на стоп-лосс, убыток от этой сделки будет равен проценту от баланса на момент открытия сделки. Важно! Если ваш стоп-лосс изменяется после открытия сделки, размер лота сделки изменить нельзя. При закрытии сделки убыток может быть больше или меньше. Важно! Если вы используете Trailing Stop, стоп-лосс сделки изменяется с каждым тиком, но размер лота изменить нельзя. Формула и код: https://expforex.com/ru/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-5 |
LotBalancePcnt RiskLot LotBalancePercent | Процент для Автолот . Процент для функции динамического лота (Автолот ). Если RiskLot = 0, то лот сделки (Объем) будет рассчитан по параметру Lot. Если RiskLot не равен 0, то сделка в клиентском терминале будет открыта с лотом как процент от свободной маржи клиента (Autolot). |
RiskRate | Курс вашей валюты по отношению к доллару (или валюте вашего счета). По умолчанию, RiskRate = 0, что означает, что Эксперт-советник будет пытаться найти правильный курс в Обзоре Рынка. Чтобы Автолот работал корректно со всеми валютными парами, необходимо включить “Показать все валютные пары” в Наблюдении за рынком. |
MaxLot | Максимальный лот, который Эксперт-советник может открыть при расчете Автолот и Мартингейла для первой основной позиции. |
Martin | Мартингейл. Стандартное умножение лота последней закрытой позиции при убытке. Если Martin = 1, то мартингейл не активируется (фиксированные лоты). Если Martin = 0, то Эксперт-советник не может открыть следующую позицию. Если 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. |
Вам нужен код?
Расчет Автолот Функция Кода:
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) // Функция возвращает размер лота
{
string Author = "Автор шаблона функции: www.expforex.com";
string lotcalc;
double pr;
string Valdepo = AccountCurrency();
// Если MM включен, то определяем размер лота
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 Автолот :
Если вы хотите добавить функциональность Stop Loss Autolot в ваш EA, вы можете скачать наш код:
StopLosssd = Stop Loss в пунктах
Внешние Переменные:
Лоты = 0.1; // Фиксированный лот
DynamicLotStopLoss = // true/false
LotBalancePcnt (RiskLot) = 20; // % свободной маржи
Функция:
double GetSizeLotStopLoss(double StopLosssd=1) // Функция возвращает размер лота { string Author = "Автор шаблона функции: www.expforex.com"; string Valdepo = AccountCurrency(); // Если MM включен, то определяем размер лота 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); // Стоимость 1 пипса для 1 лота 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