Сортировка истории сделок

sortirovka-istorii-sdelok

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

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

Обработка приобретенной следовательно инфы более комфортна в Excel. Потому нужно позаботиться о выводе этих в файл, формат которого совместим с Excel-форматом.

В результате нашей задачей считается поиск в легкодоступной ситуации счета сделок по явному прибору с явным MagicNumber. Чтобы достичь желаемого результата скрипту потребуется всего 3 входных параметра: название прибора (SymbolNamee), волшебное количество (MagicNumber) и фамилия файла (FileName), в который нужно будет произвести запись.

Еще стоит принять к сведению необходимость юзера в собрании ситуации по разным приборам, хотя с неким MagicNumber. Данное принимается решение разрешением ввода порожнего ценности в параметре SymbolName. И напротив, в случае если юзеру будет нужно сыскать все ордера и позиции по 1 прибору, хотя с всевозможными волшебными количествами, то необходимо принять некое значение, которое будет значить «хоть какое волшебное количество». Потому что наиболее часто MagicNumber устанавливают полезным, то в виде такового ценности можнож брать -1.

Добавочным обслуживанием скрипта станет подсчет выгоды или же расходования своих средств по сделке в пт. Кроме того можнож просуммировать признаки по любой сделке и вывести единое итоговое значение.

Связывающая функция скрипта start в следствии берет на себя вид:

int start()
{
// 1 ================== Открытие файла ============================
if (!OpenFile()) return();
// 01 ================== Окончание блока ============================
// 2 ================== Поиск нужного ордера в ситуации сделок ========
CurrencyInAll = ;
PipsInAll = ;
for (int i = ; i OrdersHistoryTotal(); i++)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
if (OrderType() = 0 OrderType() 6)
if (OrderSymbol() == SymbolName || SymbolName == )
if (OrderMagicNumber() == MagicNumber || MagicNumber == -1)
if (!WriteInFile())
return();
// 02 ================== Окончание блока =============================
// 3 ====== Закрытие файла и вывод известия о завершении работы =====
if (!CloseFile()) return();
0Alert(Скрипт с успехом закончил работу!);
// 3 ================== Окончание блока =============================
return();
}

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

2 блок методично считывает ситуацию сделок. Предварительно инициализируются переменные CurrencyInAll и PipsInAll, в каких по завершению поиска будет присутствовать единая итоговая прибыль в СКВ депо и пт в соответствии с этим. Цикл поиска ордеров считается обычным для аналогичных упражнений. Присутствие ревизии на подобии ордера соединено с пребыванием в ситуации счета записей о пополнении счета и выводе средств. Непосредственно следовательно данные записи и отсеиваются. А раз отысканный ордер удовлетворяет всем притязаниям, то информация о нем записывается в файл посредством функции WriteInFile. Данная операция помимо прочего случается с проведением достаточных проверок и в случае оплошности исполнение скрипта прерывается.

3-ий блок накрывает открытый сначала исполнения программы файл и при удачном закрытии выводит известие о удачном завершении работы скрипта.

Функция OpenFile и еще довольно лаконична:

bool OpenFile()
{
// 1 ================== Попытка открытия файла =====================
FileHandle = FileOpen(FileName, FILE_CSV|FILE_WRITE);
if (FileHandle 1)
{
Alert(Не получилось открыть файл , FileName, для записи!);
return(False);
}
// 1 ================== Окончание блока =============================

// 2 ================== Запись заголовка файла ======================
if (FileWrite(FileHandle, Тикет, Дата/время открытия, Вид позиции, Размер,
Знак, Стоимость открытия, S/L, T/P, Дата/время закрытия,
Стоимость закрытия, Своп, Прибыль, СКВ, Прибыль, пункты) )
{
0Alert(Оплошность записи заголовка в файл!);
return(False);
}
// 2 ================== Окончание блока ============================
return(True);
}

Опосля открытия файла вызывается функция записи этих по любой сделке WriteInFile:

bool WriteInFile()
{
// 1 ===== Получение информации по прибору ордера ==============
int Dig = MarketInfo(OrderSymbol(), MODE_DIGITS);      // Число означающих цифр
double Points = MarketInfo(OrderSymbol(), MODE_POINT);          // Объем пт
if (GetLastError() == 4106 || Points == )                       // Инструмент не обнаружен
if (FileWrite(FileHandle, OrderTicket(), TimeToStr(OrderOpenTime()),
NumToStr(OrderType()), DoubleToStr(OrderLots(), 2), OrderSymbol(),
нет инф., нет инф., нет инф., TimeToStr(OrderCloseTime()),
нет инф., DoubleToExcel(OrderSwap(), 2),
DoubleToExcel(OrderProfit(), 2), нет инф.) )
{
0Alert(Оплошность записи в файл!);
return(False);
}
// 1 ================== Окончание блока =============================

// 2 ================== Вычисление прибыли в пт ===============
if (OrderType() == OP_BUY)
int ProfitPoints = MathRound((OrderClosePrice() OrderOpenPrice())/Points);
else
if (OrderType() == OP_SELL)
ProfitPoints = MathRound((OrderOpenPrice() OrderClosePrice())/Points);
else
ProfitPoints = ;
PipsInAll += ProfitPoints;
CurrencyInAll += OrderSwap() + OrderProfit();
// 2 ================== Окончание блока ============================

// 3 ================== Запись строки в файл ========================
if (FileWrite(FileHandle, OrderTicket(), TimeToStr(OrderOpenTime()),
NumToStr(OrderType()), DoubleToExcel(OrderLots(), 2), OrderSymbol(),
DoubleToExcel(OrderOpenPrice(), Dig), DoubleToExcel(OrderStopLoss(), Dig),
DoubleToExcel(OrderTakeProfit(), Dig), TimeToStr(OrderCloseTime()),
DoubleToExcel(OrderClosePrice(), Dig), DoubleToExcel(OrderSwap(), 2),
DoubleToExcel(OrderProfit(), 2), ProfitPoints) )
{
0Alert(Оплошность записи в файл!);
return(False);
}
// 3 ================== Окончание блока ============================
}

1-ый блок изготавливает попытку получения инфы по прибору обнаруженного ордера. Абсолютно быть может это, собственно в терминале отсутствует сходственный инструмент в «Обзоре базара». Хотя к ошибке работы скрипта данное не приведет. Просто будет невероятным верное округление значений стоимости и выгоды в пт. В следствии этого в надлежащие колонки файла станет записано «нет. инф.» нет инфы.

2 блок применяет эти по прибору, приобретенные в первом блоке для расчета ценности выгоды в пт. Тут ведь подсчитывается общественная прибыль в СКВ депо и пт.

3 блок просто записывает нужную информацию в файл по надлежащим колонкам таблицы. Тут надо заметить прием записи вещественных количеств. Оказывается в Excel нередко в виде разделителя целой и дробной доли применяется запятая, на тот момент как в MQL4 – точка. Потому посредством функции DoubleToExcel делается смена точки на запятую. Раз у вас в Excel разделителем целой и дробной доли количества выступает точка, то просто замените вызов DoubleToExcel на DoubleToStr.

И, в конце концов, заключительная функция CloseFile:

bool CloseFile()
{
if (FileWrite(FileHandle, ) ||0     // Пропуск одной строчки опосля этих по сделкам
FileWrite(FileHandle, Всего, , , , , , , , , , ,
DoubleToExcel(CurrencyInAll, 2), DoubleToStr(PipsInAll, )) )0    // Всего
{
Alert(Оплошность записи в файл!);
return(False);
}

FileClose(FileHandle);             // Закрытие файла
}

В данной функции все кроме того наверное явно. Перед закрытием файла в него дописываются ценности единой выгоды в СКВ депо и пт

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *