Как рассчитать размер лота с зависимостью от "плеча"

 

Здравствуйте, собственно в тебе указан вопрос, как рассчитать размер лота с зависимостью от "плеча".

Т.е., в начале плечо 1:500, далее плечо уменьшается до 1:1.


Я пока сделал так:

NormalizeDouble(AccountBalance()*AccountLeverage()/10000/1000,1)

где:

AccountBalance() - размер свободных средств;

AccountLeverage() - "плечо";

10000 - размер лота (на этом этапе получаем максимальное количество лотов в зависимости от средств)

1000 - 1/1000 от максимального количества лотов

 
rensbit писал(а) >>

AccountBalance() - размер свободных средств;

AccountLeverage() - "плечо";

10000 - размер лота (на этом этапе получаем максимальное количество лотов в зависимости от средств)

1000 - 1/1000 от максимального количтества лотов

Наверное, можно операцию по удалению аппендикса проводить через зад.

Воспользуйтесь функцией MarketInfo() с параметром MODE_MARGININIT

 
PapaYozh >>:

Наверное, можно операцию по удалению аппендикса проводить через зад.

Воспользуйтесь функцией 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);

 
Neutron >>:

Пусть, вы тем или иным способом оптеделили нужный размер торгового плеча 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);

Спасибо.

 
rensbit писал(а) >>

Функция:

возвращает 0 (ноль), Вы работаете без лотов?

т.е. MODE_MARGINREQUIRED, извиняюсь.

 
rensbit писал(а) >>

Мне нужно расчитать количество лотов для моего эксперта, а не узнать их возможно значение (минимум, максимум, ...)

Тут просто произошло "моя твоя не понимает".

Сначала Вы пишите AccountLeverage(), а эта функция возвращает значения плеча, предоставленного Вам Вашим ДЦ. После Вы пишите про лоты для Вашего эксперта. Откуда ж неэкстрасенсу знать потребности и функцианальные зависимости объема (а не "ЛОТА", т.к. размер лота - величина постоянная и от плеча не зависит) от чего-то там?

 
PapaYozh >>:

Тут просто произошло "моя твоя не понимает".

Сначала Вы пишите AccountLeverage(), а эта функция возвращает значения плеча, предоставленного Вам Вашим ДЦ. После Вы пишите про лоты для Вашего эксперта. Откуда ж неэкстрасенсу знать потребности и функцианальные зависимости объема (а не "ЛОТА", т.к. размер лота - величина постоянная и от плеча не зависит) от чего-то там?

Да, размер лота постоянен, но количество лотов меняется, т.к. депозит с $1000 обычно имеет плечо 1:500, а вот депозит в $100000 - плечо уже 1:100. Следовательно, при понижении плеча уменьшается объем средств (AccountBalance()*AccountLeverage() (ДЦ не резиновый и на всех денег не хватит)), поэтому при расчете количества лотов 1:500 на плече 1:100 приведет к ошибке 131 (если плечо было изменено). И еще, если расчитывать количество лотов без учета плеча (при условии что эксперт прибыльный :) ) то рано или поздно экперт будет использовать весь депозит и в таком случае первая же ошибка приведет к сливу всех денег.

 
rensbit писал(а) >>

... И еще, если расчитывать количество лотов без учета плеча (при условии что эксперт прибыльный :) ) то рано или поздно экперт будет использовать весь депозит и в таком случае первая же ошибка приведет к сливу всех денег.

А мне нужен именно такой. как войти 100 % я знаю. Задача следующая идем в прибыль. как только появилась прибыль снова нужно входить, т.е. всегда все 100% в рынке. Пока руки не дошли может есть у кого то ?

100% расчитываю так.

      lot=AccountFreeMargin()/MarketInfo (Symbol(), MODE_MARGINREQUIRED)*(Risk/100.0);
 
Prival >>:

А мне нужен именно такой. как войти 100 % я знаю. Задача следующая идем в прибыль. как только появилась прибыль снова нужно входить, т.е. всегда все 100% в рынке. Пока руки не дошли может есть у кого то ?

100% расчитываю так.

Я для себя сделал так:

double lot = NormalizeDouble(AccountBalance()*AccountLeverage()/100*10/MarketInfo(Symbol(),MODE_LOTSIZE)/10,1);
if (lot <= 0.1){lot = 0.1;}
 
rensbit:

Я для себя сделал так:

double lot = NormalizeDouble(AccountBalance()*AccountLeverage()/100*10/MarketInfo(Symbol(),MODE_LOTSIZE)/10,1);

Я не проверял Ваши вычисления, но мне кажется есть ошибка -

получается что с увеличением Leverage размер лота также увеличивается.

Я думаю что должно быть наоборот? Кто-нибудь подтвердите или опровергните:

double lot = .. (100/AccountLeverage()) * ....
Причина обращения: