Не подскажите, как организовать скрипт выставления такого лота, когда забиваешь количество пунктов стоп-лосса, а скрипт бы рассчитывал лот... чтобы был риск 2%
Ivan Butko #: Не подскажите, как организовать скрипт выставления такого лота, когда забиваешь количество пунктов стоп-лосса, а скрипт бы рассчитывал лот... чтобы был риск 2%
MQL4
//+---------------------------------------------------------------------------+//| Функция расщета риска от процента и расстояния (c) Boshetunmay 2021 |//+---------------------------------------------------------------------------+double LotSize(int sl,double risk)
{
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);
if(sl<=0)
return(Min_Lot); // исключение деления на нольdouble Lot = NormalizeDouble((MathFloor((Free*risk/100)/(sl*LotVal)/Step)*Step),2);
if(Lot<Min_Lot)
Lot=Min_Lot;
if(Lot>Max_Lot)
Lot=Max_Lot;
return(Lot);
}
//--- End ---
ну так и вычисляйте её (или вспоминайте/берите из каких-то структур). У вас, при трале лимиток, из-за того что X постоянный, для всех ордеров получается одинаковая цена, и они "сбиваются в кучу".
а может это все таки связано с подсчетом/выбором по какому то параметру?
ведь у меня в функции стоит выбор последнего ордера
а может это все таки связано с подсчетом/выбором по какому то параметру?
ведь у меня в функции стоит выбор последнего ордера
хотел раньше написать - не делайте так никогда :-) не перебирайте все ордера/позиции терминала и тем более не полагайтесь на значение pos при этом (не учитывайте первый или последний в том переборе).
ваши ордера ? храните всё про них в ваших структурах и массивах.
хотел раньше написать - не делайте так никогда :-) не перебирайте все ордера/позиции терминала и тем более не полагайтесь на значение pos при этом (не учитывайте первый или последний в том переборе).
ваши ордера ? храните всё про них в ваших структурах и массивах.
да вроде во многих советниках так сделано. а в чем риск?
да вроде во многих советниках так сделано. а в чем риск?
риск остаться "в числе многих советников" :-) то есть исключительно для тестера
во первых перебирать все ордера это долго. Советник оперирует 5-10 ордерами, в терминале их сотни. Уже одного этого достаточно
во вторых не гарантируется какая-либо очерёдность/сортировка ордеров.
и наконец - если есть возможность делать хорошо и красиво, то зачем делать плохо и страшно ? :-)
---
просто к примеру :
оперируете сеткой - сделайте себе класс Grid. В сетке есть уровни и связанные с ними ордера/позиции - сделайте в ней массив объектов GridLevel и прочие. Когда надо синхронизироваться с терминалом (а это очень редко), использовать OrderSelect(SELECT_BY_TICKET).
обратите внимание - внутри OnTick у вас почти не останется циклов. Вы получаете Bid,Ask и сразу всё знаете. Работать будет пулей, будет меньше ошибок при отправке приказов. И расширять/дополнять это будет гораздо проще
риск остаться "в числе многих советников" :-) то есть исключительно для тестера
во первых перебирать все ордера это долго. Советник оперирует 5-10 ордерами, в терминале их сотни. Уже одного этого достаточно
во вторых не гарантируется какая-либо очерёдность/сортировка ордеров.
и наконец - если есть возможность делать хорошо и красиво, то зачем делать плохо и страшно ? :-)
---
просто к примеру :
оперируете сеткой - сделайте себе класс Grid. В сетке есть уровни и связанные с ними ордера/позиции - сделайте в ней массив объектов GridLevel и прочие. Когда надо синхронизироваться с терминалом (а это очень редко), использовать OrderSelect(SELECT_BY_TICKET).
обратите внимание - внутри OnTick у вас почти не останется циклов. Вы получаете Bid,Ask и сразу всё знаете. Работать будет пулей, будет меньше ошибок при отправке приказов. И расширять/дополнять это будет гораздо проще
Не подскажите, как организовать скрипт выставления такого лота, когда забиваешь количество пунктов стоп-лосса, а скрипт бы рассчитывал лот... чтобы был риск 2%
MQL4
MQL4
Спасибо большое!
Оперативнону так и вычисляйте её (или вспоминайте/берите из каких-то структур). У вас, при трале лимиток, из-за того что X постоянный, для всех ордеров получается одинаковая цена, и они "сбиваются в кучу".
а может это все таки связано с подсчетом/выбором по какому то параметру?
ведь у меня в функции стоит выбор последнего ордера
Спасибо большое!
Оперативносмотря что вы разумеете под risk%, - стоит добавлять AccountMargin() к Free; просто обратите внимание, а то возможны сюрпризы
а может это все таки связано с подсчетом/выбором по какому то параметру?
ведь у меня в функции стоит выбор последнего ордера
хотел раньше написать - не делайте так никогда :-) не перебирайте все ордера/позиции терминала и тем более не полагайтесь на значение pos при этом (не учитывайте первый или последний в том переборе).
ваши ордера ? храните всё про них в ваших структурах и массивах.
хотел раньше написать - не делайте так никогда :-) не перебирайте все ордера/позиции терминала и тем более не полагайтесь на значение pos при этом (не учитывайте первый или последний в том переборе).
ваши ордера ? храните всё про них в ваших структурах и массивах.
да вроде во многих советниках так сделано. а в чем риск?
ваши ордера ? храните всё про них в ваших структурах и массивах.
А их - в файлах или глобальных переменных терминала, на случай внезапной перезагрузки, потери питания и т.п.
да вроде во многих советниках так сделано. а в чем риск?
риск остаться "в числе многих советников" :-) то есть исключительно для тестера
во первых перебирать все ордера это долго. Советник оперирует 5-10 ордерами, в терминале их сотни. Уже одного этого достаточно
во вторых не гарантируется какая-либо очерёдность/сортировка ордеров.
и наконец - если есть возможность делать хорошо и красиво, то зачем делать плохо и страшно ? :-)
---
просто к примеру :
оперируете сеткой - сделайте себе класс Grid. В сетке есть уровни и связанные с ними ордера/позиции - сделайте в ней массив объектов GridLevel и прочие. Когда надо синхронизироваться с терминалом (а это очень редко), использовать OrderSelect(SELECT_BY_TICKET).
обратите внимание - внутри OnTick у вас почти не останется циклов. Вы получаете Bid,Ask и сразу всё знаете. Работать будет пулей, будет меньше ошибок при отправке приказов. И расширять/дополнять это будет гораздо проще
риск остаться "в числе многих советников" :-) то есть исключительно для тестера
во первых перебирать все ордера это долго. Советник оперирует 5-10 ордерами, в терминале их сотни. Уже одного этого достаточно
во вторых не гарантируется какая-либо очерёдность/сортировка ордеров.
и наконец - если есть возможность делать хорошо и красиво, то зачем делать плохо и страшно ? :-)
---
просто к примеру :
оперируете сеткой - сделайте себе класс Grid. В сетке есть уровни и связанные с ними ордера/позиции - сделайте в ней массив объектов GridLevel и прочие. Когда надо синхронизироваться с терминалом (а это очень редко), использовать OrderSelect(SELECT_BY_TICKET).
обратите внимание - внутри OnTick у вас почти не останется циклов. Вы получаете Bid,Ask и сразу всё знаете. Работать будет пулей, будет меньше ошибок при отправке приказов. И расширять/дополнять это будет гораздо проще
спасибо. буду учить как сделать теперь)