OrderSend error 134,требуется формула проверки маржи mt4

Статус
Закрыто для дальнейших ответов.

forextime

Активный участник
Надо добавить условие в советнике, чтобы перед отправкой торгового приказа всегда проверял, достаточно ли на счете свободной маржи для открытия позиции, ошибку выдаёт ordersend error 134 недостаточно средств для открытия ордера. Дело в том что при работе советника по принципу мартингейл бывает что баланс и эквити с положительным показателем, а маржи не достаточно для открытия ордера с определённым лотом и в итоге заваливает брокера приказами на открытие ордера пока присутствует сигнал для открытия. В голове крутится, но не могу понять как правильно сформулировать чтобы всё учесть и при этом не намусорить.
AccountFreeMargin()>0 - этого не достаточно. Надо учитывать так же лот 1-ого ордера и последующих с увеличением объёма.
Закипел уже мозг и темы в поисковике похожих нет.
Вроде нашёл что то похожее на то что мне надо: Lot*MarketInfo(Symbol(),MODE_MARGINREQUIRED)>AccountFreeMargin()
но теперь лот постоянно 0.1 и мартин не используется.
В советнике 1-ый лот 0.1 если откат цены и ордер в минусе то последующие ордера +0.16 лот
 

forextime

Активный участник
Всё сделал, нашёл нужную формулу ))

double GetLot(int Risk){
double Free = AccountFreeMargin();
double margin = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double minLot = MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot = MarketInfo(Symbol(),MODE_MAXLOT);
double Step = MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot = MathFloor(Free*Risk/100/margin/Step)*Step;
if(Lot<minLot) Lot = minLot;
if(Lot>Max_Lot) Lot = Max_Lot;
if(Lot*margin>Free) return(0);
return(Lot);
}
 
Статус
Закрыто для дальнейших ответов.
Верх