AccountBalance() - размер свободных средств;
AccountLeverage() - "плечо";
10000 - размер лота (на этом этапе получаем максимальное количество лотов в зависимости от средств)
1000 - 1/1000 от максимального количтества лотов
Наверное, можно операцию по удалению аппендикса проводить через зад.
Воспользуйтесь функцией MarketInfo() с параметром MODE_MARGININIT
Наверное, можно операцию по удалению аппендикса проводить через зад.
Воспользуйтесь функцией MarketInfo() с параметром MODE_MARGININIT
Функция:
MarketInfo(Symbol(),MODE_MARGININIT)
возвращает 0 (ноль), Вы работаете без лотов?
Мне нужно расчитать количество лотов для моего эксперта, а не узнать их возможно значение (минимум, максимум, ...)
Пусть, вы тем или иным способом оптеделили нужный размер торгового плеча L. Тогда, соответствующий ему размер лота Lot можно вычислить по формуле:
double LotStep=MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot=MathFloor(L*AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/AccountLeverage()/LotStep)*LotStep;
if(Lot<MarketInfo(Symbol(),MODE_MINLOT))Lot=MarketInfo(Symbol(),MODE_MINLOT);
if(Lot>MarketInfo(Symbol(),MODE_MAXLOT))Lot=MarketInfo(Symbol(),MODE_MAXLOT);
Пусть, вы тем или иным способом оптеделили нужный размер торгового плеча L. Тогда, соответствующий ему размер лота Lot можно вычислить по формуле:
double LotStep=MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot=MathFloor(L*AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/AccountLeverage()/LotStep)*LotStep;
if(Lot<MarketInfo(Symbol(),MODE_MINLOT))Lot=MarketInfo(Symbol(),MODE_MINLOT);
if(Lot>MarketInfo(Symbol(),MODE_MAXLOT))Lot=MarketInfo(Symbol(),MODE_MAXLOT);
Спасибо.
Мне нужно расчитать количество лотов для моего эксперта, а не узнать их возможно значение (минимум, максимум, ...)
Тут просто произошло "моя твоя не понимает".
Сначала Вы пишите AccountLeverage(), а эта функция возвращает значения плеча, предоставленного Вам Вашим ДЦ. После Вы пишите про лоты для Вашего эксперта. Откуда ж неэкстрасенсу знать потребности и функцианальные зависимости объема (а не "ЛОТА", т.к. размер лота - величина постоянная и от плеча не зависит) от чего-то там?
Тут просто произошло "моя твоя не понимает".
Сначала Вы пишите AccountLeverage(), а эта функция возвращает значения плеча, предоставленного Вам Вашим ДЦ. После Вы пишите про лоты для Вашего эксперта. Откуда ж неэкстрасенсу знать потребности и функцианальные зависимости объема (а не "ЛОТА", т.к. размер лота - величина постоянная и от плеча не зависит) от чего-то там?
Да, размер лота постоянен, но количество лотов меняется, т.к. депозит с $1000 обычно имеет плечо 1:500, а вот депозит в $100000 - плечо уже 1:100. Следовательно, при понижении плеча уменьшается объем средств (AccountBalance()*AccountLeverage() (ДЦ не резиновый и на всех денег не хватит)), поэтому при расчете количества лотов 1:500 на плече 1:100 приведет к ошибке 131 (если плечо было изменено). И еще, если расчитывать количество лотов без учета плеча (при условии что эксперт прибыльный :) ) то рано или поздно экперт будет использовать весь депозит и в таком случае первая же ошибка приведет к сливу всех денег.
... И еще, если расчитывать количество лотов без учета плеча (при условии что эксперт прибыльный :) ) то рано или поздно экперт будет использовать весь депозит и в таком случае первая же ошибка приведет к сливу всех денег.
А мне нужен именно такой. как войти 100 % я знаю. Задача следующая идем в прибыль. как только появилась прибыль снова нужно входить, т.е. всегда все 100% в рынке. Пока руки не дошли может есть у кого то ?
100% расчитываю так.
lot=AccountFreeMargin()/MarketInfo (Symbol(), MODE_MARGINREQUIRED)*(Risk/100.0);
А мне нужен именно такой. как войти 100 % я знаю. Задача следующая идем в прибыль. как только появилась прибыль снова нужно входить, т.е. всегда все 100% в рынке. Пока руки не дошли может есть у кого то ?
100% расчитываю так.
Я для себя сделал так:
double lot = NormalizeDouble(AccountBalance()*AccountLeverage()/100*10/MarketInfo(Symbol(),MODE_LOTSIZE)/10,1); if (lot <= 0.1){lot = 0.1;}
Я для себя сделал так:
double lot = NormalizeDouble(AccountBalance()*AccountLeverage()/100*10/MarketInfo(Symbol(),MODE_LOTSIZE)/10,1);
Я не проверял Ваши вычисления, но мне кажется есть ошибка -
получается что с увеличением Leverage размер лота также увеличивается.
Я думаю что должно быть наоборот? Кто-нибудь подтвердите или опровергните:
double lot = .. (100/AccountLeverage()) * ....
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте, собственно в тебе указан вопрос, как рассчитать размер лота с зависимостью от "плеча".
Т.е., в начале плечо 1:500, далее плечо уменьшается до 1:1.
Я пока сделал так:
где:
AccountBalance() - размер свободных средств;
AccountLeverage() - "плечо";
10000 - размер лота (на этом этапе получаем максимальное количество лотов в зависимости от средств)
1000 - 1/1000 от максимального количества лотов