- Как определить возникновение нового бара не по тику?
- Стаканные роботы поделитесь опытом ?
- Ошибки, баги, вопросы
В виндовом терминале стакан цен состоит из 20 предложений по покупке и 20 по продаже, есть какой либо вариант отобразить там больше позиций?
Эти настройки делает брокер
Стакан может быть 5-20-50 котировок с каждой стороны
Эти настройки делает брокер
Стакан может быть 5-20-50 котировок с каждой стороны
Благодарю!
А есть ли возможность в mql5 экспортировать этот стакан с каждым тиком? Например в CSV, например скриптом.
Есть ли в такой в природе?
Благодарю!
А есть ли возможность в mql5 экспортировать этот стакан с каждым тиком? Например в CSV, например скриптом.
Есть ли в такой в природе?
Думаю что нет, но написать можно.
Еще раз спасибо!
//| Book_collector.mq5 |
//| Copyright 2016 |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016"
#property link "https://www.mql5.com"
#property version "1.00"
//
struct BOOK_DATA
{
uint sell_cnt;
double sell_price[];
long sell_volume[];
uint buy_cnt;
double buy_price[];
long buy_volume[];
};
//
BOOK_DATA book_data;
//
int file_handle;
string file_name;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(!MarketBookAdd(Symbol()))
{
Alert("Book not added!");
return(INIT_FAILED);
}
int book_depth=int(SymbolInfoInteger(Symbol(),SYMBOL_TICKS_BOOKDEPTH));
if(book_depth>0)
{
ArrayResize(book_data.sell_price, book_depth);
ArrayResize(book_data.sell_volume, book_depth);
ArrayResize(book_data.buy_price, book_depth);
ArrayResize(book_data.buy_volume, book_depth);
}
else
{
Alert("Book not have depth!");
return(INIT_FAILED);
}
file_name=Symbol()+".csv";
file_handle=FileOpen(file_name,FILE_WRITE|FILE_CSV);
if(file_handle==INVALID_HANDLE)
{
Alert("File not created!");
return(INIT_FAILED);
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
MarketBookRelease(Symbol());
if(file_handle!=INVALID_HANDLE)
{
FileClose(file_handle);
}
}
//+------------------------------------------------------------------+
//| Get Book data function |
//+------------------------------------------------------------------+
bool GetBookData(BOOK_DATA &a_data)
{
a_data.buy_cnt=0;
a_data.sell_cnt=0;
MqlBookInfo book_price[];
//--- Get book
if(MarketBookGet(Symbol(),book_price))
{
int size=ArraySize(book_price);
if(size>0)
{
for(int i=0; i<size; i++)
{
if(book_price[i].type==BOOK_TYPE_SELL)
{
a_data.sell_price[a_data.sell_cnt]=book_price[i].price;
a_data.sell_volume[a_data.sell_cnt]=book_price[i].volume;
a_data.sell_cnt++;
}
else
if(book_price[i].type==BOOK_TYPE_BUY)
{
a_data.buy_price[a_data.buy_cnt]=book_price[i].price;
a_data.buy_volume[a_data.buy_cnt]=book_price[i].volume;
a_data.buy_cnt++;
}
}
return(true);
}
}
return(false);
}
//+------------------------------------------------------------------+
//| BookEvent function |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{
if(symbol==Symbol())
{
if(GetBookData(book_data))
{
//запись данных в файл
}
}
}
//+------------------------------------------------------------------+
Вот сборщик стакана, только нет записи данных в файл, т.к
не знаю в каком виде Вам нужны данные
//| Book_collector.mq5 |
//| Copyright 2016 |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016"
#property link "https://www.mql5.com"
#property version "1.00"
//
struct BOOK_DATA
{
uint sell_cnt;
double sell_price[];
long sell_volume[];
uint buy_cnt;
double buy_price[];
long buy_volume[];
};
//
BOOK_DATA book_data;
//
int file_handle;
string file_name;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(!MarketBookAdd(Symbol()))
{
Alert("Book not added!");
return(INIT_FAILED);
}
int book_depth=int(SymbolInfoInteger(Symbol(),SYMBOL_TICKS_BOOKDEPTH));
if(book_depth>0)
{
ArrayResize(book_data.sell_price, book_depth);
ArrayResize(book_data.sell_volume, book_depth);
ArrayResize(book_data.buy_price, book_depth);
ArrayResize(book_data.buy_volume, book_depth);
}
else
{
Alert("Book not have depth!");
return(INIT_FAILED);
}
file_name=Symbol()+".csv";
file_handle=FileOpen(file_name,FILE_WRITE|FILE_CSV);
if(file_handle==INVALID_HANDLE)
{
Alert("File not created!");
return(INIT_FAILED);
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
MarketBookRelease(Symbol());
if(file_handle!=INVALID_HANDLE)
{
FileClose(file_handle);
}
}
//+------------------------------------------------------------------+
//| Get Book data function |
//+------------------------------------------------------------------+
bool GetBookData(BOOK_DATA &a_data)
{
a_data.buy_cnt=0;
a_data.sell_cnt=0;
MqlBookInfo book_price[];
//--- Get book
if(MarketBookGet(Symbol(),book_price))
{
int size=ArraySize(book_price);
if(size>0)
{
for(int i=0; i<size; i++)
{
if(book_price[i].type==BOOK_TYPE_SELL)
{
a_data.sell_price[a_data.sell_cnt]=book_price[i].price;
a_data.sell_volume[a_data.sell_cnt]=book_price[i].volume;
a_data.sell_cnt++;
}
else
if(book_price[i].type==BOOK_TYPE_BUY)
{
a_data.buy_price[a_data.buy_cnt]=book_price[i].price;
a_data.buy_volume[a_data.buy_cnt]=book_price[i].volume;
a_data.buy_cnt++;
}
}
return(true);
}
}
return(false);
}
//+------------------------------------------------------------------+
//| BookEvent function |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{
if(symbol==Symbol())
{
if(GetBookData(book_data))
{
//запись данных в файл
}
}
}
//+------------------------------------------------------------------+
Вот сборщик стакана, только нет записи данных в файл, т.к
не знаю в каком виде Вам нужны данные
К сожалению не владею программированием на данном языке.
Формат нужен либо CSV либо линейно записать в базу MySql.
К сожалению не владею программированием на данном языке.
Формат нужен либо CSV либо линейно записать в базу MySql.
Дело не в программировании, а в каком виде Вы ходите видеть данные
в файле (CSV)
Дело не в программировании, а в каком виде Вы ходите видеть данные
в файле (CSV)
На подобии того, как можно экспортировать тики из стакана цен в MetaTrader 5.
Пример:
Time,Bid,Ask,Last,Volume,Type
2016.11.26 17:29:51.913,3341.01,201.42,8771.36,349,Buy
2016.11.26 17:29:52.231,8701.04,8771.27,8771.04,144,Sell
К каждому тику нужно добавить стакан цен на момент совершения сделки, стакан цен состоит из 20 котировок в каждую сторону.
Добавить нужно объем и цену, должно получиться нечто вроде такого:
2016.11.26 17:29:51.913,3341.01,201.42,8771.36,349,Buy,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100
2016.11.26 17:29:52.231,8701.04,8771.27,8771.04,144,Sell,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100,31.01,100
Где 31.01 - это цена, а 100 это объем. (Значения одинаковые для примера)
Сначала идут 20 котировок продажи в порядке убывания а затем 20 покупки в порядке возрастания.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования