//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
// создадим файл
/*
int handle;
handle=FileOpen("my_data.csv",FILE_CSV|FILE_WRITE,';');
// в цикле пробежимся по истории сделок и занесём их в файл
int cnt, ticket, total,TotalOpenOrders;
total=OrdersHistoryTotal();
for ( cnt = 0; cnt < total; cnt++ ) {
if (OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY) == true) {
if (OrderProfit() != 0){
//Print(OrderOpenTime(),";",OrderType(),";",OrderProfit());
FileWrite(handle, OrderOpenTime(), OrderType(), OrderProfit() );
// подставь тут свою информацию - Раздель информации будет ";" - выставится Автоматически
// чтобы потом в Екселе открыть по этому разделителю...
// предварительно, перед открытием в екселе - надо будет заменить все точки на запятые
// файл сохранится в папке Alpari\tester\files\my_data.csv
}
}
}
// закроем файл
FileClose(handle);
//----
*/
//----
string Txt;
int cnt;
int ha1 = FileOpen("my_data.csv",FILE_CSV|FILE_WRITE,';');
int total = OrdersHistoryTotal();
int Type = 0;
//----
for ( cnt = 0; cnt < total ; cnt++ ) {
if (OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY) == true)
{
if (OrderType()!=Type)
{
FileWrite(ha1, Txt);
Txt="";
}
if (OrderType() == 0)
{
// временно уберём замену точки на запятую
// Txt = StringSetChar(DoubleToStr(OrderProfit(),2), StringFind(DoubleToStr(OrderProfit(),2), "."), ',' ) + ";" + Txt;
// кстати это можно сделать и в обычно текстовом редакторе через поиск и замену
/// дааа - вот тут ошибка - результат серии вставляется в Начало строки - а надо бы в конец... ну не суть
// позже изменю
Txt = Txt + DoubleToStr(OrderProfit(),2) + ";" ;
}
if (OrderType() == 1)
{
// аналогично
//Txt = StringSetChar(DoubleToStr(OrderProfit(),2), StringFind(DoubleToStr(OrderProfit(),2), "."), ',' ) + ";" + Txt;
Txt = Txt + DoubleToStr(OrderProfit(),2) + ";" ;
}
Type = OrderType();
// файл сохранится в папке Alpari\tester\files\my_data.csv
}
}
FileClose(ha1);
//----
/// Доливщик
int ha2 = FileOpen("dolivka_data.csv",FILE_CSV|FILE_WRITE,';');
ha1=FileOpen("my_data.csv",FILE_CSV|FILE_READ,';'); // открывает тот файл куда записали результаты серий...
int Kls,prD = 0; // признак доливки
double lot1, // первоначальный лот
lot2, // лот с доливкой
res0, // dummi
res1, // первый результат в серии
sum1, // результат текущей сделки
sum2, // результат если сделка дала минус
sum3; // результат Общий
// пробежимся в цикле по итогам 1ой сделки в серии
lot1 = 1; lot2 = 1;
while (!FileIsEnding(ha1) ) {
// считали Первый результат в серии
res1 = FileReadNumber(ha1);
// теперь пропустим до конца строки
while (!FileIsLineEnding(ha1) ) {
res0 = FileReadNumber(ha1);
}
Kls = Kls + 1;
FileWrite(ha2, " ");
FileWrite(ha2, "=========== Серия = " + DoubleToStr(Kls,0) );
Txt = " Рабочий лот = " + DoubleToStr(lot2,1);
Txt = Txt + "| Сумма в серии = " + DoubleToStr(sum2,2);
Txt = Txt + "| Итоговая = " + DoubleToStr(sum3,2);
FileWrite(ha2, Txt);
//
// теперь собственно типа сделки
sum1 = lot2 * res1;
// запишем результат в итоги
sum2 = sum2 + sum1;
Txt = "Сделка = " + DoubleToStr(sum1,2);
Txt = Txt + " Sсерии = " + DoubleToStr(sum2,2);
Txt = Txt + " Sобщая = " + DoubleToStr(sum3,2);
FileWrite(ha2, Txt);
// если итог положительный то в Итоговую копилку его
if (sum2 > 0) {
sum3 = sum3 + sum2;
// всё в первоначальное состояние
sum2 = 0;
sum1 = 0;
lot2 = lot1;
prD = 0;
}
// разбираемся с лотами
if (sum1 < 0) prD = 1;
if (sum1 > 0 && prD == 1) {// после серии убыточных сделок - появилась Положительная - Увеличим лот на +1
prD = 0;
lot2 = lot2 + 1;
}
}
// запишем полный итог
FileWrite(ha2, "=== END ===");
Txt = "=== Последняя Сделка === " + DoubleToStr(sum1,2);
Txt = Txt + " Sсерии = " + DoubleToStr(sum2,2);
Txt = Txt + " Sобщая = " + DoubleToStr(sum3,2);
FileWrite(ha2, Txt);
FileWrite(ha2, "=== итого ===");
sum3 = sum3 + sum2;
FileWrite(ha2, DoubleToStr(sum3,2) );
FileClose(ha1);
FileClose(ha2);
return(0);
}