Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 755

 

Добрый день!

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

Например, CCI min=-300 max=300 и RSI min=0 max=100.

Возможно ли в советнике реализовать функцию пересечения 2-х индикаторов. Допустим ССI пересекает RSI снизу-вверх => открывается ордер Bay...

Это возможно?

Или нельзя, т.к. у этих индикаторов разный диапазон значений.  У rsi диапазон значений ограничен от 0 до 100, а у cci значения могут быть как положительные, так и отрицательные и не ограничиваются макс./мин. значением...

 
lomaxx7:

Добрый день!

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

Например, CCI min=-300 max=300 и RSI min=0 max=100.

Возможно ли в советнике реализовать функцию пересечения 2-х индикаторов. Допустим ССI пересекает RSI снизу-вверх => открывается ордер Bay...

Это возможно?

Или нельзя, т.к. у этих индикаторов разный диапазон значений.  У rsi диапазон значений ограничен от 0 до 100, а у cci значения могут быть как положительные, так и отрицательные и не ограничиваются макс./мин. значением...

Если написать свой iRSI именно для этой цели, то можно из значения iRSI вычесть 50 и получится индикатор с нулевым уровнем. Остаётся один вопрос: а какой прок от такого смешения индикаторов?

 
Alexey Viktorov:

Если написать свой iRSI именно для этой цели, то можно из значения iRSI вычесть 50 и получится индикатор с нулевым уровнем. Остаётся один вопрос: а какой прок от такого смешения индикаторов?

Спасибо. Есть некоторые идеи, которые нужно отработать.
 

lomaxx7:

Возможно ли в советнике реализовать функцию пересечения 2-х индикаторов. Допустим ССI пересекает RSI снизу-вверх => открывается ордер Bay...

Это возможно?

Или нельзя, т.к. у этих индикаторов разный диапазон значений.  У rsi диапазон значений ограничен от 0 до 100, а у cci значения могут быть как положительные, так и отрицательные и не ограничиваются макс./мин. значением...

Не сложно. Можно CCI через RSI обсчитывать и наоборот.  Смотрите в документацию. Там для каждого индикатора дано разъяснение, какие цены можно использовать.

https://www.mql5.com/ru/docs/indicators/irsi

applied_price

[in]  Используемая цена. Может быть любой из ценовых констант ENUM_APPLIED_PRICE или хендлом другого индикатора.

Например, подставляем хендл CCI в RSI:

int OnInit()
h_cci=iCCI(_Symbol, _Period, cci_ma_period, cci_applied_price);
h_rsi=iRSI(_Symbol, _Period, rsi _ma_period, h_cci);
Далее
void OnTick() 
if(CopyBuffer(h_cci,0,0,to_copy, cci_buf)<=0) return(0);
if(CopyBuffer(h_rsi,0,0,to_copy, rsi _buf)<=0) return(0);
Далее сравниваете значения:
if(cci_buf>rsi_buf) {...ваши действия; ...buy; ...sell;} 
else
if(cci_buf<rsi_buf) {...ваши действия; ...buy; ...sell;}

Диапазон значений в данном случае особой роли не играет т.к. последующий осциллятор уже пользуется значениями предыдущего осциллятора.

Документация по MQL5: Технические индикаторы / iRSI
Документация по MQL5: Технические индикаторы / iRSI
  • www.mql5.com
Технические индикаторы / iRSI - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
 //+------------------------------------------------------------------+
class A
  {
public: int       propA;
public:
                     A(void) {propA = 15;};
                    ~A(void) {};
  };
//+------------------------------------------------------------------+
class B: public A
  {
public:
                     B(void){};
                    ~B(void){};
  };
//+------------------------------------------------------------------+
void OnStart()
  {
   B newObj;
   GetA(newObj);
//---
   //B newObjArray[3];
   //GetA_Array(newObjArray);
  }
//+------------------------------------------------------------------+
void GetA(A &obj)
  {
   Print(obj.propA);
  }
//+------------------------------------------------------------------+
void GetA_Array(A &obj[])
  {
   for(int i=0;i<ArraySize(obj);i++)
      Print(obj[i].propA);
  }
//+------------------------------------------------------------------+

Если раскомментировать оставшиеся строки в OnStart() получим "newObjArray - parameter conversion not allowed".

2 вопроса: почему, и как исправить?
 

Подскажите, пожалуйста, как получить отчет по позициям из терминала?

Дело в том, что в терминале я вижу нормальную позицию, а в отчете в экселе она разбита на части, что не удобно для меня.

 

Здравствуйте! 2017.06.30_18:11 GMT+3. Знатоки форума. Я проверял свой советник в МТ5 в тестере стратегий. Он открывает и закрывает сделки, но, похоже, только по первому условию для открытия и закрытия сделок. Поэтому я решил проверить советник на демо счёте. Но на демо советник сразу исчезает с графика. Оказывается на демо счёте у него обнаруживается ошибка: 2017.06.30 18:08:17.878 Late_raw3 (GOLD,M1) array out of range in 'Cross.mqh' (18,12).
Странно, а в тестере стратегий такой ошибки не найдено. Я силился понять в чём ошибка, но так и не понял. Вопрос -- тупее некуда. Он меня поставил в тупик. А могли программисты MetaQuotes в этом случае намудрить? А в стандартном советнике Moving Average.mq5 код написан так же (я оттуда переписал). У него этой ошибки на демо счёте нет. Хотя он и не торговал. На М1. Хотя я долго и не ждал. В чём дело? Буду ждать Ваших ответов. С нетерпением. Прилагаю файлы, хотя и не досконально все. 18:26 GMT+3. Я пробовал по-разному менять код, но результата два: или выход за пределы массива, или пишет ошибку "Нет данных индикатора". А в журнале тестера стратегий видно как получаются "переквоты". Берётся цена открытия первой сделки. Она отличается от цены открытия второй сделки. Это "отклонение" (оно больше моего 130 пунктов) и называют переквотой. Это тоже нужно сказать "спасибо" программистам MetaQuotes ? Вам будет нескучно. За что ни возьмёшься, -- везде "тормоза". Это я собираюсь быстрее дописать советник. 18:45 GMT+3. Если что нужно уточнить или пояснить, -- пишите. Всё. 18:51 GMT+3.   
 

 
Николай Никитюк:

Здравствуйте! 2017.06.30_18:11 GMT+3. Знатоки форума. Я проверял свой советник в МТ5 в тестере стратегий. Он открывает и закрывает сделки, но, похоже, только по первому условию для открытия и закрытия сделок. Поэтому я решил проверить советник на демо счёте. Но на демо советник сразу исчезает с графика. Оказывается на демо счёте у него обнаруживается ошибка: 2017.06.30 18:08:17.878 Late_raw3 (GOLD,M1) array out of range in 'Cross.mqh' (18,12).
Странно, а в тестере стратегий такой ошибки не найдено. Я силился понять в чём ошибка, но так и не понял. Вопрос -- тупее некуда. Он меня поставил в тупик. А могли программисты MetaQuotes в этом случае намудрить? А в стандартном советнике Moving Average.mq5 код написан так же (я оттуда переписал). У него этой ошибки на демо счёте нет. Хотя он и не торговал. На М1. Хотя я долго и не ждал. В чём дело? Буду ждать Ваших ответов. С нетерпением. Прилагаю файлы, хотя и не досконально все. 18:26 GMT+3. Я пробовал по-разному менять код, но результата два: или выход за пределы массива, или пишет ошибку "Нет данных индикатора". А в журнале тестера стратегий видно как получаются "переквоты". Берётся цена открытия первой сделки. Она отличается от цены открытия второй сделки. Это "отклонение" (оно больше моего 130 пунктов) и называют переквотой. Это тоже нужно сказать "спасибо" программистам MetaQuotes ? Вам будет нескучно. За что ни возьмёшься, -- везде "тормоза". Это я собираюсь быстрее дописать советник. 18:45 GMT+3. Если что нужно уточнить или пояснить, -- пишите. Всё. 18:51 GMT+3.   
 


Пока вроде получается, что "rates" (файл "Cross.mqh", строка 18, положение курсора 12) объявлен где-то на глобальном уровне - значит все вопросы сводятся: "А как собственно заполняется этот "rates"?".

 

Пытаюсь расчитать угол пересечения двух кривых. Задача даже не сам угол найти, а проверить является ли он острым или тупым. Нарисовал вот даже. Я могу найти тангенс B и тангенс C. Как мне зная эти тангенсы, определить является ли угол А острым. Помогите, совсем не силен в тригонометрии. Разумеется, без нахождения самих углов - из-за разницы шкал их значения неадекватны.


 
igorbel:

Пытаюсь расчитать угол пересечения двух кривых. Задача даже не сам угол найти, а проверить является ли он острым или тупым. Нарисовал вот даже. Я могу найти тангенс B и тангенс C. Как мне зная эти тангенсы, определить является ли угол А острым. Помогите, совсем не силен в тригонометрии. Разумеется, без нахождения самих углов - из-за разницы шкал их значения неадекватны.


Чтобы находить тангенсы у Вас, разве, прямоугольный треугольник?
Причина обращения: