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

Рейтинг 283



По просьбе 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
  • Просмотров: 7691
  • 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

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