Используйте лучше статическую переменную для хранения предыдущего значения ask^
double current_ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
if(current_ask>=prev_ask+5*Point())
{
Alert(current_ask+" "+prev_ask);
}
prev_ask=current_ask;
Добавлено: этот код полностью разместить в OnTick().
Добавлено: и ещё - Ваше условие (в коде) читается так: (если текущая цена) больше или равна (предыдущая цена плюс 5 пунктов). То есть если текущая цена может быть и на 5 и на 10 и на более пунктов больше предыдущей - например на открытии часа произошёл геп.
Используйте лучше статическую переменную для хранения предыдущего значения ask^
double current_ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
if(current_ask>=prev_ask+5*Point())
{
Alert(current_ask+" "+prev_ask);
}
prev_ask=current_ask;
Добавлено: этот код полностью разместить в OnTick().
Спасибо. И, все-таки, разница в несколько пунктов(поверх указанных пяти) это нормально?
Добавлено: и ещё - Ваше условие (в коде) читается так: (если текущая цена) больше или равна (предыдущая цена плюс 5 пунктов). То есть если текущая цена может быть и на 5 и на 10 и на более пунктов больше предыдущей - например на открытии часа произошёл геп.
Да, я понимаю, что условие именно такое, но, ведь прежде чем цена станет выше предыдущей на 15 пунктов, она будет выше предыдущей на 1-2-3-4-5-... пунктов И, по логике, когда цена сравнивается или больше на 1 пункт, должен отработать Алерт.
Здравствуйте. Есть есть код:
//+------------------------------------------------------------------+
void OnTick()
{
double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
if(ask1==0) ask1=Ask;
if(Ask>=ask1+5*_Point) {Alert(Ask+" "+ask1); ask1=Ask;}
}
Смыл кода в том, что, если текущий аск больше(либо равен) предыдущего значения аск+5 пунктов, то Алерт.
Почему разница между старой и новой Ценами Аск(судя по алертам) может превышать заданные 5 пунктов больше, чем на 3 пункта? Есть, даже, разница в 15 пунктов.
Может ли это происходить из-за режима тестирования "Каждый тик на основе реальных тиков"?
Вот написал по-скорому класс вам для удобной работы с тиками
//| 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;
}
}
//+------------------------------------------------------------------+
Нет. Цена может быть: 1.00356, 1.00356, а потом раз и 1.00369!
Вот написал по-скорому класс вам для удобной работы с тиками
//| 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;
}
}
//+------------------------------------------------------------------+
Спасибо.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте. Есть есть код:
//+------------------------------------------------------------------+
void OnTick()
{
double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
if(ask1==0) ask1=Ask;
if(Ask>=ask1+5*_Point) {Alert(Ask+" "+ask1); ask1=Ask;}
}
Смыл кода в том, что, если текущий аск больше(либо равен) предыдущего значения аск+5 пунктов, то Алерт.
Почему разница между старой и новой Ценами Аск(судя по алертам) может превышать заданные 5 пунктов больше, чем на 3 пункта? Есть, даже, разница в 15 пунктов.
Может ли это происходить из-за режима тестирования "Каждый тик на основе реальных тиков"?