Группа "Программирование на MQL"

Рейтинг 280



По просьбе wizzard... Инфосоветник. (Часть 2)

Официальное продолжение решение вопроса моего друга wizzard-а...

… необходимо получить график зависимости суммы прибыли(убытка) по текущим открытым сделкам от времени. То есть если открыто три сделки +5, -12, +15 то значение +8.
Интересна зависимость этого параметра от времени. Можно каждую минуту вычислять этот параметр и складывать в файл.


Часть 1 состоит в том, чтобы получать значения об открытых ордерах всех валютных пар, полностью, их сумму в общем отображении.
Часть 2 состоит в том, чтобы задавая периодичность времени в настройках, эксперт мог сохранять в файл значение Прибыль_Убыток каждый раз с периодичностью n минут и записывать время в которое это произошло.

Часть 1 находится вот здесь
Ниже представлена реализация второй части *улыбается*
//+------------------------------------------------------------------+
//|                                      InfoEXPERT#2-amyrgan145.mq4 |
//|                                                          amyrgan |
//|                                                amyrgan@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "amyrgan"
#property link      "amyrgan@yandex.ru"

extern bool Включить_инфосоветник = true;
string   FileName,TextInFile; // глобальные переменные
//+------------------------------------------------------------------+
// Инит!
//+------------------------------------------------------------------+
void init(){
}
//+------------------------------------------------------------------+
// Деинит!
//+------------------------------------------------------------------+
void deinit(){
}
//+------------------------------------------------------------------+
// Старт!
//+------------------------------------------------------------------+
void start(){
   if(Включить_инфосоветник) // работаем если все включено и есть добро на работу <img src='/templates/skin/g6h/images/smilies/002.gif' alt=' *улыбается* '>
   { 
      double Прибыль_Убыток = ВычислениеПрибылиИлиУбытка(); // вычисление значения открытых позиций
      // --------- Генерируем имя файла ------------------
      FileName=Symbol()+"_"+DoubleToStr(Day(),0)+"_"+DoubleToStr(Month(),0)+"_"+DoubleToStr(Year(),0)+".csv";
      TextInFile=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
      TextInFile=TextInFile+";"+DoubleToStr(Прибыль_Убыток,Digits);
      // --------- Вспомогательная информация ------------
      Comment("\n",
      "Прибыль_Убыток = ", Прибыль_Убыток); // комментарий мой любимый <img src='/templates/skin/g6h/images/smilies/002.gif' alt=' *улыбается* '>
      // --------- Запись нового значения ----------------
      if (NewBar() == true) WritingLineInFile(FileName,TextInFile); // если новый бар, то записываем значение <img src='/templates/skin/g6h/images/smilies/002.gif' alt=' *улыбается* '>
   }
}
//+------------------------------------------------------------------+
// Сумма открытых ордеров                                   
//+------------------------------------------------------------------+
double ВычислениеПрибылиИлиУбытка()
  {
   double buys=0,sells=0;

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;
         if(OrderType()==OP_BUY) buys += OrderProfit();
         if(OrderType()==OP_SELL) sells += OrderProfit();
     }
   return(buys+sells);
  }
//+------------------------------------------------------------------+
// Определение появления нового бара!                                
//+------------------------------------------------------------------+
bool NewBar()
{
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   } 
   else return(false);
}
//+------------------------------------------------------------------+
//| Дописывание строки в конец файла
//+------------------------------------------------------------------+
void WritingLineInFile(string FlName, string Text){
  int file_handle=FileOpen(FlName, FILE_CSV|FILE_READ|FILE_WRITE, " ");
	if (file_handle>0){
		FileSeek(file_handle,0,SEEK_END);
		FileWrite(file_handle,Text);
		FileClose(file_handle);
	}
	else{
	  Print("Ошибка ",GetLastError()," - Не удалось открыть файл ",FlName);
   }
}
//+------------------------------------------------------------------+


Все работает довольно просто:
— открываете график, выбираете таймфрейм (если ТФ 5 минут, то советник каждые 5 минут будет записывать новые значения)
— вешаете советника на график, всего 1 входной параметр делаем на true
— заходим в дирректорию MetaTrader4\experts\files
Все готово, файл создан и записывается значение туда *улыбается*

Вот пример:

А вот и значения в экселевском документе:

Будут вопросы по работе инфосоветника, задавайте! Отвечу с радостью *улыбается*

Кому понравился пост, жмите «Мне нравится»
  • +3
  • Просмотров: 7587
  • 14 ноября 2011, 21:20
  • amyrgan145
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Программирование на MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
По просьбе wizzard... Инфосоветник. (Часть 1)
11 ноября 2011
06 января 2012

Брокер для ваших роботов, 15 лет на рынке

Комментарии (2)

+
0
А вот и значения в экселевском документе:

Еще бы выложил сразу график изменения значений для наглядности
avatar

  18  KranX Сообщений: 1786 - Жека

  • 14 ноября 2011, 23:52
+
+1
Вот *улыбается*


Только предварительно пришлось создать новую графу с шкалой от 1 до n минут(советник был на минутном графике), пришлось заменить точки на запятые в графе значения через сочетание клавишь Ctrl+H. И построить собственно диаграмму *улыбается*
Из рисунка видно как менялась Прибыль_Убыток за 45 минут где то *улыбается*

Посмотрим понравится ли это wizzard-у *улыбается*
avatar

  9  amyrgan145 Автор Сообщений: 428 - Амыр

  • 15 ноября 2011, 07:36

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий