Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 4
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Чтобы совсем отвязать от индикатора функции получения произвольных фракталов, нужно не передавать в них по ссылке массивы high[] и low[] и значение limit, а получать требуемые значения тоже функциями.
Раз мы делаем код максимально приближенным к MQL5, то от функций High[], Low[], iHigh(), iLow() придётся отказаться, а получать нужные цены своими функциями. Вот так это будет выглядеть в этом же индикаторе:
Правда нужно ещё делать проверки на получение -1 из функций GetPriceHigh() и GetPriceLow()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 заданное количество минут назад.
Далее нам нужно узнать текущее время, и кратно ли значение его минут минутам периодичности проверок. Оформил в тестовый советник:
//| 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));
}
//+------------------------------------------------------------------+
Далее что нужно узнать?
Далее нам нужно узнать текущее время, и кратно ли значение его минут минутам периодичности проверок. Оформил в тестовый советник:
//| 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));
}
//+------------------------------------------------------------------+
Далее что нужно узнать?
Доброго времени суток. В трейдинге новичек, поэтому возникает масса вопросов, в том числе и программных, в моем случае это МТ4. Такая штука, возможно ли сделать так, чтобы спред валютной пары к примеру, выводился на окно графика в виде цифры, и таким же образом индикатор ATR? Тобишь, никаких графиков, просто цифры Прим: ATR (14) - 33 Spred - 27 Я думаю, было бы удобно использовать такой вид подачи инфо о состоянии рынка, так удобней, и быстрей считать, оценивать - отталкиваясь от средних значений. Второй момент - это скользящий стоп на основе ATR. Возможно ли его сделать автоматическим? Если сидишь в позе, то благодаря калькулятору и хорошему зрению, просчитать и в ручную выставить стоп - не проблема. А вот сделать этот процесс автоматическим - по моему находка для трейдера, пускай даже с своими минусами, но в хорошем тренде скользящий стоп уменшит риск 'втыка ' или неправильно выставленного стопа новичком. Заранее спасибо.
Всё делается легко и просто - выводите графические объекты, в частности - текстовые метки с нужными данными на график, и обновляете их на каждом тике.
А уж различных тралов в кодобазе - пруд-пруди - поищите себе нужный ;)
Далее если произошло пересечение RSI уровня 20 минут назад мы проверяем цену то есть для шорта цена должна быть ниже чем 20 минут назад. Спасибо вам большое. Если все заработает с меня обещанное))
Artyom Trishkin:
Мы сможем "сейчас" проверить цену "тогда" лишь только открытия/закрытия/хай/лоу свечи, соответствующей тому времени - нету в МТ4 тиковой истории. Поэтому нужно найти пересечение на минутках для наиболее точного определения цены из имеющихся в наличии возможностей. Но что вы имеете в виду под пересечением RSI ?
Всё делается легко и просто - выводите графические объекты, в частности - текстовые метки с нужными данными на график, и обновляете их на каждом тике.
А уж различных тралов в кодобазе - пруд-пруди - поищите себе нужный ;)
Спасибо огромное ......будем искать))
Всё делается легко и просто - выводите графические объекты, в частности - текстовые метки с нужными данными на график, и обновляете их на каждом тике.
А уж различных тралов в кодобазе - пруд-пруди - поищите себе нужный ;)