вызывать: ticket=OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,Bid-25*Point,Ask+25*Point,"My order #",magic,0,CLR_NONE);
При этом баланс может быть в облаках, а эквити в большой просадке. Соответственно размер лота может оказаться больше, чем возможно открыть и вся конструкция кубарем покатится...
Перед открытием лучше лот корректировать под действительно возможный.
Делал я для этого функцию. Её немного подкорректировал Виктор (Vinin) - попоробуйте:
// ===========================================================================// --- Функция рассчёта величины лота для открытия позиции. Редакция VininI---// Если лот превышает возможный для открытия позы, то он корректируется // ===========================================================================double CorrectLots(double lt)
{
double ltcorr;
double pnt = MarketInfo(Symbol(),MODE_POINT);
double mspr = MarketInfo(Symbol(),MODE_SPREAD);
double dig = MarketInfo(Symbol(),MODE_DIGITS);
double MaxLot = MarketInfo(Symbol(),MODE_MAXLOT);
double MinLot = MarketInfo(Symbol(),MODE_MINLOT);
double StpLot = MarketInfo(Symbol(),MODE_LOTSTEP);
double OneLot = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double TradeMrg = NormalizeDouble(AccountFreeMargin()/4.0,dig); // Свободные средства, разрешенные к торговлеdouble Money=lt*OneLot+mspr*pnt; // Вычисляем стоимость открываемой позыif (Money>=TradeMrg) // Если цена позиции равна или больше, чем есть свободных средств, то ...
{
lt=MathFloor(TradeMrg/OneLot/StpLot)*StpLot; // ... рассчитаем допустимый лотPrint("Func CorrectLots: полученный лот ",lt," скорректирован под допустимый ",lt);
}
elsePrint("Func CorrectLots: лот вернули без изменений");
lt=MathMin(MaxLot, MathMax(MinLot, lt)); // Проверим превышение допустимых ...return(lt);
}
В строке
double TradeMrg = NormalizeDouble(AccountFreeMargin()/4.0,dig); // Свободные средства, разрешенные к торговле
... свободная маржа делится на четыре и только четверть свободных средств считаются разрешенными для торгов.
Можете убрать деление на 4 и поставить сколь угодно, хоть всю маржу использовать.
Но функция не даст использовать размер лота больше, чем допустимо.
artmedia70: При этом баланс может быть в облаках, а эквити в большой просадке. Соответственно размер лота может оказаться больше, чем возможно открыть и вся конструкция кубарем покатится...
ну почему же так все грустно...
последний return() в моей функции даст минимальный доступный лот по инструменту, если счет центовый с большим кредитным плечом, то когда баланс будет меньше 600, возможно експерт еще поторгует некоторое время :)
ЗЫ: задача конкретная, да и ветка чтобы дать направление поисков вопрошающему
последний return() в моей функции даст минимальный доступный лот по инструменту, если счет центовый с большим кредитным плечом, то когда баланс будет меньше 600, возможно експерт еще поторгует некоторое время :)
ЗЫ: задача конкретная, да и ветка чтобы дать направление поисков вопрошающему
Ну, простите великодушно... :) Не извольте гневиться, сударь... :)
Вот ф-ция в моей редакции:
// ==========================================================================// ------------ Функция рассчёта величины лота для открытия позиции ---------// Если лот превышает возможный для открытия позы, то он корректируется // ==========================================================================double CorrectLots(double lt)
{
double ltcorr;
double pnt = MarketInfo(Symbol(),MODE_POINT);
double mspr = MarketInfo(Symbol(),MODE_SPREAD);
double dig = MarketInfo(Symbol(),MODE_DIGITS);
double MaxLot = MarketInfo(Symbol(),MODE_MAXLOT);
double MinLot = MarketInfo(Symbol(),MODE_MINLOT);
double StpLot = MarketInfo(Symbol(),MODE_LOTSTEP);
double OneLot = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double TradeMrg = NormalizeDouble(AccountFreeMargin()/4.0,dig); // Свободные средства, разрешенные к торговле
lt=MathAbs(lt);
ltcorr=lt; // Зададим начальное значением ltcorr равным значению ltif (lt>=MaxLot) ltcorr=MaxLot; // Проверим превышение допустимых ...if (lt<=MinLot) ltcorr=MinLot; // ... значений лотаdouble Money=lt*OneLot+mspr*pnt; // Вычисляем стоимость открываемой позыif (Money<TradeMrg) // Если свободных средств больше, чем цена позиции -
{
return(ltcorr); // ... возвращаем неизменённый лот
}
elseif (Money>=TradeMrg) // Если цена позиции равна или больше, чем есть свободных средств, то ...
{
ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot); // ... рассчитаем допустимый лотdouble MoneyCorr=ltcorr*OneLot+mspr*pnt;
Print("Func CorrectLots: лот ",lt," скорректирован до ",ltcorr,
" Стоимость позы до корректировки = ",Money,
" Стоимость позы после корректировки = ",MoneyCorr
);
return(ltcorr); // ... и вернём его значение
}
Print("Func CorrectLots: лот вернули без изменений");
return(ltcorr); // Возврат изначального лота в непредусмотренных случаях с сообщением
}
последний return() в моей функции даст минимальный доступный лот по инструменту, если счет центовый с большим кредитным плечом, то когда баланс будет меньше 600, возможно експерт еще поторгует некоторое время :)
ЗЫ: задача конкретная, да и ветка чтобы дать направление поисков вопрошающему
Понимаешь, Игорь - тут человек спросил, ты ему правильно ответил и можно как бы и забыть об этом. Но ведь плясать от баланса - не есть гут. По той самой причине, что баланс может быть в заоблачных небесах, а реальное положение дел - спасать пора. А мы тут ещё хр-р-рясь... и сверху ордерочек, да большим лотом... а он р-р-раз, да в минус поехал... эквити - туда же, хотя и так уже там... Посему я и подсказал, что лучше от средств плясать, чем от баланса... :)
Подскажите пожалуйста новичку, возможно ли написать на MQL4 пользовательский индикатор, так чтобы он одновременно обрабатывал все валютные пары? Насколько я понял максимально может выводится до 8 линий в графике индикатора, но мне нужна будет только одна линия. Т.е. могу ли я для этой линии получить массив обработанный из массивов или переменных по всем валютным пара одновременно?
Теоретически, не вижу никаких препятствий. Другой вопрос, сможете ли конкретно Вы этот массив обработать.
а каким образом я могу обратиться ко всем валютным парам в программном коде при написании инструмента? Просматривал примеры написания инструментво, там нет обращения к валютной паре, обрабатывается по умолчанию та, которая привязана к конкретному графику котировок.
У меня дело в том что этим всем сейчас занимается Excel и VBA, через DDE сервер я получаю информацию по 22 валютным парам и с помощью программного кода VBA виду их одновременную обработку, но это крайне не удобно, потому что во-первых надо ждать 2 часа накопления истории данных для проведения анализа по графикам в Excel. Да и неудобно прыгать с программы в программу, вот и думаю как бы это все перенести в МТ4.
Баланс 600-1199 лот 0,1
Баланс 1200-1799 лот 0,2
Баланс 1800-2399 лот 0,3 и т.д.
Как организовать в советнике? Спасибо.
Баланс 600-1199 лот 0,1
Баланс 1200-1799 лот 0,2
Баланс 1800-2399 лот 0,3 и т.д.
Как организовать в советнике? Спасибо.
вызывать: ticket=OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,Bid-25*Point,Ask+25*Point,"My order #",magic,0,CLR_NONE);
вызывать: ticket=OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,Bid-25*Point,Ask+25*Point,"My order #",magic,0,CLR_NONE);
При этом баланс может быть в облаках, а эквити в большой просадке. Соответственно размер лота может оказаться больше, чем возможно открыть и вся конструкция кубарем покатится...
Перед открытием лучше лот корректировать под действительно возможный.
Делал я для этого функцию. Её немного подкорректировал Виктор (Vinin) - попоробуйте:
В строке
... свободная маржа делится на четыре и только четверть свободных средств считаются разрешенными для торгов.
Можете убрать деление на 4 и поставить сколь угодно, хоть всю маржу использовать.
Но функция не даст использовать размер лота больше, чем допустимо.
При этом баланс может быть в облаках, а эквити в большой просадке. Соответственно размер лота может оказаться больше, чем возможно открыть и вся конструкция кубарем покатится...
ну почему же так все грустно...
последний return() в моей функции даст минимальный доступный лот по инструменту, если счет центовый с большим кредитным плечом, то когда баланс будет меньше 600, возможно експерт еще поторгует некоторое время :)
ЗЫ: задача конкретная, да и ветка чтобы дать направление поисков вопрошающему
ну почему же так все грустно...
последний return() в моей функции даст минимальный доступный лот по инструменту, если счет центовый с большим кредитным плечом, то когда баланс будет меньше 600, возможно експерт еще поторгует некоторое время :)
ЗЫ: задача конкретная, да и ветка чтобы дать направление поисков вопрошающему
Вот ф-ция в моей редакции:
ну почему же так все грустно...
последний return() в моей функции даст минимальный доступный лот по инструменту, если счет центовый с большим кредитным плечом, то когда баланс будет меньше 600, возможно експерт еще поторгует некоторое время :)
ЗЫ: задача конкретная, да и ветка чтобы дать направление поисков вопрошающему
Понимаешь, Игорь - тут человек спросил, ты ему правильно ответил и можно как бы и забыть об этом. Но ведь плясать от баланса - не есть гут. По той самой причине, что баланс может быть в заоблачных небесах, а реальное положение дел - спасать пора. А мы тут ещё хр-р-рясь... и сверху ордерочек, да большим лотом... а он р-р-раз, да в минус поехал... эквити - туда же, хотя и так
уже там... Посему я и подсказал, что лучше от средств плясать, чем от баланса... :)
Доброго времени суток!
Подскажите пожалуйста новичку, возможно ли написать на MQL4 пользовательский индикатор, так чтобы он одновременно обрабатывал все валютные пары? Насколько я понял максимально может выводится до 8 линий в графике индикатора, но мне нужна будет только одна линия. Т.е. могу ли я для этой линии получить массив обработанный из массивов или переменных по всем валютным пара одновременно?
За ранее благодарен за ответ.
Т.е. могу ли я для этой линии получить массив обработанный из массивов или переменных по всем валютным пара одновременно?
Теоретически, не вижу никаких препятствий. Другой вопрос, сможете ли конкретно Вы этот массив обработать.
Теоретически, не вижу никаких препятствий. Другой вопрос, сможете ли конкретно Вы этот массив обработать.
а каким образом я могу обратиться ко всем валютным парам в программном коде при написании инструмента? Просматривал примеры написания инструментво, там нет обращения к валютной паре, обрабатывается по умолчанию та, которая привязана к конкретному графику котировок.
У меня дело в том что этим всем сейчас занимается Excel и VBA, через DDE сервер я получаю информацию по 22 валютным парам и с помощью программного кода VBA виду их одновременную обработку, но это крайне не удобно, потому что во-первых надо ждать 2 часа накопления истории данных для проведения анализа по графикам в Excel. Да и неудобно прыгать с программы в программу, вот и думаю как бы это все перенести в МТ4.