Как определить в какую сторону закрылась свеча с индексом i+1
В индикаторе - в OnCalculate() есть все необходимые массивы таймсерии - только с индексированием не перепутайте. В советнике - при помощи CopyOpen() и CopyClose().
Вот пример советника "The direction of the closed candle.mq5":
//| The direction of the closed candle.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.000"
#property description "The direction of the closed candle"
//--- input parameters
input int InpNumberCandle=1; // number of a candle (the most right has the index "0")
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
string text="";
double open=iOpen(InpNumberCandle);
double close=iClose(InpNumberCandle);
//--- protection
if(open==0 || close==0)
return;
double direction=close-open;
if(direction>0)
text="UP";
if(direction<0)
text="DOWN";
if(direction==0)
text="---";
Comment("The candle No. ",IntegerToString(InpNumberCandle)," was closed: ",text);
}
//+------------------------------------------------------------------+
//| Get Open for specified bar index |
//+------------------------------------------------------------------+
double iOpen(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
{
if(symbol==NULL)
symbol=Symbol();
if(timeframe==0)
timeframe=Period();
double Open[];
double open=0;
ArraySetAsSeries(Open,true);
int copied=CopyOpen(symbol,timeframe,index,1,Open);
if(copied>0) open=Open[0];
return(open);
}
//+------------------------------------------------------------------+
//| Get Close for specified bar index |
//+------------------------------------------------------------------+
double iClose(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
{
if(symbol==NULL)
symbol=Symbol();
if(timeframe==0)
timeframe=Period();
double Close[];
double close=0;
ArraySetAsSeries(Close,true);
int copied=CopyClose(symbol,timeframe,index,1,Close);
if(copied>0) close=Close[0];
return(close);
}
//+------------------------------------------------------------------+
И картинка:
Вот пример советника "The direction of the closed candle.mq5":
//| The direction of the closed candle.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.000"
#property description "The direction of the closed candle"
//--- input parameters
input int InpNumberCandle=1; // number of a candle (the most right has the index "0")
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
string text="";
double open=iOpen(InpNumberCandle);
double close=iClose(InpNumberCandle);
//--- protection
if(open==0 || close==0)
return;
double direction=close-open;
if(direction>0)
text="UP";
if(direction<0)
text="DOWN";
if(direction==0)
text="---";
Comment("The candle No. ",IntegerToString(InpNumberCandle)," was closed: ",text);
}
//+------------------------------------------------------------------+
//| Get Open for specified bar index |
//+------------------------------------------------------------------+
double iOpen(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
{
if(symbol==NULL)
symbol=Symbol();
if(timeframe==0)
timeframe=Period();
double Open[];
double open=0;
ArraySetAsSeries(Open,true);
int copied=CopyOpen(symbol,timeframe,index,1,Open);
if(copied>0) open=Open[0];
return(open);
}
//+------------------------------------------------------------------+
//| Get Close for specified bar index |
//+------------------------------------------------------------------+
double iClose(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
{
if(symbol==NULL)
symbol=Symbol();
if(timeframe==0)
timeframe=Period();
double Close[];
double close=0;
ArraySetAsSeries(Close,true);
int copied=CopyClose(symbol,timeframe,index,1,Close);
if(copied>0) close=Close[0];
return(close);
}
//+------------------------------------------------------------------+
И картинка:
...Увидев код... хочется схватиться за голову. Вот столько всего ради того, чтобы решить такой простой вопрос? Владимир, такими темпами Вы точно не популяризируете mql5. Понимаю, собрано из кусочков с намеком на универсальность и подобие mql4, но для новичков - это жесть.
Сейчас последует что-то типа: "Предложите свой вариант..." и Вы будете правы, не предложу (ночь на дворе).
Высказал исключительно свое ИМХО.
...Увидев код... хочется схватиться за голову. Вот столько всего ради того, чтобы решить такой простой вопрос? Владимир, такими темпами Вы точно не популяризируете mql5. Понимаю, собрано из кусочков с намеком на универсальность и подобие mql4, но для новичков - это жесть.
Сейчас последует что-то типа: "Предложите свой вариант..." и Вы будете правы, не предложу (ночь на дворе).
Высказал исключительно свое ИМХО.
Это действительно собрано из готовых кусочков. И, заметьте - это Вам не оголтелый код MQL4 без единой проверки результата - здесь результат проверяется, например здесь:
return(close);
.
И не вижу ничего плохого в наличии готовых кирпичиков, из которых можно построить быстрый пример.
Добавлено: и никакого "подобия mql4" - не нужно выражаться.
Это действительно собрано из готовых кусочков. И, заметьте - это Вам не оголтелый код MQL4 без единой проверки результата - здесь результат проверяется, например здесь:
return(close);
.
И не вижу ничего плохого в наличии готовых кирпичиков, из которых можно построить быстрый пример.
Добавлено: и никакого "подобия mql4" - не нужно выражаться.
Это действительно собрано из готовых кусочков. И, заметьте - это Вам не оголтелый код MQL4 без единой проверки результата - здесь результат проверяется, например здесь:
...И не вижу ничего плохого в наличии готовых кирпичиков, из которых можно построить быстрый пример.
Добавлено: и никакого "подобия mql4" - не нужно выражаться.
С чего вы взяли, что MQL4 "оголтелый" и "матерщинный"?
Это вы так MetaQuotes уважаете?
Так ведь и на mql5 можно написать великую лажу...
Добавлено. Владимир, а что вы скажете о mql5, когда на свет появится mql6 ? Тоже попросите не выражаться и не поминать всуе?
И, да, чтобы популяризировать mql5, не достаточно поливать грязью прошлый язык этой же компании. Нужно грамотно и красиво, не задевая никого, уметь объяснить, показать и рассказать.
Желаю вам успехов в овладении этим мастерством - не каждому может даться такое искусство.
Это действительно собрано из готовых кусочков. И, заметьте - это Вам не оголтелый код MQL4 без единой проверки результата - здесь результат проверяется, например здесь:
return(close);
.
И не вижу ничего плохого в наличии готовых кирпичиков, из которых можно построить быстрый пример.
Добавлено: и никакого "подобия mql4" - не нужно выражаться.
Поясню, что я имел ввиду под "подобие mql4". Это не стиль написания функций, а только лишь названия iOpen() и iClose(). Думаю, совпадение не случайно.
Про наличие кирпичиков я также ничего против не имею. Лишь заметил, что эти кирпичики начинающему будет достаточно сложно понять и можно будет подумать, что язык достаточно сложен. Причем эти кирпичики достаточно специфичны, т.е. на любителя.
И если уж зашел разговор про проверку результата... в случае получения более, чем 1 элемента с такой проверкой могут возникнуть проблемы, т.к. не проверяется точное количество получаемых элементов:
При запросе данных из эксперта или скрипта, будет инициирована загрузка с сервера, если локально этих данных у терминала нет, либо начнется построение нужной таймсерии, если данные можно построить из локальной истории, но они еще не готовы. Функция вернет то количество данных, которые будут готовы к моменту истечения таймаута, но загрузка истории будет продолжаться, и при следующем аналогичном запросе функция вернет уже больше данных.
Добавлено: и никакого "подобия mql4" - не нужно выражаться.
Привет от MQL4
string GreetingsFromMQL4(string symbol_name, ENUM_TIMEFRAMES timeframe, int shift)
{
MqlRates rates[1];
string result="Нифига не вышло :(";
if(CopyRates(symbol_name,timeframe,shift,1,rates)<0) Print(__FUNCTION__," > Шайтанаме! Не скопировались данные, насяльнике!!!");
else result=rates[0].close>rates[0].open?"Бар "+(string)shift+" бычий":rates[0].close<rates[0].open?"Бар "+(string)shift+" медвежий": "Бар "+(string)shift+" додж";
return(result);
}
//+------------------------------------------------------------------+
Подобие mql5 можно?
Привет от MQL4
string GreetingsFromMQL4(string symbol_name, ENUM_TIMEFRAMES timeframe, int shift)
{
MqlRates rates[1];
string result="Нифига не вышло :(";
if(CopyRates(symbol_name,timeframe,shift,1,rates)<0) Print(__FUNCTION__," > Шайтанаме! Не скопировались данные, насяльнике!!!");
else result=rates[0].close>rates[0].open?"Бар "+(string)shift+" бычий":rates[0].close<rates[0].open?"Бар "+(string)shift+" медвежий": "Бар "+(string)shift+" додж";
return(result);
}
//+------------------------------------------------------------------+
Подобие mql5 можно?
Артём, этот код будет работать и в МТ5 с тем-же успехом. Проблема лишь в том что у барабашки не хватит знаний, опыта и способностей это понять.
Фанатеющие люди не замечают хорошего в том, что не является предметом их поклонения
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования