Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 4

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
mila.com
167
mila.com  
Artyom Trishkin:

Чтобы совсем отвязать от индикатора функции получения произвольных фракталов, нужно не передавать в них по ссылке массивы high[] и low[] и значение limit, а получать требуемые значения тоже функциями.

Раз мы делаем код максимально приближенным к MQL5, то от функций High[], Low[], iHigh(), iLow() придётся отказаться, а получать нужные цены своими функциями. Вот так это будет выглядеть в этом же индикаторе:

Правда нужно ещё делать проверки на получение -1 из функций GetPriceHigh() и GetPriceLow()
Спасибо.
Artyom Trishkin
Модератор
119976
Artyom Trishkin  
strongflex:
RSI нужен 15 минутный. Нужно чтобы советник проверял его каждые 20 минут с открытия рынка (9-00, 9-20, 9-40 и т.д.) допустим в 10-20 произошло пересечении снизу  вверх уровня 70 он запоминает цену и в 10-40 проверят если цена ниже чем в 10-20 он открывает шорт. 

Ну сначала нужно сделать получение времени заданное количество минут назад. Вот скрипт проверочный:

//+------------------------------------------------------------------+
//|                                                sTestValueRSI.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input ENUM_TIMEFRAMES   TimeframeRSI   = PERIOD_M15;  // Таймфрейм RSI
input int               MinutesBefore  =20;           // Количество минут назад
int minutesBefore=(MinutesBefore<1?1:MinutesBefore);  // Количество минут назад

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   datetime time_before=TimeCurrent()-minutesBefore*PeriodSeconds(PERIOD_M1);
   int shift=Bars(Symbol(),TimeframeRSI,TimeCurrent(),time_before);
   double value=iRSI(Symbol(),TimeframeRSI,14,PRICE_CLOSE,shift);
   Comment("\nCurrent time: ",TimeToString(TimeCurrent()),
           "\nВремя ",minutesBefore," минут назад: ",TimeToString(time_before),
           "\nБар времени ",TimeToString(time_before)," = ",shift," на таймфрейме ",EnumToString(TimeframeRSI),
           "\nЗначение RSI на баре ",shift," периода ",EnumToString(TimeframeRSI),": ",DoubleToString(value,Digits()));
  }
//+------------------------------------------------------------------+

Время этот скрипт отсчитывает от текущего серверного - лишь тест получения данных RSI заданное количество минут назад.

Artyom Trishkin
Модератор
119976
Artyom Trishkin  

Далее нам нужно узнать текущее время, и кратно ли значение его минут минутам периодичности проверок. Оформил в тестовый советник:

//+------------------------------------------------------------------+
//|                                               exTestValueRSI.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
//--- input parameters
input ENUM_TIMEFRAMES      TimeframeRSI   = PERIOD_M15;  // Таймфрейм RSI
input int                  PeriodRSI      = 14;          // Период расчёта RSI
input ENUM_APPLIED_PRICE   PriceRSI       = PRICE_CLOSE; // Цена расчёта RSI
input int                  MinutesBefore  =20;           // Количество минут назад
//--- global variables
int      minutesBefore; // Количество минут назад
int      periodRSI;     // Период расчёта RSI
double   prevRSIValue;  // Значение RSI xxx минут назад
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   minutesBefore=(MinutesBefore<1?1:MinutesBefore);  // Количество минут назад
   periodRSI=(PeriodRSI<1?1:PeriodRSI);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   MqlDateTime server_time;
   TimeToStruct(TimeCurrent(),server_time);
   if(server_time.min%minutesBefore==0) prevRSIValue=GetLastDataRSI(Symbol(),TimeframeRSI,TimeCurrent(),minutesBefore);
   Comment("\nТекущее время: ",TimeCurrent(),"\nМинуты текущего времени: ",server_time.min,"\nЗначение RSI: ",DoubleToString(prevRSIValue,Digits()));
  }
//+------------------------------------------------------------------+
double GetLastDataRSI(string symbol_name, ENUM_TIMEFRAMES timeframe, datetime start_time, int minutes_before,
                      int period_rsi=14, ENUM_APPLIED_PRICE price_rsi=PRICE_CLOSE)
  {
   datetime time_before=start_time-minutes_before*PeriodSeconds(PERIOD_M1);
   int shift=Bars(symbol_name,timeframe,start_time,time_before);
   return(iRSI(symbol_name,timeframe,period_rsi,price_rsi,shift));
  }
//+------------------------------------------------------------------+

Далее что нужно узнать?

Vladymyr Glushko
27
Vladymyr Glushko  
Доброго времени суток. В трейдинге новичек, поэтому возникает масса вопросов, в том числе и программных, в моем случае это МТ4. Такая штука, возможно ли сделать так, чтобы спред валютной пары к примеру, выводился на окно графика в виде цифры, и таким же образом индикатор ATR? Тобишь, никаких графиков, просто цифры Прим: ATR (14) - 33 Spred - 27 Я думаю, было бы удобно использовать такой вид подачи инфо о состоянии рынка, так удобней, и быстрей считать, оценивать - отталкиваясь от средних значений. Второй момент - это скользящий стоп на основе ATR. Возможно ли его сделать автоматическим? Если сидишь в позе, то благодаря калькулятору и хорошему зрению, просчитать и в ручную выставить стоп - не проблема. А вот сделать этот процесс автоматическим - по моему находка для трейдера, пускай даже с своими минусами, но в хорошем тренде скользящий стоп уменшит риск 'втыка ' или неправильно выставленного стопа новичком. Заранее спасибо.
strongflex
14
strongflex  
Artyom Trishkin:

Далее нам нужно узнать текущее время, и кратно ли значение его минут минутам периодичности проверок. Оформил в тестовый советник:

//+------------------------------------------------------------------+
//|                                               exTestValueRSI.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
//--- input parameters
input ENUM_TIMEFRAMES      TimeframeRSI   = PERIOD_M15;  // Таймфрейм RSI
input int                  PeriodRSI      = 14;          // Период расчёта RSI
input ENUM_APPLIED_PRICE   PriceRSI       = PRICE_CLOSE; // Цена расчёта RSI
input int                  MinutesBefore  =20;           // Количество минут назад
//--- global variables
int      minutesBefore; // Количество минут назад
int      periodRSI;     // Период расчёта RSI
double   prevRSIValue;  // Значение RSI xxx минут назад
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   minutesBefore=(MinutesBefore<1?1:MinutesBefore);  // Количество минут назад
   periodRSI=(PeriodRSI<1?1:PeriodRSI);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   MqlDateTime server_time;
   TimeToStruct(TimeCurrent(),server_time);
   if(server_time.min%minutesBefore==0) prevRSIValue=GetLastDataRSI(Symbol(),TimeframeRSI,TimeCurrent(),minutesBefore);
   Comment("\nТекущее время: ",TimeCurrent(),"\nМинуты текущего времени: ",server_time.min,"\nЗначение RSI: ",DoubleToString(prevRSIValue,Digits()));
  }
//+------------------------------------------------------------------+
double GetLastDataRSI(string symbol_name, ENUM_TIMEFRAMES timeframe, datetime start_time, int minutes_before,
                      int period_rsi=14, ENUM_APPLIED_PRICE price_rsi=PRICE_CLOSE)
  {
   datetime time_before=start_time-minutes_before*PeriodSeconds(PERIOD_M1);
   int shift=Bars(symbol_name,timeframe,start_time,time_before);
   return(iRSI(symbol_name,timeframe,period_rsi,price_rsi,shift));
  }
//+------------------------------------------------------------------+

Далее что нужно узнать?

Далее если произошло пересечение RSI уровня 20 минут назад мы проверяем цену то есть для шорта цена должна быть ниже чем 20 минут назад. Спасибо вам большое. Если все заработает с меня обещанное))
Artyom Trishkin
Модератор
119976
Artyom Trishkin  
Vladymyr Glushko:
Доброго времени суток. В трейдинге новичек, поэтому возникает масса вопросов, в том числе и программных, в моем случае это МТ4. Такая штука, возможно ли сделать так, чтобы спред валютной пары к примеру, выводился на окно графика в виде цифры, и таким же образом индикатор ATR? Тобишь, никаких графиков, просто цифры Прим: ATR (14) - 33 Spred - 27 Я думаю, было бы удобно использовать такой вид подачи инфо о состоянии рынка, так удобней, и быстрей считать, оценивать - отталкиваясь от средних значений. Второй момент - это скользящий стоп на основе ATR. Возможно ли его сделать автоматическим? Если сидишь в позе, то благодаря калькулятору и хорошему зрению, просчитать и в ручную выставить стоп - не проблема. А вот сделать этот процесс автоматическим - по моему находка для трейдера, пускай даже с своими минусами, но в хорошем тренде скользящий стоп уменшит риск 'втыка ' или неправильно выставленного стопа новичком. Заранее спасибо.

Всё делается легко и просто - выводите графические объекты, в частности - текстовые метки с нужными данными на график, и обновляете их на каждом тике.

А уж различных тралов в кодобазе - пруд-пруди - поищите себе нужный ;)

Artyom Trishkin
Модератор
119976
Artyom Trishkin  
strongflex:
Далее если произошло пересечение RSI уровня 20 минут назад мы проверяем цену то есть для шорта цена должна быть ниже чем 20 минут назад. Спасибо вам большое. Если все заработает с меня обещанное))
Мы сможем "сейчас" проверить цену "тогда" лишь только открытия/закрытия/хай/лоу свечи, соответствующей тому времени - нету в МТ4 тиковой истории. Поэтому нужно найти пересечение на минутках для наиболее точного определения цены из имеющихся в наличии возможностей. Но что вы имеете в виду под пересечением RSI ?
strongflex
14
strongflex  

Artyom Trishkin:
Мы сможем "сейчас" проверить цену "тогда" лишь только открытия/закрытия/хай/лоу свечи, соответствующей тому времени - нету в МТ4 тиковой истории. Поэтому нужно найти пересечение на минутках для наиболее точного определения цены из имеющихся в наличии возможностей. Но что вы имеете в виду под пересечением RSI ?

 

Пересечение RSI уровня 70 допустим RSI в 10-00 был ниже 70 в 10-20 выше 70 и в 10-40 проверяем котировки 10-20 должна быть выше чем в 10-40
Vladymyr Glushko
27
Vladymyr Glushko  
Artyom Trishkin:

Всё делается легко и просто - выводите графические объекты, в частности - текстовые метки с нужными данными на график, и обновляете их на каждом тике.

А уж различных тралов в кодобазе - пруд-пруди - поищите себе нужный ;)

Спасибо огромное ......будем искать))

Vladymyr Glushko
27
Vladymyr Glushko  
Artyom Trishkin:

Всё делается легко и просто - выводите графические объекты, в частности - текстовые метки с нужными данными на график, и обновляете их на каждом тике.

А уж различных тралов в кодобазе - пруд-пруди - поищите себе нужный ;)

Только вот как это сделать пошагово?.....графические обьекты (что это и как их ставить) , вывести метки с данными на график (куда вводить и с какими данными )......простите за глупые вопросы. 
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий