...It's time for financial transactions...

Main menu

Немного для отладки

В процессе разработки нового инструмента неизбежны ошибки. Поэтому новую разработку приходится неисчислимое количество раз прогонять на выполнение с выводом в различные журналы и логи промежуточной информации. Потом, когда  этап отладки завершен, строки кода, отвечающие за вывод отладочной информации либо удаляются, либо закомментируются. Но чаще все таки удаляются, что бы не пачкать текст, который, возможно, нужно будет показывать заказчику, или просто не делать его чересчур длинным.

А потом начинается работа над чем то еще и история повторяется. В результате зачастую приходится писать много раз подряд одно и то же. Напрашивается вывод, что некоторые функции вывода отладочной информации можно вынести в отдельный заголовочный файл.

Одну из таких функций я приведу здесь. Функция возвращает форматированную строку с данными установленного ордера. Номер ордера нужно передать во входном параметре, либо выбрать этот ордер заранее и передать во входном параметре -1:


string OrderToString(int ticket = -1) {
string r = "0";
if (ticket == -1) {
r = StringFormat("Order: %d %s %s Volume: %f Price: %f StopLoss: %f TakeProfit: %f Open at: %s Current result: %f",OrderTicket(),
OrderSymbol(),
OrderTypeToString(OrderType()),
OrderLots(),
OrderOpenPrice(),
OrderStopLoss(),
OrderTakeProfit(),
TimeToString(OrderOpenTime()),
OrderProfit() + OrderCommission() + OrderSwap() );
}
else {
if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {
r = StringFormat("Order: %d %s %s Volume: %f Price: %f StopLoss: %f TakeProfit: %f Open at: %s Current result: %f",ticket,
OrderSymbol(),
OrderTypeToString(OrderType()),
OrderLots(),
OrderOpenPrice(),
OrderStopLoss(),
OrderTakeProfit(),
TimeToString(OrderOpenTime()),
OrderProfit() + OrderCommission() + OrderSwap() );
} else
if (OrderSelect(ticket,SELECT_BY_TICKET, MODE_HISTORY)) {
r = StringFormat("Order: %d %s %s Volume: %f Price: %f StopLoss: %f TakeProfit: %f Open at: %s Close at: %s Result: %f",ticket,
OrderSymbol(),
OrderTypeToString(OrderType()),
OrderLots(),
OrderOpenPrice(),
OrderStopLoss(),
OrderTakeProfit(),
TimeToString(OrderOpenTime()),
TimeToString(OrderCloseTime()),
OrderProfit() + OrderCommission() + OrderSwap() );
}
}
return (r);
}
//Функция возвращает строку - представление торговой операции
string OrderTypeToString(int op) {
switch (op) {
case OP_BUY : return("OP_BUY");
case OP_SELL : return("OP_SELL");
case OP_BUYLIMIT : return("OP_BUYLIMIT");
case OP_SELLLIMIT : return("OP_SELLLIMIT");
case OP_BUYSTOP : return("OP_BUYSTOP");
case OP_SELLSTOP : return("OP_SELLSTOP");
default : return("Unknown Operation");
}
}

Написание этой самой функции приходится повторять огромное число раз, постоянно воспроизводя один и тот же фрагмент кода! Да и не только этой, но эта функция достаточно объемная и в неё склонны проникать ошибки. Поэтому мало того, что приходится повторять код, так еще и пусть немного, но все равно отлаживать. Когда ситуация стала уже окончательно нетерпимой пришлось эту и другие, подобные ей функции вынести в отдельный файл.

Leave a Reply

Your email address will not be published.

nine − one =