Алерт в індикаторі. Як вставити алерт і стрілку в індикатор? Сповіщення
Маркет MQL5. Проблема та помилки з установкою експерта та рішення
Опис
У цій статті я поясню свої методи розрахунку розміру лота на основі відсотка (Ризик у %) від Вільної Маржі для різних валютних пар та різних типів депозитів. Автолот або Динамічний лот з балансу. RiskManager. Я покажу вам свій код Автолот.
Почнемо:
Основні поняття:
Спочатку виділимо кілька понять, що використовуються в цьому розрахунку:
Вільна Маржа ( 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.
Необхідно: Для забезпечення точності всіх розрахунків активуйте всі символи в панелі “Market Watch” :
Моя формула розрахунку для валюти рахунку
Моя формула розрахунку виглядає так:
Депозит в 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 / Розмір Контракту / Крок Лота) * Крок Лота;
else Lot = MathFloor(Вільна Маржа * Ризик * Леверидж / 100 / Розмір Контракту / Крок Лота) * Крок Лота;
Порядок цих функцій було визначено шляхом розрахунку параметрів на різних депозитах.
Якщо у вас є пропозиції щодо цих розрахунків, будь ласка, поділіться своїми функціями Автолот при замовленні програмування.
Або Фріланс: Індивідуальне Програмування на MetaTrader та MQL! Завершити?
Зовнішні Змінні Функція Розрахунку Автолота:
Лоти | Фіксований лот для відкриття позиції. |
RiskLotType TypeAutolot | Тип Розрахунку Автолота: BALANCE (Ризик з Балансу) – Автолот розраховується з поточного балансу. Розрахунок лота базується на балансі рахунку. Якщо на рахунку є відкриті позиції, наступний лот буде приблизно таким самим, оскільки баланс не зменшується через кількість поточних відкритих позицій! FREEMARGIN (Ризик з Вільної Маржі) – Стандартний розрахунок лота з поточної вільної маржі полягає в тому, що чим більше відкритих позицій на рахунку, тим менший лот розраховується для наступної позиції. Це тому, що при відкритті позиції вільна маржа зменшується, тому кожна нова відкрита позиція має менший лот при розрахунку Автолота. Тип Розрахунку Ризику для Опції RiskLot: Доступні режими: RiskLotType = 0, // Ризик з Вільної Маржі RiskLotType = 1, // Ризик з Балансу |
DynamicLot | Динамічний лот, Автолот, для відкритої позиції. Ви можете увімкнути динамічний розрахунок лота як відсоток від вільної маржі та інших факторів. Розрахунок Нашого Автолота: Формула та код: https://expforex.com/ua/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-4 |
DynamicLotStopLoss | Ризик з SL – Розраховує автоматичний лот з урахуванням Stop Loss. Максимальний збиток як відсоток від балансу при закритті угоди на Stop Loss. При розрахунку лота наш Експертний Радник враховує Stop Loss на момент відкриття угоди. Якщо угода закривається на Stop Loss, збиток від цієї угоди дорівнюватиме відсотку від балансу на момент відкриття угоди. Важливо! Якщо ваш Stop Loss змінюється після відкриття угоди, розмір лота угоди змінити неможливо. При закритті угоди збиток може бути більше або менше. Важливо! Якщо ви використовуєте Trailing Stop, Stop Loss угоди змінюється з кожним тиком, але розмір лота змінити неможливо. Формула та код: https://expforex.com/ua/my-autolot-secrets-dynamiclot-autolot/#eb-table-content-5 |
LotBalancePcnt RiskLot LotBalancePercent | Відсоток для Автолота. Відсоток для функції динамічного лота (Автолот). Якщо RiskLot = 0, то лот угоди (Обсяг) буде розрахований за параметром Лот. Якщо RiskLot не дорівнює 0, то угода в терміналі клієнта буде відкрита з лотом як відсоток від вільної маржі клієнта (Автолот). |
RiskRate | Курс вашої валюти щодо долара (або валюти вашого рахунку). За замовчуванням, RiskRate = 0, що означає, що Експертний Радник буде намагатися знайти правильний курс у Огляді Ринку. Для того, щоб Автолот добре працював з усіма валютними парами, вам потрібно увімкнути “Показати всі валютні пари” в Market Watch. |
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 Автолота до свого 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.
Ця публікація також доступна на: English Українська Portuguese Español Deutsch Chinese Русский Français Italiano Türkçe 日本語 한국어
Leave a Reply