IsNewBar() для таймфрейма М30 соответственно
:) все Новый год отмечают, только я один на форуме
up
Aliaksandr Kryvanos:
up
up
Можете использовать класс, который позволит всегда иметь в своём распоряжении прошлые и текущие Ask, Bid и их время поступления:
//+------------------------------------------------------------------+
//| aTickClass.mqh |
//| Copyright 2015, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CTick
{
private:
//--- Структура данных прошлого и текущего тиков
struct DataTick
{
MqlTick prev_tick; // Прошлый тик
MqlTick curr_tick; // Текущий тик
};
DataTick dataTick; // Структура данных тика
string m_symbol; // Символ
public:
//--- Инициализирует, возвращает символ
void SetSymbol(string symbol_name) {m_symbol=symbol_name;}
string GetSymbol(void) {return(m_symbol);}
//--- Заполняет структуру последнего и предпоследнего тиков по символу
void FillingDataTick();
//--- Возвращает значение Ask/Bid/Time на прошлом тике
double GetTickPrevAsk(void) {return(dataTick.prev_tick.ask);}
double GetTickPrevBid(void) {return(dataTick.prev_tick.bid);}
datetime GetTickPrevTime(void) {return(dataTick.prev_tick.time);}
//--- Возвращает значение Ask/Bid/Time текущего тика
double GetTickAsk(void) {return(dataTick.curr_tick.ask);}
double GetTickBid(void) {return(dataTick.curr_tick.bid);}
datetime GetTickTime(void) {return(dataTick.curr_tick.time);}
//---
CTick();
~CTick();
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CTick::CTick()
{
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CTick::~CTick()
{
}
//+------------------------------------------------------------------+
//| Заполняет структуру последнего и предпоследнего тиков по символу |
//+------------------------------------------------------------------+
void CTick::FillingDataTick(void) {
if(m_symbol=="") {
Print(__FUNCTION__," > Не инициализирован символ. Необходимо его инициализировать: SetSymbol()");
return;
}
MqlTick ct;
if(SymbolInfoTick(m_symbol,ct)) {
if(dataTick.prev_tick.time==0) {
dataTick.prev_tick.ask=ct.ask;
dataTick.prev_tick.bid=ct.bid;
dataTick.prev_tick.time=ct.time;
return;
}
dataTick.prev_tick.ask=dataTick.curr_tick.ask;
dataTick.prev_tick.bid=dataTick.curr_tick.bid;
dataTick.prev_tick.time=dataTick.curr_tick.time;
dataTick.curr_tick.ask=ct.ask;
dataTick.curr_tick.bid=ct.bid;
dataTick.curr_tick.time=ct.time;
}
}
//+------------------------------------------------------------------+
//| aTickClass.mqh |
//| Copyright 2015, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CTick
{
private:
//--- Структура данных прошлого и текущего тиков
struct DataTick
{
MqlTick prev_tick; // Прошлый тик
MqlTick curr_tick; // Текущий тик
};
DataTick dataTick; // Структура данных тика
string m_symbol; // Символ
public:
//--- Инициализирует, возвращает символ
void SetSymbol(string symbol_name) {m_symbol=symbol_name;}
string GetSymbol(void) {return(m_symbol);}
//--- Заполняет структуру последнего и предпоследнего тиков по символу
void FillingDataTick();
//--- Возвращает значение Ask/Bid/Time на прошлом тике
double GetTickPrevAsk(void) {return(dataTick.prev_tick.ask);}
double GetTickPrevBid(void) {return(dataTick.prev_tick.bid);}
datetime GetTickPrevTime(void) {return(dataTick.prev_tick.time);}
//--- Возвращает значение Ask/Bid/Time текущего тика
double GetTickAsk(void) {return(dataTick.curr_tick.ask);}
double GetTickBid(void) {return(dataTick.curr_tick.bid);}
datetime GetTickTime(void) {return(dataTick.curr_tick.time);}
//---
CTick();
~CTick();
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CTick::CTick()
{
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CTick::~CTick()
{
}
//+------------------------------------------------------------------+
//| Заполняет структуру последнего и предпоследнего тиков по символу |
//+------------------------------------------------------------------+
void CTick::FillingDataTick(void) {
if(m_symbol=="") {
Print(__FUNCTION__," > Не инициализирован символ. Необходимо его инициализировать: SetSymbol()");
return;
}
MqlTick ct;
if(SymbolInfoTick(m_symbol,ct)) {
if(dataTick.prev_tick.time==0) {
dataTick.prev_tick.ask=ct.ask;
dataTick.prev_tick.bid=ct.bid;
dataTick.prev_tick.time=ct.time;
return;
}
dataTick.prev_tick.ask=dataTick.curr_tick.ask;
dataTick.prev_tick.bid=dataTick.curr_tick.bid;
dataTick.prev_tick.time=dataTick.curr_tick.time;
dataTick.curr_tick.ask=ct.ask;
dataTick.curr_tick.bid=ct.bid;
dataTick.curr_tick.time=ct.time;
}
}
//+------------------------------------------------------------------+
По использованию, как самый простой вариант:
В OnInit() вызываете SetSymbol() с нужным символом.
Далее на каждом тике вызываете FillingDataTick();
Для получения данных вызываете нужные методы:
GetTickPrevAsk() - для получения прошлой цены Ask
GetTickPrevBid() - для получения прошлой цены Bid
GetTickPrevTime() - для получения времени прошлого тика
//---
GetTickAsk() - для получения текущей цены Ask
GetTickBid() - для получения текущей цены Bid
GetTickTime() - для получения времени прихода текущего тика
Файлы:
aTickClass.mqh
8 kb
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте, верно ли я пишу код, хочу узнать цены Ask и Bid до появления нового бара, скажем на М30 и после появления нового бара, чтобы сравнить их
{
double oldAsk=0,oldBid=0,newAsk=0,newBid=0;
oldAsk = MarketInfo(NULL, MODE_ASK);
oldBid = MarketInfo(NULL, MODE_BID);
if(IsNewBar())
{
newAsk = MarketInfo(NULL, MODE_ASK);
newBid = MarketInfo(NULL, MODE_BID);
// хдесь сравниваем oldAsk, oldBid, newAsk, newBid
}
}