Ваши вопросы по языку MQL4

vlad_123

Местный знаток
Хай пипел.
Подскажите по марже.

Есть счет Alpari-ECN-Demo с вменяемым размером депо Margin_stdLots.
Решил потестать функцию советника, которая открывает позицию >maxLotSize путем открытия двух позиций нужного суммарного объема. Для этого открыл счет с 10 демо-лямами.

Сейчас советник открыл на обоих счетах одинаковый набор позиций, причем на stdLots риск (размер ордера относительно свободной маржи) в 2 раза больше, но на bigLots счете размер маржи афигенски выше - не могу понять почему.
 

Вложения

  • Margin_stdLots.jpg
    Margin_stdLots.jpg
    154,6 КБ · Просмотры: 23
  • Margin_bigLots.jpg
    Margin_bigLots.jpg
    178,7 КБ · Просмотры: 22

_SERG_

Активный участник
Хай пипел.
Подскажите по марже.

Есть счет Alpari-ECN-Demo с вменяемым размером депо Margin_stdLots.
Решил потестать функцию советника, которая открывает позицию >maxLotSize путем открытия двух позиций нужного суммарного объема. Для этого открыл счет с 10 демо-лямами.

Сейчас советник открыл на обоих счетах одинаковый набор позиций, причем на stdLots риск (размер ордера относительно свободной маржи) в 2 раза больше, но на bigLots счете размер маржи афигенски выше - не могу понять почему.

MODE_MARGINCALCMODE28Способ расчета залоговых средств. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD на индексы
MODE_MARGININIT29Начальные залоговые требования для 1 лота
MODE_MARGINMAINTENANCE30Размер залоговых средств для поддержки открытых ордеров в расчете на 1 лот
MODE_MARGINHEDGED31Маржа, взимаемая с перекрытых ордеров в расчете на 1 лот
MODE_MARGINREQUIRED32Размер свободных средств, необходимых для открытия 1 лота на покупку

А все, эти параметры, на твоих счетах тоже идентичны?
Естесссно, в пересчете для каждой открытой позиции.
 

vlad_123

Местный знаток
MODE_MARGINCALCMODE28Способ расчета залоговых средств. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD на индексы
MODE_MARGININIT29Начальные залоговые требования для 1 лота
MODE_MARGINMAINTENANCE30Размер залоговых средств для поддержки открытых ордеров в расчете на 1 лот
MODE_MARGINHEDGED31Маржа, взимаемая с перекрытых ордеров в расчете на 1 лот
MODE_MARGINREQUIRED32Размер свободных средств, необходимых для открытия 1 лота на покупку

А все, эти параметры, на твоих счетах тоже идентичны?
Естесссно, в пересчете для каждой открытой позиции.
сооружу завтра скрипт и прогоню.
но странно будет, если для двух аккаунтов на одном сервере они разные...
 

_SERG_

Активный участник
сооружу завтра скрипт и прогоню.
но странно будет, если для двух аккаунтов на одном сервере они разные...
Ты в курсе, что предположение, причина ошибки?
Сравнишь, увидишь. (Завтра. ))) )
Если не сойдется, то причина другая, и зона поиска сузиться.
 

vlad_123

Местный знаток
Ну, как-то так:
bigLots:
2019.09.11 08:23:36.314 vladTest EURUSD,H1: USDCAD: MODE_MARGINCALCMODE=0.0, MODE_MARGININIT=0.0, MODE_MARGINMAINTENANCE=0.0, MODE_MARGINHEDGED=50000.0, MODE_MARGINREQUIRED=200.0
2019.09.11 08:23:36.314 vladTest EURUSD,H1: EURGBP: MODE_MARGINCALCMODE=0.0, MODE_MARGININIT=0.0, MODE_MARGINMAINTENANCE=0.0, MODE_MARGINHEDGED=50000.0, MODE_MARGINREQUIRED=221.02
2019.09.11 08:23:36.314 vladTest EURUSD,H1: USDCHF: MODE_MARGINCALCMODE=0.0, MODE_MARGININIT=0.0, MODE_MARGINMAINTENANCE=0.0, MODE_MARGINHEDGED=50000.0, MODE_MARGINREQUIRED=200.0
2019.09.11 08:23:36.314 vladTest EURUSD,H1: NZDUSD: MODE_MARGINCALCMODE=0.0, MODE_MARGININIT=0.0, MODE_MARGINMAINTENANCE=0.0, MODE_MARGINHEDGED=50000.0, MODE_MARGINREQUIRED=128.6
2019.09.11 08:23:36.314 vladTest EURUSD,H1: AUDUSD: MODE_MARGINCALCMODE=0.0, MODE_MARGININIT=0.0, MODE_MARGINMAINTENANCE=0.0, MODE_MARGINHEDGED=50000.0, MODE_MARGINREQUIRED=137.49
2019.09.11 08:23:36.314 vladTest EURUSD,H1: GBPUSD: MODE_MARGINCALCMODE=0.0, MODE_MARGININIT=0.0, MODE_MARGINMAINTENANCE=0.0, MODE_MARGINHEDGED=50000.0, MODE_MARGINREQUIRED=247.19
2019.09.11 08:23:36.313 vladTest EURUSD,H1: USDJPY: MODE_MARGINCALCMODE=0.0, MODE_MARGININIT=0.0, MODE_MARGINMAINTENANCE=0.0, MODE_MARGINHEDGED=50000.0, MODE_MARGINREQUIRED=200.0
2019.09.11 08:23:36.313 vladTest EURUSD,H1: EURUSD: MODE_MARGINCALCMODE=0.0, MODE_MARGININIT=0.0, MODE_MARGINMAINTENANCE=0.0, MODE_MARGINHEDGED=50000.0, MODE_MARGINREQUIRED=221.03

stdLots
2019.09.11 08:23:53.691 vladTest EURUSD,H1: USDCAD: MODE_MARGINCALCMODE=0.0, MODE_MARGININIT=0.0, MODE_MARGINMAINTENANCE=0.0, MODE_MARGINHEDGED=50000.0, MODE_MARGINREQUIRED=200.0
2019.09.11 08:23:53.691 vladTest EURUSD,H1: EURGBP: MODE_MARGINCALCMODE=0.0, MODE_MARGININIT=0.0, MODE_MARGINMAINTENANCE=0.0, MODE_MARGINHEDGED=50000.0, MODE_MARGINREQUIRED=221.02
2019.09.11 08:23:53.691 vladTest EURUSD,H1: USDCHF: MODE_MARGINCALCMODE=0.0, MODE_MARGININIT=0.0, MODE_MARGINMAINTENANCE=0.0, MODE_MARGINHEDGED=50000.0, MODE_MARGINREQUIRED=200.0
2019.09.11 08:23:53.691 vladTest EURUSD,H1: NZDUSD: MODE_MARGINCALCMODE=0.0, MODE_MARGININIT=0.0, MODE_MARGINMAINTENANCE=0.0, MODE_MARGINHEDGED=50000.0, MODE_MARGINREQUIRED=128.6
2019.09.11 08:23:53.691 vladTest EURUSD,H1: AUDUSD: MODE_MARGINCALCMODE=0.0, MODE_MARGININIT=0.0, MODE_MARGINMAINTENANCE=0.0, MODE_MARGINHEDGED=50000.0, MODE_MARGINREQUIRED=137.49
2019.09.11 08:23:53.691 vladTest EURUSD,H1: GBPUSD: MODE_MARGINCALCMODE=0.0, MODE_MARGININIT=0.0, MODE_MARGINMAINTENANCE=0.0, MODE_MARGINHEDGED=50000.0, MODE_MARGINREQUIRED=247.19
2019.09.11 08:23:53.691 vladTest EURUSD,H1: USDJPY: MODE_MARGINCALCMODE=0.0, MODE_MARGININIT=0.0, MODE_MARGINMAINTENANCE=0.0, MODE_MARGINHEDGED=50000.0, MODE_MARGINREQUIRED=200.0
2019.09.11 08:23:53.691 vladTest EURUSD,H1: EURUSD: MODE_MARGINCALCMODE=0.0, MODE_MARGININIT=0.0, MODE_MARGINMAINTENANCE=0.0, MODE_MARGINHEDGED=50000.0, MODE_MARGINREQUIRED=221.03

Еще идеи? ;)
 

_SERG_

Активный участник
Ну, как-то так:


Еще идеи? ;)
А, "средства" + "маржа" + "свободная маржа" = "балансу" ?

1. Чет я не совсем понял это, твое выражение: "размер ордера относительно свободной маржи ", это касается суммарного объема, или для каждой позиции?
2. Ну, и на счетах плече и там и там одинаковое. Ордера открыты пункт в пункт?
 

vlad_123

Местный знаток
А, "средства" + "маржа" + "свободная маржа" = "балансу" ?

1. Чет я не совсем понял это, твое выражение: "размер ордера относительно свободной маржи ", это касается суммарного объема, или для каждой позиции?
2. Ну, и на счетах плече и там и там одинаковое. Ордера открыты пункт в пункт?
Маржа + Свободная маржа + прибыль = баланс

1. ордера выставляются парами, по одному на symbol - видно по времени открытия на скриншотах. размер каждого из этих двух ордеров высчитывается как (маржа/1000) * 0.01 для bigLots и (маржа/500) * 0.01 для stdLots - т.е. 1000/500 USD на 0.01 лот.
2. ACCOUNT_LEVERAGE=500 и там и там, а размер маржи ну никак не зависит от +-5 пунктов цены.
 

_SERG_

Активный участник
Маржа + Свободная маржа + прибыль = баланс

1. ордера выставляются парами, по одному на symbol - видно по времени открытия на скриншотах. размер каждого из этих двух ордеров высчитывается как (маржа/1000) * 0.01 для bigLots и (маржа/500) * 0.01 для stdLots - т.е. 1000/500 USD на 0.01 лот.
2. ACCOUNT_LEVERAGE=500 и там и там, а размер маржи ну никак не зависит от +-5 пунктов цены.
Посчитай соотношение депозитов на счетах, с учетом твоих "1000/500", цифры (залог на единицу объема) должны быть одинаковыми.
%% погрешности должен быть минимальный, спред, дифференциал котировок др. неточности, в т.ч. и округления.
 
Последнее редактирование:

vlad_123

Местный знаток
bigLots: всего открыто 1328.5 lots, маржа 4823000, 4823000/1328.5=3630
stdLots: 1.88 lots, 376 маржа, 376/1.88=200

жирным - получается маржа per lot.
 

_SERG_

Активный участник
bigLots: всего открыто 1328.5 lots, маржа 4823000, 4823000/1328.5=3630
stdLots: 1.88 lots, 376 маржа, 376/1.88=200

жирным - получается маржа per lot.
MARGINREQUIRED по инструментам разные.
Точно, что количество позиций на счетах идентично по параметрам, за исключением объема каждой отдельной позиции ?
Может отличается на одну, две?
Просчитай залог отдельно по каждому инструменту, для каждого счета и типа позиций.
Извини приходится ванговать, но я бы начал с "поштучного" анализа, тогда несоответствия вылезут точно.
Понятно, что не руками.
 

vlad_123

Местный знаток
MARGINREQUIRED по инструментам разные.
Точно, что количество позиций на счетах идентично по параметрам, за исключением объема каждой отдельной позиции ?
Может отличается на одну, две?
Понятно, что маржа разная по разным инструментам - ордера открыты по 3м парам.
Количество ордеров одинаковое - сов один и тот же, и контролирует наличие позиций именно по обоим торгуемым парам (сов торгует на корреляции 2х инструментов, по ордеру на инструмент).
Т.е. - да - отличаются только объемом, плюс прайс +- пару пунктов.
Но это как может давать разницу в марже в 18 !!! раз?

Просчитай залог отдельно по каждому инструменту, для каждого счета и типа позиций.
Извини приходится ванговать, но я бы начал с "поштучного" анализа, тогда несоответствия вылезут точно.
Понятно, что не руками.
Ну вот, чесс-гря, не лежала душа писать анализатор, по сложности сравнимый с советником ;)
Спросил у Альпари в https://forexsystemsru.com/threads/obsuzhdenie-kompanii-alpari-alpari.60426/post-1448150 - если не растолкуют, то буду заморачиваться по-черному :(
 

vlad_123

Местный знаток
Есть подозрение, что все мои непонятки - из-за плавающего залога -https://alpari.com/ru/trading/trading_terms/#margin_requirements
Поиграюсь с AccountFreeMarginCheck чтобы (попытаться) выяснить зависимость маржи от размера позиции.
 
Последнее редактирование модератором:

Alpari_RU

Местный житель
Есть подозрение, что все мои непонятки - из-за плавающего залога https://alpari.com/ru/trading/trading_terms/#margin_requirements
Здравствуйте! Да, верно. У Вас открыты разные объемы позиций. На втором счете (bigLots), больше объем лотов, расчет маржи происходит согласно маржинальным требованиям.
Подробнее о расчете залога при плавающем кредитном плече: -https://alpari.com/ru/faq/trading_terms/calculating_margin_notional_value/
 
Последнее редактирование модератором:

vlad_123

Местный знаток
Здравствуйте! Да, верно. У Вас открыты разные объемы позиций. На втором счете (bigLots), больше объем лотов, расчет маржи происходит согласно маржинальным требованиям.
Подробнее о расчете залога при плавающем кредитном плече:
Посмотрел AccountFreeMarginCheck - в ней, похоже, не учитываются такие мелочи как плавающий залог, и дебажный вывод для AccountFreeMargin-AccountFreeMarginCheck показывает:
2019.09.12 20:09:46.212 vladTest EURUSD,H1: EURUSD: 0 100.00 lots, margin = 22156.40
2019.09.12 20:09:46.212 vladTest EURUSD,H1: EURUSD: 0 10.00 lots, margin = 2215.64
2019.09.12 20:09:46.212 vladTest EURUSD,H1: EURUSD: 0 1.00 lots, margin = 221.56
Правильно ли я понимаю, что расчет маржи с учетом зависимости % залога от размера совокупной позиции - нужно реализовывать самостоятельно, вбивая в код все цифры с -https://alpari.com/ru/trading/trading_terms/#margin_requirements и постоянно отслеживая их соответствие реальным требованиям?
 
Последнее редактирование модератором:

Alpari_RU

Местный житель
Правильно ли я понимаю, что расчет маржи с учетом зависимости % залога от размера совокупной позиции - нужно реализовывать самостоятельно, вбивая в код все цифры с -https://alpari.com/ru/trading/trading_terms/#margin_requirements и постоянно отслеживая их соответствие реальным требованиям?
Да, верно. Стандартными функциями метатрейдера ее проверить нельзя. Вам необходимо будет реализовать ее самостоятельно.
 
Последнее редактирование модератором:

panand

Местный знаток
добрый день!
прикладываю код расчёта общей максимальной просадки.
if(AccountEquity()>MaxEq){MaxEq=AccountEquity();CurDrod=0;}
if(AccountEquity()<MaxEq)CurDrod=100*(MaxEq-AccountEquity())/MaxEq;
if(CurDrod>MaxDrod)MaxDrod=CurDrod;
пожалуйста допишите строки к коду для расчёта максимальной просадки ордеров по лонг или шорт позициям раздельно,при наличии ShortMagic() || LongMagic(),
с тем ,чтобы закрывать цикл по макс. просадке по лонг или шорт ордерам.
if(StopMaxDrowdown>0)if(MaxDrod>StopMaxDrowdown){while(check()>0)close_();return(0);}
 

vlad_123

Местный знаток
Сейчас советник открыл на обоих счетах одинаковый набор позиций, причем на stdLots риск (размер ордера относительно свободной маржи) в 2 раза больше, но на bigLots счете размер маржи афигенски выше - не могу понять почему.
:cool: вопрос оказался настолько интересным, что попал в рассылку "Форум биржевых трейдеров. Рассылка № 3580"
 

Leonup

Новичок форума
Здравствуйте! В Учебнике MQL4 есть эксперт tradingexpert.mq4 (задача 29), в нем заинтересовал блок закрытия ордеров. Захотелось увидеть, как будет выглядеть код этого советника в действующем компиляторе MQL4. И поэтому в этом действующем компиляторе весь код попытался разложить по полочкам: tradingexpert_2.mq4.
Но столкнулся с одной проблемой и, именно, с закрытием ордеров. Закрывает ордера правильно, как по тейк-профиту, так и по обратному пересечению скользящих средних. Но после обратного пересечения пытается закрыть еще раз уже закрытый (последний) ордер, и в журнале появляется ошибка OrderClose error 4108.
Эксперт tradingexpert.mq4 (без переделки) работает нормально.
Очень хотелось бы знать, где я допускаю ошибку.
Прикрепляю оба советника: tradingexpert и tradingexpert_2.
 

Вложения

  • tradingexpert.mq4
    12,8 КБ · Просмотры: 11
  • tradingexpert_2.mq4
    27,2 КБ · Просмотры: 15

gravity

Местный знаток
Здравствуйте! В Учебнике MQL4 есть эксперт tradingexpert.mq4 (задача 29), в нем заинтересовал блок закрытия ордеров. Захотелось увидеть, как будет выглядеть код этого советника в действующем компиляторе MQL4. И поэтому в этом действующем компиляторе весь код попытался разложить по полочкам: tradingexpert_2.mq4.
Но столкнулся с одной проблемой и, именно, с закрытием ордеров. Закрывает ордера правильно, как по тейк-профиту, так и по обратному пересечению скользящих средних. Но после обратного пересечения пытается закрыть еще раз уже закрытый (последний) ордер, и в журнале появляется ошибка OrderClose error 4108.
Эксперт tradingexpert.mq4 (без переделки) работает нормально.
Очень хотелось бы знать, где я допускаю ошибку.
Прикрепляю оба советника: tradingexpert и tradingexpert_2.
Сам недоучка, но вот тут точно не надо было закомментировывать return. На работу не проверял.
 

Вложения

  • Screenshot_2.png
    Screenshot_2.png
    14,6 КБ · Просмотры: 26
Последнее редактирование:

mobidik

-----
Здравствуйте! В Учебнике MQL4 есть эксперт tradingexpert.mq4 (задача 29), в нем заинтересовал блок закрытия ордеров. Захотелось увидеть, как будет выглядеть код этого советника в действующем компиляторе MQL4. И поэтому в этом действующем компиляторе весь код попытался разложить по полочкам: tradingexpert_2.mq4.
Но столкнулся с одной проблемой и, именно, с закрытием ордеров. Закрывает ордера правильно, как по тейк-профиту, так и по обратному пересечению скользящих средних. Но после обратного пересечения пытается закрыть еще раз уже закрытый (последний) ордер, и в журнале появляется ошибка OrderClose error 4108.
Эксперт tradingexpert.mq4 (без переделки) работает нормально.
Очень хотелось бы знать, где я допускаю ошибку.
Прикрепляю оба советника: tradingexpert и tradingexpert_2.
Как минимум, после 85 строки вставьте переменную: Tip=-1; каждый раз, перед новым входом в цикл, данные нужно обнулять, т.к. при Tip=0 будет соответствовать позиции на бай, то "обнуление" в данном случае равно -1.
 
Верх