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

 
Alexey Viktorov:

Действительно не на всех клавиатурах есть то о чём я писал... Может клавиатуру поменять?



Тут слишком много "знатоков" :) Вот и решил постебаться. Вместо ответов на вопросы, начинают поучать.

 
Luchezar Shalomaev:

Тут слишком много "знатоков" :) Вот и решил постебаться. Вместо ответов на вопросы, начинают поучать.

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

Здесь не цирк.

 
Artyom Trishkin:

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

Здесь не цирк.



Уважаемый модератор, если здесь не цирк, будьте любезны, клоунов ответивших на мои вопросы уведите за кулисы. Спасибо.

 
Luchezar Shalomaev:


Уважаемый модератор, если здесь не цирк, будьте любезны, клоунов ответивших на мои вопросы уведите за кулисы. Спасибо.

Так вас за кулисы отправить?

Вы:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

Luchezar Shalomaev, 2017.09.20 22:25

Здравствуйте. Скачал с Ducascopy файл с котировками EUR USD 1 минута, пытаюсь импортировать в МТ4 Альпари, ничего не происходит. Просто пустое окно конвертации. Так же на Instaforex. В чем может быть дело?

Ответ:

Вы:

Ответ:

Вы:

Ответ:

Вы:

Вам:

Вы:

Вам на ваш вопрос ответили - нажмите F2, что приводит к открытию окна загрузки котировок.

Но вы начали стебаться, на что и получили стёб над вами в ответ.

А чего хотели? С чем пришли как говорится...

 
Artyom Trishkin:

Так вас за кулисы отправить?

Вы:

Ответ:

Вы:

Ответ:

Вы:

Ответ:

Вы:

Вам:

Вы:


Вам на ваш вопрос ответили - нажмите F2, что приводит к открытию окна загрузки котировок.

Но вы начали стебаться, на что и получили стёб над вами в ответ.

А чего хотели? С чем пришли как говорится...













Ну вот, а вы говорите не цирк. 

 
Aleksey Vyazmikin:
Самый простой вариант написать логику попонятней - я с ходу не понимаю, что там за логика... можете описать словами?

Нашел ошибку в логике. Исправил и все заработало

int Doji()
{

//Параметры Дожи
   double Open1 = NormalizeDouble (iOpen(Symbol(), PERIOD_H4,1),Digits);
   double Close1 = NormalizeDouble (iClose(Symbol(), PERIOD_H4,1),Digits);
   double High1 = NormalizeDouble (iHigh(Symbol(), PERIOD_H4,1),Digits);
   double Low1 = NormalizeDouble (iLow(Symbol(), PERIOD_H4,1),Digits);
   
//Параметры предыдущей свечи
   double Open2 = NormalizeDouble (iOpen(Symbol(), PERIOD_H4,2),Digits);
   double Close2 = NormalizeDouble (iClose(Symbol(), PERIOD_H4,2),Digits);
   double High2 = NormalizeDouble (iHigh(Symbol(), PERIOD_H4,2),Digits);
   double Low2 = NormalizeDouble (iLow(Symbol(), PERIOD_H4,2),Digits);
   
//Параметры индикатора волотильности ATR для нахожденя относительно большой свечи перед Доджи
   double ATR = iATR(Symbol(),PERIOD_H4,21,1);
   
   
//Математическое описание патерна Дожи
   if(Close1 < High1 -0.3*(High1-Low1) && 
      Open1 < High1 -0.3*(High1-Low1) && 
      Close1 > High1 -0.7*(High1-Low1) && 
      Open1 > High1 -0.7*(High1-Low1) && 
      MathAbs(Close1-Open1) < 0.2*(High1-Low1)&&
      MathAbs(Close2-Open2) > 0.7*ATR)
      {
         if((Close2 - Open2) > 0 && New_Bar == true)
         { 
            Print ("Down"); return(-1);// Условие для продаж
         }
         if((Close2 - Open2) < 0 && New_Bar == true)
         {
            Print ("Up"); return(1);// Условие для покупок
         }
      }
      return(0);
}
Ошибка была в математическом описании паттерна Доджи.
 

Теперь задача следующая. Нужно вместо стрелки нарисовать прямоугольник, который будет строиться по max и min Доджи и по времени открытия Доджи и времени открытия нового бара после Доджи. И это все на 4-х часовом графике. При этом я должен находиться на 5-и минутках. Что можете посоветовать? Как реализовать?

Спасибо.

 
voron_026:

Нашел ошибку в логике. Исправил и все заработало

Ошибка была в математическом описании паттерна Доджи.

Рад за Вас. Вы ранее программировали? Уж очень стиль у Вас не типичный.

voron_026:

Теперь задача следующая. Нужно вместо стрелки нарисовать прямоугольник, который будет строиться по max и min Доджи и по времени открытия Доджи и времени открытия нового бара после Доджи. И это все на 4-х часовом графике. При этом я должен находиться на 5-и минутках. Что можете посоветовать? Как реализовать?

Спасибо.


Делайте объявление общих (глобальных) переменных, которые будут рассчитываться в функции и возвращаться из нее void(){} . Время определять умеете... в общем пока не понял, в чём конкретно вопрос.

Кстати, я раньше не знал про подход с глобальными переменными и возвращал все значения из функции через строковую переменную...

 
voron_026:

Теперь задача следующая. Нужно вместо стрелки нарисовать прямоугольник, который будет строиться по max и min Доджи и по времени открытия Доджи и времени открытия нового бара после Доджи. И это все на 4-х часовом графике. При этом я должен находиться на 5-и минутках. Что можете посоветовать? Как реализовать?

Спасибо.

Вам нужно использовать OBJ_RECTANGLE, данные цен и времени с графика Н4 получать умеете, осталось их только подставить в функцию

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Aleksey Vyazmikin:

Рад за Вас. Вы ранее программировали? Уж очень стиль у Вас не типичный.


Делайте объявление общих (глобальных) переменных, которые будут рассчитываться в функции и возвращаться из нее void(){} . Время определять умеете... в общем пока не понял, в чём конкретно вопрос.

Кстати, я раньше не знал про подход с глобальными переменными и возвращал все значения из функции через строковую переменную...


Доброго времени суток Aleksey Vyazmikin  Я недавно занялся программированием. Потихоньку въезжаю в тему.

Попробовал таким образом сделать:

//+------------------------------------------------------------------+
//|                                                          111.mq4 |
//|                                       Copyright 2017,UriyGlushko |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017,UriyGlushko"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern string Rodot           = "Параметры робота";
extern double Lots            = 0.2;
extern int    StopLoss        = 20;
extern int    TakeProfit      = 80;
extern int    Magic           = 999999;
extern int    Slippage        = 3; // Проскальзывание

extern bool UseDojiCandles = true; // Использование патерна Доджи
int DojiCandle = 0;
bool New_Bar = false;

datetime time0 = iTime(Symbol(),PERIOD_H4,0);
datetime time1 = iTime(Symbol(),PERIOD_H4,1);
double open0 = iOpen(Symbol(), PERIOD_H4,0);
double open1 = iOpen(Symbol(), PERIOD_H4,1);
double close1 = iClose(Symbol(), PERIOD_H4,1);
double high1 = iHigh(Symbol(), PERIOD_H4,1);
double low1 = iLow(Symbol(), PERIOD_H4,1);
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  if (Digits == 3 || Digits ==5 )
  {
   TakeProfit *= 10;
   StopLoss   *= 10;
   Slippage   *= 10;
  }
 return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  
   
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
Fun_New_Bar();

   if(UseDojiCandles = true && Doji() == 1 && New_Bar == true)
     {
      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вверх");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         
         DojiCandle ++;
     }
   

   
   if(UseDojiCandles = true && Doji() == -1 && New_Bar == true)
     {
      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вниз");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 

         DojiCandle ++;
     }
     

   
}
//+------------------------------------------------------------------+
//    Поиск всех объектов
//+------------------------------------------------------------------+


 




//+------------------------------------------------------------------+
//    Функция паттерна Доджи
//+------------------------------------------------------------------+
int Doji()
{

//Параметры Дожи
   double Open1 = NormalizeDouble (iOpen(Symbol(), PERIOD_H4,1),Digits);
   double Close1 = NormalizeDouble (iClose(Symbol(), PERIOD_H4,1),Digits);
   double High1 = NormalizeDouble (iHigh(Symbol(), PERIOD_H4,1),Digits);
   double Low1 = NormalizeDouble (iLow(Symbol(), PERIOD_H4,1),Digits);
   
//Параметры предыдущей свечи
   double Open2 = NormalizeDouble (iOpen(Symbol(), PERIOD_H4,2),Digits);
   double Close2 = NormalizeDouble (iClose(Symbol(), PERIOD_H4,2),Digits);
   double High2 = NormalizeDouble (iHigh(Symbol(), PERIOD_H4,2),Digits);
   double Low2 = NormalizeDouble (iLow(Symbol(), PERIOD_H4,2),Digits);
   
//Параметры индикатора волотильности ATR для нахожденя относительно большой свечи перед Доджи
   double ATR = iATR(Symbol(),PERIOD_H4,21,1);
   
   
//Математическое описание патерна Дожи
   if(Close1 < High1 -0.3*(High1-Low1) && 
      Open1 < High1 -0.3*(High1-Low1) && 
      Close1 > High1 -0.7*(High1-Low1) && 
      Open1 > High1 -0.7*(High1-Low1) && 
      MathAbs(Close1-Open1) < 0.2*(High1-Low1)&&
      MathAbs(Close2-Open2) > 0.7*ATR)
      {
         if((Close2 - Open2) > 0 && New_Bar == true)
         { 
            Print ("Down"); return(-1);// Условие для продаж
         }
         if((Close2 - Open2) < 0 && New_Bar == true)
         {
            Print ("Up"); return(1);// Условие для покупок
         }
      }
      return(0);
}
//+------------------------------------------------------------------+
//    Функция определения нового бара
//+------------------------------------------------------------------+
void Fun_New_Bar()                              // Ф-ия обнаружения нового бара 
  {                                             
  datetime TimeBar0 = iTime(Symbol(),PERIOD_H4,0);
   static datetime New_Time=0;                  // Время текущего бара 
   New_Bar=false;                               // Нового бара нет 
   if(New_Time != TimeBar0)                        // Сравниваем время 
     { 
      New_Time = TimeBar0;                         // Теперь время такое 
      New_Bar = true;                             // Поймался новый бар 
     } 
  }  

Рисуется первый прямоугольник. остальные не рисуются. Пока думаю как сделать. Благодарю вас за подсказки и что вы имеете ввиду под не типичным стилем?

Причина обращения: