Добрый вечер, господа.
Столкнулся с такой проблемой: нужно вычислить профит закрытых ордеров из истории, из функции
OnTester (т.е по завершении программы).
Я использую OrderProfit() и вычитаю OrderCommission() и OrderSwap(), но тут не учитывается спред. При попытке учесть спред выходит бред. Я перемножаю цену пункта, спред в пунктах, объем ордера и получаю неправильные значения. Полученные профиты не сходятся с профитами в таблице результатов тестера. Как мне получить именно те значения?
Спред уже учтен, в любой сделке. Правильный учет прибыли ордера (не вычитать, а складывать):
double fTotalProfit = OrderProfit() + OrderSwap() + OrderComission();
Спред уже учтен, в любой сделке. Правильный учет прибыли ордера (не вычитать, а складывать):
Спасибо. Не заметил, что там знак минус
Прошу Вашей помощи.
Ниже две функции значение которых преодически должны равняться друг другу.
Цель: Если профит закрытых ордеров равен или больше максимальному значению суммы профитов, то ....
Но после серии убытков при незначительном положительном результате (меньше чем сумма серии убытков естественно)
значение функции Count_Max_Profit_History() увеличивается.
Где то очень маленькая ошибка. Либо вся логика ошибочна.
Заранее благодарю за помощь.
//+----------------------------------------------------------------------------------+
//| Функция Count_Max_Profit_History подсчета Max_Profit закрытых ордеров|
//+----------------------------------------------------------------------------------+
double Count_Max_Profit_History()
{
double max_profit_history = 0;
double profit_history = 0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if(OrderSymbol() == Symbol())
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if(OrderMagicNumber() == Magic)
{
profit_history += NormalizeDouble((OrderProfit() + OrderSwap()), 2);
if(profit_history > max_profit_history)
{
max_profit_history = profit_history;
}
}
}
}
}
}
return(max_profit_history);
}
//+--------------------------------------------------------------------------------+
//| Функция Count_Profit_History подсчета Profit закрытых ордеров |
//+--------------------------------------------------------------------------------+
double Count_Profit_History()
{
double total_profit_history = 0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if(OrderSymbol() == Symbol())
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if(OrderMagicNumber() == Magic)
{
total_profit_history += NormalizeDouble((OrderProfit() + OrderSwap()), 2);
}
}
}
}
}
return(total_profit_history);
}
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый вечер, господа.
Столкнулся с такой проблемой: нужно вычислить профит закрытых ордеров из истории, из функции OnTester (т.е по завершении программы).
Я использую OrderProfit() и вычитаю OrderCommission() и OrderSwap(), но тут не учитывается спред. При попытке учесть спред выходит бред. Я перемножаю цену пункта, спред в пунктах, объем ордера и получаю неправильные значения. Полученные профиты не сходятся с профитами в таблице результатов тестера. Как мне получить именно те значения?