Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 316

 
Alexey Viktorov:

Efectivamente, no todos los teclados tienen lo que he escrito... Tal vez deberías cambiar de teclado.



Hay demasiados "expertos" aquí :) Así que pensé en burlarme de ti. En lugar de responder a las preguntas, empiezan a dar lecciones.

 
Luchezar Shalomaev:

Aquí hay demasiados "expertos" :) Así que decidí burlarme de ellos. En lugar de responder a las preguntas, empieza a dar lecciones.

Entonces no esperes respuestas normales de personas que están ocupadas en sus cosas y se distraen de ayudarte, si te pones en situación de burlarte del que te da.

Esto no es un circo.

 
Artyom Trishkin:

Entonces no esperes en el futuro de la gente que está ocupada con sus negocios, y distraída para ayudarte, respuestas normales, si te pones en posición de burlarte del que da.

Esto no es un circo.



Estimado moderador, si esto no es un circo, ¿sería tan amable de llevar a los payasos que han respondido a mis preguntas entre bastidores? Gracias.

 
Luchezar Shalomaev:


Estimado moderador, si esto no es un circo, ¿sería tan amable de llevarse a los payasos que han respondido a mis preguntas entre bastidores? Gracias.

¿Esta es la forma de enviarte entre bastidores?

A ti:

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Cualquier pregunta de los principiantes sobre MQL4, ayuda y discusión sobre algoritmos y códigos

Luchezar Shalomaev, 2017.09.20 22:25

Hola. Descargado el archivo de cotización EUR USD 1 minuto de Ducascopy, tratando de importar en MT4 Alpari, no pasa nada. Sólo una ventana de conversión en blanco. Lo mismo en Instaforex. ¿Qué puede ser?

Respuesta:

A ti:

Respuesta:

A ti:

Respuesta:

A ti:

A ti:

A ti:

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Cualquier pregunta que los novatos tengan sobre MQL4, ayuda y discusión sobre algoritmos y códigos

Luchezar Shalomaev, 2017.09.21 21:10


Aquí hay demasiados "expertos" :) Así que decidió burlarse de ellos. En lugar de responder a tus preguntas, empiezan a dar lecciones.


Su pregunta ha sido respondida: pulse F2, lo que hace que aparezca la ventana de descarga de presupuestos.

Pero tú empezaste a bromear y obtuviste la respuesta de las bromas.

¿Qué querías? Con lo que viniste, como se dice...

 
Artyom Trishkin:

¿Debo enviarte a los bastidores?

A ti:

Respuesta:

A ti:

Respuesta:

A ti:

Respuesta:

A ti:

A ti:

A ti:


Se ha respondido a su pregunta: pulse F2, lo que hace que aparezca la ventana de descarga de presupuestos.

Pero empezaste a bromear, a lo que recibiste una bromita como respuesta.

¿Qué quieres? Con lo que viniste, como se dice...













Bueno, dices que no es un circo.

 
Aleksey Vyazmikin:
La forma más fácil de escribir la lógica es hacerla más clara - no entiendo cuál es la lógica... ¿puede describirlo con palabras?

Encontré un fallo en la lógica. Lo he arreglado y funciona.

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);
}
El error estaba en la descripción matemática del patrón Doji.
 

Ahora la tarea es la siguiente. Necesitamos dibujar un rectángulo en lugar de una flecha, que será trazado por el máximo y el mínimo del Doji y por el tiempo de apertura del Doji y el tiempo de apertura de una nueva barra después del Doji. Y todo esto en un gráfico de 4 horas. Al mismo tiempo necesito estar en un gráfico de 5 minutos. ¿Qué puede aconsejar? ¿Cómo aplicarlo?

No sé cómo hacerlo. Gracias.

 
voron_026:

Encontré un fallo en la lógica. Lo he arreglado y ya funciona.

El error estaba en la descripción matemática del patrón Doji.

Bien por ti. ¿Has programado antes? Su estilo no es típico.

voron_026:

Ahora la tarea es la siguiente. En lugar de flechas, tenemos que dibujar un rectángulo, que será dibujado por el máximo y el mínimo del Doji y por el tiempo de apertura del Doji y el tiempo de apertura de una nueva barra después del Doji. Y todo esto en un gráfico de 4 horas. Al mismo tiempo necesito estar en un gráfico de 5 minutos. ¿Qué puede aconsejar? ¿Cómo aplicarlo?

Gracias.


Hacer la declaración de las variables comunes (globales) que se calcularán en la función y el retorno de la misma void(){} . ¿Puede definir el tiempo... De todos modos, aún no he entendido la pregunta exacta.

Por cierto, antes no conocía el enfoque de la variable global y devolvía todos los valores de la función a través de la variable de cadena...

 
voron_026:

Ahora la tarea es la siguiente. Necesitamos dibujar un rectángulo en lugar de una flecha, que será trazado por el máximo y el mínimo del Doji y por el tiempo de apertura del Doji y el tiempo de apertura de una nueva barra después del Doji. Y todo esto en un gráfico de 4 horas. Al mismo tiempo necesito estar en un gráfico de 5 minutos. ¿Qué puede aconsejar? ¿Cómo aplicarlo?

Gracias.

Tienes que usar OBJ_RECTANGLE. Sabes cómo obtener los datos de precio y tiempo del gráfico H4.

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

Bien por ti. ¿Has programado antes? Su estilo no es típico.


Hacer la declaración de las variables generales (globales) que serán calculadas en la función y devueltas por ella void(){} . ¿Puedes determinar el tiempo... De todos modos, no entiendo cuál es exactamente la pregunta.

Por cierto, antes no conocía el enfoque de la variable global y devolvía todos los valores de la función a través de la variable de cadena...


HolaAleksey Vyazmikin Estoy programando no hace mucho tiempo. Poco a poco me voy adentrando en el tema.

Lo he probado de esta manera:

//+------------------------------------------------------------------+
//|                                                          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;                             // Поймался новый бар 
     } 
  }  

Se dibuja el primer rectángulo, el resto no se dibuja. Todavía estoy tratando de averiguar cómo hacerlo. Gracias por los consejos y ¿a qué te refieres con un estilo no típico?