|
|||||
|
|||||
Иногда создается впечатление, что тестер в МТ4 и сами боты живут самостоятельной жизнью. Даже более-менее прибыльные стратегии из-за некорректных действий ПО МТ4 могут сливать. Поэтому результирующий стейт - не показатель. Надо каждую сделку проверять и анализировать.
Победителей не судят... Хищников тоже...
clusterdelta.com - биржевой информационно-аналитический портал
С уважением, Радик
привет всем! как узнать код VWAP хотел бы написать советник, кстати я чайник)
а код на Мета Эдитор не подскажешь добрый друг)))
типа int; ... и т д
Всем привет, помогите пожалуйста с профилем дельты. Нужен специальный индикатор профиля. Кто может помочь словом, а может и делом?????
Добрый день, уважаемые форумчане!
Прошу вашей помощи в решении следующей задачи.
Есть CSV-файл истории (взят промо-файл на этом сайте).
Хочу отобразить на экране (или подгрузить данные в терминал) историю из этого CSV-файла. Меня интересуют только объем и дельта.
Я себе это представляю так – объемы в одном подокне под графиком, дельта во втором подокне под объемами.
Так как разные подокна, то я понимаю, что тут необходимо будет два индикатора (или скрипта???) – один для объемов, другой для дельты. Они будут практически идентичными.
Также, если это возможно, то сразу предусмотреть такую возможность, что бы в будущем сторонний пользовательский индикатор (или советник) смог как-то обращаться к этому индикатору/скрипту и работать с данными объема и дельты. Или так не получится?
Я читал справку по MQL по файловым операциям, но, честно признаюсь, туго. Примеров маловато.
Хочется разобраться в этом самому. Но не знаю с чего начать
Заранее благодарен!
Всем профитов!!!
Доброго времени суток!
В продолжение своего вопроса о чтении файла истории
Начал копать. Пока всё что удалось найти - это скрипт, который читает CSV-файл и рисует вертикальные линии на графике
Взял его за основу. Немного подправил.
Но сейчас у меня возникла проблема с выводом данных в функции DrawIndicator.
Пока ума не приложу, как и что там надо написать, что бы правильно рисовалась гистограмма объемов (вернее сказать, что бы она вообще там рисовалась).
Прошу людей, разбирающихся в MQL посмотреть и подсказать.
Вот код:
//+------------------------------------------------------------------+
//| History_VOLUME_1.mq4 |
//| В качестве основы взят скрипт |
//| http://www.mqlvopros.net |
//| Список вопросов |
//| Вопрос |
//| Здравствуйте! Подскажите, пожалуйста, как правильно вызвать |
//| теперь функцию ReadCSVFile |
//+------------------------------------------------------------------+
//--- indicator settings
#property indicator_separate_window // рисуем индикатор в отдельном окне
#property indicator_buffers 1 // количество буферов индикатора - 1
#property indicator_color1 Black // цвет индикаторной линии
#property indicator_width1 2 // толщина индикаторной линии - 2
//---- indicator buffers
double VOL[];
//+------------------------------------------------------------------+
//| Структура для хранения данных |
//+------------------------------------------------------------------+
struct History
{
datetime date_op; // дата открытия бара
datetime time_op; // время открытия бара
datetime date_cl; // дата закрытия бара
datetime time_cl; // время закрытия бара
double open; // цена открытия
double high; // максимальная цена
double low; // минимальная цена
double close; // цена закрытия
int volume; // объем
int delta; // дельта
int ask; // аск
int bid; // бид
datetime expiration; // месяц экспирации
};
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//--- drawing settings
SetIndexStyle(0,DRAW_HISTOGRAM);
//---- indicator buffers mapping
SetIndexBuffer(0,VOL);
//--- name for DataWindow and indicator subwindow label
IndicatorShortName("VOLUME");
SetIndexLabel(0,"VOLUME");
//--- initialization done
return(0);
}
//--------------------------------------------------------------- 1 --
int start() // Спец. функция start
//--------------------------------------------------------------- 2 --
{
string File_Name="EURO_15_min_2014.csv"; // Имя файла истории
{
//---
History lines[];
// Прочитаем данные из файла
// Если файл успешно найден и открыт получим true
if(ReadCSVFile(File_Name, lines))
{
// проверим были ли собраны данные
if(ArraySize(lines) > 0)
{
// отрисуем каждый прочитанный объем
for(int i = ArraySize(lines)-1; i >= 0; i--)
DrawIndicator(lines[i]);
}
else
Print("Данные отсутствуют!");
}
else
Print("Ошибка извлечения данных!");
//---
}
return (0);
}
//---------------------------------------------------------------- 3 --
//+--------------------------------------------------------------------+
//| Выполняет чтение данных из csv фала
//| fileName - имя csv файла
//| lines - результирующий массив
//+--------------------------------------------------------------------+
bool ReadCSVFile(string File_Name, History &lines[])
{
bool _result = false;
// Обнуление результирующего массива
ArrayResize(lines,0);
// открытие файла
int _fileHandle = FileOpen(File_Name,FILE_READ|FILE_CSV,";");
if(_fileHandle != INVALID_HANDLE)
{
// изменим результат выполнения метода
_result = true;
// Установка файлового указателя в начало файла
FileSeek(_fileHandle,0,SEEK_SET);
// Чтение до конца файла
while(!FileIsEnding(_fileHandle))
{
// увеличим размер результирующего массива
ArrayResize(lines,ArraySize(lines)+1);
// получим номер добавленного элемента
int _addItemNum = ArraySize(lines)-1;
// чтение даты открытия бара
lines[_addItemNum].date_op = (int)FileReadNumber(_fileHandle);
// чтение времени открытия бара
lines[_addItemNum].time_op = FileReadString(_fileHandle);
// чтение значения объема
lines[_addItemNum].volume = FileReadDatetime(_fileHandle);
}
// Закроем файл
FileClose(_fileHandle);
}
else
Print("Ошибка открытия файла: " + IntegerToString(GetLastError()));
//
return _result;
}
//+------------------------------------------------------------------+
// Метод выводящий в подокно гистограмму объема
//+------------------------------------------------------------------+
bool DrawIndicator(History &lines)
{
bool _result = false;
// отрисовывать необходимо только сделки по тек инструменту
if(lines.date_op != 0) return _result;
// найдем индекс бара, на котором нужно разместить графический объект
int _indexBar = iBarShift(_Symbol,_Period, lines.orderOpenTime, true);
if(_indexBar > -1)
{
// Составим имя графического объекта
string _objName = "order #"+IntegerToString(lines.ticketNum);
// Проверим, что бы такого графического объекта не существовало
if(ObjectFind(0, _objName) == -1)
{
// Определим тип объекта в зависимости от тип ордера
ENUM_OBJECT _objType = NULL;
if(lines.orderType == OP_BUY)
{
_objType = OBJ_ARROW_BUY;
}
else
if(lines.orderType == OP_SELL)
{
_objType = OBJ_ARROW_SELL;
}
if(_objType != NULL)
{
// Создание графического объекта
if(!ObjectCreate(0, _objName, _objType, 0, Time[_indexBar],
lines.orderOpenPrice))
{
Print("Ошибка при создании объекта "+_objName+
" #"+IntegerToString(GetLastError()));
}
}
}
}
//
return _result;
}
//+------------------------------------------------------------------+
ПС
Может я зря велосипед изобретаю и у кого-нибудь уже есть такой индикатор, который читает историю ???
Грубо говоря у тебя массив таймсерий - Time, Bars, Open, Close и так далее.
Последний (текущий) бар имеет индекс 0, все что влево от него идет 1, 2, 3 и так далее
у тебя есть массив VOL, он определен как буфер для гистограммы объема
Соответственно все значения в этом буфере будут отображены как гистограмма индикатора. Номера индексов такие же как и таймсерий.
Задача: получить время и объем бара из СSV, найти соответствующее время открытия в МТ4, найти его порядковый номер и присвоить порядковому номеру массива VOL значение объема. Для поиска можно использовать функцию MT4 ArrayBSearch, но надо помнить, что она ищет ближайший по значению элемент в отсортированном массиве.
В вышеприведенном примере используется функция iBarShift(_Symbol,_Period, lines.orderOpenTime, true);
Дальше в примере строятся объекты на каждый объем, но я бы так не делал - ведь по факту определен буфер, занеси в него значения и объекты МТ4 построит самостоятельно + сам же будет следить за их изменением .
(C) 2009-2023 ClusterDelta.com.