Официальное продолжение решение вопроса моего друга 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
Все готово, файл создан и записывается значение туда
Вот пример:
А вот и значения в экселевском документе:
Будут вопросы по работе инфосоветника, задавайте! Отвечу с радостью
Кому понравился пост, жмите «Мне нравится»
Комментарии (2)
Еще бы выложил сразу график изменения значений для наглядности
18 KranX Сообщений: 1786 - Жека
Только предварительно пришлось создать новую графу с шкалой от 1 до n минут(советник был на минутном графике), пришлось заменить точки на запятые в графе значения через сочетание клавишь Ctrl+H. И построить собственно диаграмму
Из рисунка видно как менялась Прибыль_Убыток за 45 минут где то
Посмотрим понравится ли это wizzard-у
9 amyrgan145 Автор Сообщений: 428 - Амыр
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий