Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1267

 
Vladimir Karputov:

Un indicador para esto debe tener un parámetro de color de entrada. Es decir, debe ser un indicador personalizado.

GRACIAS! pero si no tengo acceso al código fuente, no es factible?

 
Tango_X:

¿pero si no tengo acceso al código fuente, no se puede implementar?

Sí, hay que tener un código abierto o una implementación ya hecha.

 
Vladimir Karputov:

Sí, es necesario tener un código abierto o una implementación ya hecha.

Cuando pongo el color clrNONE en el probador, ¡el color sigue apareciendo! ¿Entonces clrNONE no funciona en el probador? No puedo comprobarlo en la vida real, es fin de semana...

Si pongo cualquier color en lugar de clrNONE, este color se muestra, pero el valor vacío = no funciona... extraño...
 
Aleksey Mavrin:

Respuesta: también recargar repetidamente la macro)

Pero es mejor usar el operador + para cadenas y convertir todo en cadenas, entonces no necesitas una versión de función (y macro) con muchos parámetros

Gracias. No sabía que la macro puede ser recargada.

 
pivomoe:

Gracias. No sabía que la macro se podía recargar.

error tipográfico - reload, no reload)

 

ordenó los ejemplos al final de esta sección de ayudahttps://www.mql5.com/ru/docs/constants/structures/mqltraderequest

en el servidor Metacquot, todo está bien

en otro servidor, después de analizar los códigos de error de la solicitud de comercio, descubrí que el problema está en el llenado del campo MqlTradeResult :

request.type_filling = ORDER_FILLING_IOC;

en una búsqueda en el foro no se encontró una solución inequívoca: cómo determinar la configuración del servidor para el campo MqlTradeResult mediante programación

ENUM_ORDER_TYPE_FILLING       type_filling;     // Тип ордера по исполнению 


UPD: encontrado una solución que funcionahttps://www.mql5.com/ru/forum/168912/page2#comment_4062864

¡@fxsaber gracias!

 
¿Podría decirme cómo establecer los niveles de Fibo para la autoconstrucción?
 
VVT:
Por favor, dígame cómo establecer los niveles de Fibo para la autoconstrucción

Ejemplo en el códigoFibonaci RR-

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long chart_id=ChartID();
   datetime time1=ChartTimeOnDropped();
   double price1=ChartPriceOnDropped();
   if(ObjectFind(chart_id,InpFiboName)<0)
      FiboLevelsCreate(chart_id,InpFiboName,0,time1,price1,time1+InpAddSecond,price1-InpStopLoss*Point(),InpColor);
   else
     {
      ObjectDelete(chart_id,InpFiboName);
      ChartRedraw(chart_id);
      FiboLevelsCreate(chart_id,InpFiboName,0,time1,price1,time1+InpAddSecond,price1-InpStopLoss*Point(),InpLevelsColor);
     }
//---
   int               levels   = 6;                                                                    // number of level lines
   double            values[6]= {1.0,0.0,2.0,3.0,4.0,5.0};                                            // values of level lines
   color             colors[6];                                                                       // color of level lines
   for(int i=0; i<6; i++)
      colors[i]=InpLevelsColor;
   ENUM_LINE_STYLE   styles[6];                                                                       // style of level lines
   for(int i=0; i<6; i++)
      styles[i]=InpLevelsStyles;
   int               widths[6]= {2.0,2.0,2.0,2.0,2.0,2.0};                                            // width of level lines
   string            texts[6] = {"BREAK EVEN","STOP LOSS","TP1 1.1","TP2 2.1","TP3 3.1","TP4 4.1"};   // text of level lines
//---
   FiboLevelsSet(levels,values,colors,styles,widths,texts,chart_id,InpFiboName);
  }


se puede establecer para los niveles: número de líneas, valor de la línea, color de la línea, estilo de la línea, ancho de la línea, texto de la línea.

 
int OnInit()
  {
//---
   ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  }
//+------------------------------------------------------------------+

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
  {
   if(id == CHARTEVENT_OBJECT_CREATE)
     {
      I++;
      string result[];      //  массив для получения строк
      StringSplit(sparam, ' ', result); //  получим из имени созданного объекта подстроки
      ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
      string newName = result[0]+" "+result[1]+" "+string(I); //  сформируем новое имя объекта
      ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект

      //----------------------------------------------------------------------------------------
      double   Level_0= ObjectGetDouble(
                                0,          // идентификатор графика
                                newName,              // имя объекта
                                OBJPROP_PRICE,           // идентификатор свойства
                                0     // модификатор свойства
                             );


      double   Level_1= ObjectGetDouble(
                                0,          // идентификатор графика
                                newName,              // имя объекта
                                OBJPROP_PRICE,           // идентификатор свойства
                                1     // модификатор свойства
                             );
      //------------------------------------------------------------------------------------------------------
      if(Level_0 > Level_1)
        {
         ObjectSetInteger(0,newName,OBJPROP_COLOR,clrDeepSkyBlue);
        }
      else
        {
         ObjectSetInteger(0,newName,OBJPROP_COLOR,clrYellow);
        }
     }/******************************************************************/
  }

Hola, podrías decirme por qué al depurar el código, yendo paso a paso las líneas se recolorean en ambos colores dependiendo de los valores de las coordenadas. Y lanzando el EA en el gráfico, la condición de las líneas if(Level_0 > Level_1) nunca es verdadera ?
 
Kira27:

Hola, podrías decirme por qué en la depuración, al pasar el código paso a paso, las líneas se repintan en ambos colores dependiendo de los valores de las coordenadas. Y lanzando EA en un gráfico, la condición de línea if(Level_0 > Level_1) nunca es verdadera ?

Es muy probable que después de renombrar un objeto, éste no esté disponible para ser accedido. Puedes probar a poner ChartRedraw después de cambiar el nombre. Si no funciona, hay que construir la secuencia de otra manera.

ps; Otra opción: primero repintar con el nombre de sparam y luego renombrarlo.