подскажите идею грамотной реализации. - страница 3

 
Mike_Kharkov:
   Народ - кто нибудь может объяснить в 2-х словах(если не трудно) в чем суть(идея) данного выражения? )
   Чувствую самому, по справочнику, без пол литры мне не разобраться. )
   (Слишком скудно(для моего уровня) он описывает некоторые вещи, в данном случае + примеров нет в справочнике.)

От баланса отнимается постоянная сумма 10000 - это видно какое-то ограничение на счету, а затем берется около 1.9%. Это справедливо для баланса от 1.000.000:

MathFloor((account_balance-10000)/5000)

Так как 0.01 - это видно стартовый минимальный лот, то и полученное число приводится к лотности кратной 0.01

MathFloor((account_balance-10000)/5000),0)*0.01

Затем, если полученное число меньше "2", дальше в расчеты идёт "2":

MathMax(MathFloor((account_balance-10000)/5000),0)*0.01,2

К минимальному лоту добавляется полученное число:

0.01+MathMax(MathFloor((account_balance-10000)/5000),0)*0.01,2)
 
MathFloor((account_balance-10000)/5000)

Сколько раз средства прирастали на сумму 5000 сверх 10000. На каждый прирост в 5000 лот увеличивается на 0.01. MathMax() используется на тот случай, когда средств меньше 10000, что бы ничего не отнимать от минимального лота.

 
Mike_Kharkov:
   Народ - кто нибудь может объяснить в 2-х словах(если не трудно) в чем суть(идея) данного выражения? )
   Чувствую самому, по справочнику, без пол литры мне не разобраться. )
   (Слишком скудно(для моего уровня) он описывает некоторые вещи, в данном случае + примеров нет в справочнике.)

Мой Вам совет: при программировании не лезьте в дебри, не усложняйте без надобности, не выходите за пределы своей компетентности.

Расчет по формуле, которую написал Дмитрий, не соответствует расчету из первого поста этой ветки, при этом у Дмитрия большой опыт программирования. Теперь представьте, что будет если программа разрастётся. Вы просто потеряетесь в её тексте.

 
Contender:

Мой Вам совет: при программировании не лезьте в дебри, не усложняйте без надобности, не выходите за пределы своей компетентности.

Расчет по формуле, которую написал Дмитрий, не соответствует расчету из первого поста этой ветки, при этом у Дмитрия большой опыт программирования. Теперь представьте, что будет если программа разрастётся. Вы просто потеряетесь в её тексте.

   А можите обьяснить(вкратце) почему не соответствует расчету?
   Я потестил - вроде норм. ) И по логике того, как мне код объяснили - все вроде так как надо..
   Единственное что когда баланс под миллион становится - происходит ошибка при отправке ордера почему то.
   https://yadi.sk/i/BRmRDHo0YrTUw
   (пока не понял почему. Думаю причина либо в депозите либо в объеме ордера. может есть какие то ограничения(лимиты) в этом плане у платформы.)
   Но с депозитом меньше 500 000 таких проблем не наблюдал в этой реализации.
 
Mike_Kharkov:
   А можите обьяснить почему не соответствует расчету?
   Я потестил - вроде норм. )
   Единственное что когда баланс под миллион становится - происходит ошибка при отправке ордера почему то.
   https://yadi.sk/i/BRmRDHo0YrTUw
   (пока не понял почему. Думаю причина либо в депозите либо в объеме ордера. может есть какие то ограничения(лимиты) в этом плане у платформы.)
   Но с депозитом меньше 500 000 таких проблем не наблюдал в этой реализации.

Вам же Дмитрий написал форумулу -- Вы её проверили -- она работает -- зачем слушать ещё и сомнительных критиков?

По ошибке можно почитать здесь  https://www.mql5.com/ru/docs/constants/errorswarnings/errorcodes

После формулы Дмитрия -- надо ещё ограничить результат по максимальному лоту. 

 
Mike_Kharkov:
   А можите обьяснить(вкратце) почему не соответствует расчету?
   Я потестил - вроде норм. ) И по логике тогоб как мне код объяснили - все вроде так как надо..
   Единственное что когда баланс под миллион становится - происходит ошибка при отправке ордера почему то.
   https://yadi.sk/i/BRmRDHo0YrTUw
   (пока не понял почему. Думаю причина либо в депозите либо в объеме ордера. может есть какие то ограничения(лимиты) в этом плане у платформы.)
   Но с депозитом меньше 500 000 таких проблем не наблюдал в этой реализации.
Ну так ведь есть же код ошибки, да и прямо и написано - неверный объём. В конторе невозможен лот больше 140 наверное.
 
artmedia70:
Ну так ведь есть же код ошибки, да и прямо и написано - неверный объём. В конторе невозможен лот больше 140 наверное.
   Cейчас попробовал демо MT5(ECN) в ДЦ Альпари и получается следующая картина:

  


   Уже при 50-ти лотах появляется такая ошибка(возможно и чуть раньше.)
   Но я заметил что не смотря на это торговля все равно продолжается на истории.
   (хоть и тормозит жутко.)
   P.S. Как так получается, что ошибка есть в наличии, а торговля продолжается? )
 
Contender:

Мой Вам совет: при программировании не лезьте в дебри, не усложняйте без надобности, не выходите за пределы своей компетентности.

Расчет по формуле, которую написал Дмитрий, не соответствует расчету из первого поста этой ветки, при этом у Дмитрия большой опыт программирования. Теперь представьте, что будет если программа разрастётся. Вы просто потеряетесь в её тексте.

Да. Да. Точно. Некоторые не только в коде ошибаются, но не могут даже прочитать название темы.
 
Integer:
Да. Да. Точно. Некоторые не только в коде ошибаются, но не могут даже прочитать название темы.
Когда-же можно на форуме будет оценивать ответ плюсиками?!
 
Mike_Kharkov:
   Cейчас попробовал демо MT5(ECN) в ДЦ Альпари и получается следующая картина:

  


   Уже при 50-ти лотах появляется такая ошибка(возможно и чуть раньше.)
   Но я заметил что не смотря на это торговля все равно продолжается на истории.
   (хоть и тормозит жутко.)
   P.S. Как так получается, что ошибка есть в наличии, а торговля продолжается? )

Можно узнать максимальный лот:

SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX)

Рассчитанное ранее значениние подкорректировать:

lot=MathMin(lot, SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX))