Отлично. Ещё бы индикаторы по данным из массива.Хорошая новость для приверженцев mql4.
В следующем билде mql5 будут доступны такие функции из mql4 как iTime, iOpen, iHigh..., iHighest, iLowest, iBarShift
Попробуй так:Rep Report
В этом коде вроде правильно только не плюсует в кучу............
С этим понятнозамени "break" на "continue"
На это ругается....Total_RISK += ...
Ты куда плюс воткнул? Посмотри на мой образец!На это ругается....
А такое вообще возможно?
Часов надсать пытаюсь сделать...
это был третий заход тыкания.......Ты куда плюс воткнул?
Кстати, перед этими расчетами нужно все переменные обнулять:это был третий заход тыкания.......
ругалось на + пробел =
не успел проверить....
Благодарю
buys_volume=0.0;
sells_volume=0.0;
nb=0;
ns=0;
Total_RISK=0.0;
for(i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) continue;
if(OrderType() == OP_BUY)
{
buys_list[nb][0] = OrderTicket();
buys_list[nb][1] = OrderProfit();
buys_list[nb][2] = OrderLots();
buys_volume += buys_list[nb][2];
Total_RISK += NormalizeDouble ( (100*(((OrderStopLoss() - OrderOpenPrice())/Point)*MarketInfo(Symbol(),
MODE_TICKVALUE)*OrderLots()))/AccountBalance(),2);
nb++;
}
if(OrderType() == OP_SELL)
{
sells_list[ns][0] = OrderTicket();
sells_list[ns][1] = OrderProfit();
sells_list[ns][2] = OrderLots();
sells_volume += sells_list[ns][2];
Total_RISK += NormalizeDouble ( (100*(((OrderOpenPrice() - OrderStopLoss())/Point)*MarketInfo(Symbol(),
MODE_TICKVALUE)*OrderLots()))/AccountBalance(),2);
ns++;
}
}
Doneнужно все переменные обнулять:
Привет! Слушай, ты не в курсе, почему 5-й терминал на оптимизации ядра и на половину не загружены, а память скачет от 30 до 100% периодически - че они там творят. Последние 2 обновления МТ5 - сначала пропал обзор проходов "Оптимизация" и стал появляться только при остановке оптимизатора, в последнем обновлении все восстановилось и проходы можно анализировать в процессе оптимизации. Терминал работает вообще непонятно как - пол часа что-то перелопачивает, загружая всю память (увеличил файл подкачки до 20Гб) и где-то через час освобождается основная память, процессор загружается меньше половины, но винт при этом не дает компу работать вообще... Ты писал, что перешел на 5-ку, поэтому и спрашиваю, если знаешь что-то по этому поводу. Я может быть завтра создам тему торговли по треугольникам - задолбался один оптимизировать на 5-ке))).Хорошая новость для приверженцев mql4.
В следующем билде mql5 будут доступны такие функции из mql4 как iTime, iOpen, iHigh..., iHighest, iLowest, iBarShift
-https://www.mql5.com/ru/forum/241285Привет! Слушай, ты не в курсе, почему 5-й терминал на оптимизации ядра и на половину не загружены, а память скачет от 30 до 100% периодически - че они там творят. Последние 2 обновления МТ5 - сначала пропал обзор проходов "Оптимизация" и стал появляться только при остановке оптимизатора, в последнем обновлении все восстановилось и проходы можно анализировать в процессе оптимизации. Терминал работает вообще непонятно как - пол часа что-то перелопачивает, загружая всю память (увеличил файл подкачки до 20Гб) и где-то через час освобождается основная память, процессор загружается меньше половины, но винт при этом не дает компу работать вообще... Ты писал, что перешел на 5-ку, поэтому и спрашиваю, если знаешь что-то по этому поводу. Я может быть завтра создам тему торговли по треугольникам - задолбался один оптимизировать на 5-ке))).
Благодарю--почти нормально плюсует отнимаетTotal_RISK += ...
Если закладывать в расчет своп и комиссию, то это должно быть так (надеюсь, в скобках не ошибся):Помогите пожалуйста объяснить что ему нужно учитывать чистый убыток по ордеру а то не добирает по убытку--не хватает +комисс +спрэд ну и своп...
for(i=0; i<OrdersTotal(); i++)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if(OrderType()==OP_BUY)
{
buys_list[nb][0] = OrderTicket();
buys_list[nb][1] = OrderProfit();
buys_list[nb][2] = OrderLots();
buys_volume+= buys_list[nb][2];
Total_RISK += NormalizeDouble(((((OrderStopLoss() - OrderOpenPrice())/Point)*MarketInfo(Symbol(),MODE_TICKVALUE)*OrderLots())
+OrderSwap()+OrderCommission()) *100/AccountBalance(),2);
nb++;
}
if(OrderType()==OP_SELL)
{
sells_list[ns][0] = OrderTicket();
sells_list[ns][1] = OrderProfit();
sells_list[ns][2] = OrderLots();
sells_volume+=sells_list[ns][2];
Total_RISK+=NormalizeDouble(((((OrderOpenPrice()-OrderStopLoss())/Point)*MarketInfo(Symbol(),MODE_TICKVALUE)*OrderLots())
+OrderSwap()+OrderCommission()) *100/AccountBalance(),2);
ns++;
}
}
Так это---стремимся чтоб как в аптеке...зачем там нужны вычисления знаков
Тут вопрос... Для точности может быть стоит заменить AccountBalance() на AccountEquity(). У тебя прописываются данные по ордерам бай и селл в отдельные массивы - если это нужно, то разделение на бай и селл, конечно, обязательно. Или можно просто так сделать (можно даже вынести это отдельными строками):По вашему пробовал- не сходится нетто с брутто...
А обязательно нужно ордера по типу разделять?
Задача ведь сложить риск на столе в % при сносе стопов.
for(int i=0; i<OrdersTotal(); i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
Total_RISK += NormalizeDouble(((((MathAbs(OrderStopLoss()-OrderOpenPrice()))/Point)*MarketInfo(Symbol(),MODE_TICKVALUE)*OrderLots())+OrderSwap()+OrderCommission())*100/AccountBalance(),2);
Нужно, но песня с другим мотивом...если это нужно
Для баевского ордера стоплосс находится ниже цены открытия, для селовского выше (наоборот). Но это можно не учитывать, если использовать модуль разницы, который будет выдавать неотрицательное значение в любом случае. Есть нюанс в случае работы трала, который может стоплосс переместить в плюсовую зону и тогда расчеты будут не верны - это нужно отдельно учитывать. Для суммирования ордеров с разных по знакам после запятой инструментов можно сделать так:еня от незнания смущает почему на селл
((OrderOpenPrice() - OrderStopLoss())/Point)
а на бай ((OrderStopLoss() - OrderOpenPrice())/Point)
поэтому и спрашивал за пилюлю универсальную...
for(i=0; i<OrdersTotal(); i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
Total_RISK += NormalizeDouble(((((MathAbs(OrderStopLoss()-OrderOpenPrice()))/MarketInfo(OrderSymbol(),MODE_POINT))*MarketInfo(OrderSymbol(),MODE_TICKVALUE)*OrderLots())+OrderSwap()+OrderCommission())*100/AccountBalance(),2);
Можешь мне на скайп звякнуть? Мне как раз сейчас скучно и онлайн все порешаем. Просто не зная всех мелочей, сложно запрограммировать все нюансы. Я еще час буду на связи в скайпе точно.Rep Report
Благодарю
Всё равно 2-3% теряются в недрах.......