
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день
Хотелось бы узнать у разработчиков полную формулу расчета AccountMargin()Для чего это необходимо:
Есть мультивариантный советник, на каждый вариант советника свой баланс = 4000$
Расчет ММ осуществляется исходя из баланса на каждый вариант. Общий баланс на счете 48 вариантов * 40000$
Формула расчета лота:
extern double Depozit = 4000;
extern double Risk = 0.5;
extern double SymbolsCount = 4;
S = (GetBalansDay(mn) * Risk - AccountMargin()) * AccountLeverage() / (SymbolsCount - GetOrdersMagicNumber(mn));
//+----------------------------------------------------------------------------+
//| Возвращает новый баланс на новые сутки. |
//| Параметры: |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
double GetBalansDay(int mn=-1) {
double b=0;
string d=TimeToStr(CurTime(),TIME_DATE);
datetime dat = StrToTime("d"+"00:00");
int i, k=HistoryTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL && OrderCloseTime()<dat) {
if (OrderMagicNumber()==mn) {
b+=OrderProfit()+OrderSwap()+OrderCommission();
}
}
}
}
return(b+Depozit);
}
//+--------------------------------------------------------------------------------------+
//| Возвращает колличество открытых позиций с конкретным маджиком. |
//| Параметры: |
//| mn - MagicNumber (-1 - любой магик) |
//+--------------------------------------------------------------------------------------+
double GetOrdersMagicNumber(int mn=-1) {
double b=0;
int i, k=OrdersTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (OrderMagicNumber()==mn) {
b++;
}
}
}
}
return(b);
}
получается при балансе на счете 192000$, AccountMargin() даёт отрицательное значение S.