[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 34

 

¡Hola!

¿Podría decirme si una línea de tendencia se dibuja programáticamente en un gráfico, es posible leer su valor en el punto deseado (de nuevo, programáticamente)?

 
demlin:

¡Hola!

Me puedes decir por favor si hay una línea de tendencia dibujada en el gráfico de forma programada, es posible leer su valor en el punto deseado (de nuevo, de forma programada).

Hace tiempo escribí un artículo en el que se utilizaba la línea de tendencia para encontrar el punto correcto en el gráfico. Echa un vistazo, quizás encuentres algo para ti... :)
 
demlin:

¡Hola!

¿Podría decirme si una línea de tendencia se dibuja programáticamente en un gráfico, es posible leer su valor en el punto deseado (de nuevo, programáticamente)?


Parece que es imposible, pero si realmente quiero, supongo que puedo...:-Р
 
Roman.:

No parece que puedan, pero si realmente quieres, puedes...:-Р

Me gustaría mucho :)

Quería hacer un indicador, pero como es la primera vez que trato con indicadores, me he perdido. Las líneas se dibujan como deberían, pero no encuentro la forma de meter el array con valores. Al final, no he conseguido nada.

 
artmedia70:
Una vez escribí un artículo en el que utilizaba la línea de tendencia para encontrar el punto correcto en el gráfico. Echa un vistazo, quizás encuentres algo para ti... :)
Gracias, tengo la función de línea recta allí, voy a torcer un poco
 

Con MoveFileA todo fue bien. ¡Muchas gracias, TheXpert!

 
demlin:

Me gustaría mucho :)

Quería hacer un indicador, pero como es la primera vez que trato con indicadores, me he perdido. Las líneas se dibujan como deberían, pero no encuentro la forma de meter el array con valores. Como resultado, no lo he exprimido en absoluto.

Pero si hubieras mostrado el código y me hubieras dicho lo que quieres, podrías haber prescindido de la ecuación de la línea recta... Es un indicador y todos los datos necesarios están en sus buffers... Aunque... :)
 
Creo que tengo una idea... Si tiene una línea de tendencia construida, entonces, utilizando la función de ecuación de la línea recta, ejecute en el bucle desde el valor de su punto de inicio hasta el valor de su punto final y en cada barra introduzca los valores devueltos por la función de ecuación de la línea recta en otra matriz de indicadores creada para este propósito. A continuación, utilizando el número de la barra necesaria, tome estos valores de la matriz. Es algo así...
 
artmedia70:
Si me mostraras el código y me dijeras lo que quieres, probablemente no necesitarías la ecuación de la línea recta... Es un indicador y todos los datos necesarios están en sus buffers ... Aunque... :)

Aquí está el código, copiado del tutorial del mismo sitio :)

#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window

extern int History=21;        // Колич.баров в расчётной истории
extern int M= 3;           // начальный бар с которого начинаем поиск фракталов в цикле.
int    i,k;                // номера баров в циклах.
int    Vnf3,Vnf2,Vnf1;     // номера реперных фракталов (1-ый справа на графике на нисходящем тренде).
int    VnfL3,VnfL2,VnfL1;  // номера реперных фракталов (1-ый справа на графике на восходящем тренде).
int    VFN,VFNL;           // счетчик найденных фракталов.
int    Md,MdL;             // счетчики кол-ва модификаций

double VMF1,VMF2;     // промежуточные значения верхних фракталов на нисходящем тренде.
double VMFL1,VMFL2;  // промежуточные значения нижних фракталов на восходящем тренде.
double VlFl_L;             // Min значение ближайшего нижнего фрактала на тренде вниз
double VlFl_H;             // Max значение ближайшего верхнего фрактала на тренде вверх
datetime tim1_L;           // Время ближайшего нижнего фрактала после нисходящего тренда 
datetime timL1_H;          // Время ближайшего верхнего фрактала после восходящего тренда 

datetime tim1,tim2,tim3;   // время для построения линий вилки Чувашова.
datetime timL1,timL2,timL3;// время для построения линий вилки Чувашова.

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   for (i=3;i<=History;i++)
    {//цикл
    if(High[i]>High[i+1] &&High[i]>High[i-1]&&High[i]>Close[i-2])
     {//фрактал
      VFN++;           // счетчик найденного фрактала.
      // ------------------------------------------------------------+
      if(VFN==1)       // если 1-ый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
        {// f1
           Vnf1=i;        // запоминаем номер Max бара найденного фрактала.
           VMF1=High[i];  // запоминаем Max значение 1-ого найденного фрактала.
           tim1=iTime(NULL,0,i);        // запоминаем время 1-ой опорной точки.
         }//-f1
    // --------------------------------------------------------------+
    if(VFN==2)        // если 2-ый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
      {// f2
          VMF2=High[i];    // запоминаем Max значение 2-ого найденного фрактала.
          if(VMF2>VMF1)    // если Max значение 2-го фрактала больше 1-го (т.е. направлена вниз),
            {
              Vnf2=i;      // запоминаем номер Max бара найденного фрактала.
              tim2=iTime(NULL,0,i);      // запомним время 2-ой опорной точки.
            }
            else VFN=VFN-1;
       }//-f2
    // --------------------------------------------------------------+

// ------------------------------------------------------------------+
   if(VFN==2) break; // найдены все 2 фрактала, выходим из цикла.
// ------------------------------------------------------------------+ 
    }//-фрактал                      
   }//-цикл 
//----

for (i=3;i<=History;i++)
    {//цикл
    if(Low[i]<Low[i+1] &&Low[i]<Low[i-1]&&Low[i]<Close[i-2])
     {//фрактал
      VFNL++;           // счетчик найденного фрактала.
      // ------------------------------------------------------------+
      if(VFNL==1)       // если 1-ый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
        {// f1
           VnfL1=i;        // запоминаем номер Max бара найденного фрактала.
           VMFL1=Low[i];  // запоминаем Max значение 1-ого найденного фрактала.
           //Comment("VMFL1=",VMFL1);
           timL1=iTime(NULL,0,i);        // запоминаем время 1-ой опорной точки.
         }//-f1
    // --------------------------------------------------------------+
    if(VFNL==2)        // если 2-ый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
      {// f2
          VMFL2=Low[i];    // запоминаем Max значение 2-ого найденного фрактала.
          if(VMFL2<VMFL1)    // если Max значение 2-го фрактала больше 1-го (т.е. направлена вниз),
            {
              VnfL2=i;      // запоминаем номер Max бара найденного фрактала.
              timL2=iTime(NULL,0,i);      // запомним время 2-ой опорной точки.
            }
            else VFNL=VFNL-1;
       }//-f2
    // --------------------------------------------------------------+

// ------------------------------------------------------------------+
   if(VFN==2) break; // найдены все 2 фрактала, выходим из цикла.
// ------------------------------------------------------------------+ 
    }//-фрактал                      
   }//-цикл 


DelLine();DelLineH();CreateLine();CreateLineH();
   return(0);
  }
//+------------------------------------------------------------------+

void DelLine()        // Удаление трендовых линий Sell и значков для вилки Чувашова 
   {
   ObjectDelete("Tr_down1");
  // ObjectDelete("Tr_down2");
  // ObjectDelete("Frak_1");
   //ObjectDelete("Frak_2");
   //ObjectDelete("Frak_3");
   }

void DelLineH()        // Удаление трендовых линий BUY и значков для вилки Чувашова 
   {
   ObjectDelete("Tr_up1");
   //ObjectDelete("Tr_up2");
   //ObjectDelete("Fr_1");
   //ObjectDelete("Fr_2");
   //ObjectDelete("Fr_3");
   }
void CreateLine()       // Создание и отрисовка трендовых линий Sell линий вилки Чувашова 
   {
   ObjectCreate("Tr_down1",OBJ_TREND,0,tim2,VMF2,tim1,VMF1);
   ObjectSet("Tr_down1",OBJPROP_COLOR,Red);
   ObjectSet("Tr_down1",OBJPROP_WIDTH,1);  // тонкой линией и 
   ObjectSet("Tr_down1",OBJPROP_STYLE,STYLE_SOLID);// пунктиром
   //ObjectCreate("Tr_down2",OBJ_TREND,0,tim2,VMF2,tim1,VMF1);
   //ObjectSet("Tr_down2",OBJPROP_COLOR,Aqua);
  // ObjectSet("Tr_down2",OBJPROP_WIDTH,1);  // тонкой линией и 
  // ObjectSet("Tr_down2",OBJPROP_STYLE,STYLE_DOT);// пунктиром 
   }
  
   void CreateLineH()       // Создание и отрисовка трендовых линий BUY линий вилки Чувашова 
   {
   ObjectCreate("Tr_up1",OBJ_TREND,0,timL2,VMFL2,timL1,VMFL1);
   ObjectSet("Tr_up1",OBJPROP_COLOR,Green);
   ObjectSet("Tr_up1",OBJPROP_WIDTH,1);  // тонкой линией и 
   ObjectSet("Tr_up1",OBJPROP_STYLE,STYLE_SOLID);// пунктиром
   //ObjectCreate("Tr_up2",OBJ_TREND,0,timL2,VMFL2,timL1,VMFL1);
   //ObjectSet("Tr_up2",OBJPROP_COLOR,Aqua);
   //ObjectSet("Tr_up2",OBJPROP_WIDTH,1);  // тонкой линией и 
  // ObjectSet("Tr_up2",OBJPROP_STYLE,STYLE_DOT);// пунктиром 
   }

Quiero obtener dos líneas y leer sus valores en cualquier barra a través de iCustom

 

Estimados miembros del foro, ¡ayuda!

Necesito un indicador con los siguientes requisitos: 1) Intersección de dos MAs (se puede elegir el tipo de MA, el periodo de la MA, a qué MA se aplica, así como el desplazamiento).

2) El indicador dibuja una flecha en el punto de intersección.

3) En el momento de cruzar, habrá un pitido y un mensaje de correo electrónico.

4) La señal se produce una sola vez. En el momento de cruzar la MA.

Hay dos indicadores: MA_Shift_Crossover_Alert.mq4 y 2MA CrossoverWithPrice_fixed.ex4

Al primero no le gusta que la señal se dé en cada vela y después de cruzar la MA. El segundo no consigue fijar el cambio de MA.

¿Hay alguna forma de añadir la posibilidad de desplazar la MA al segundo indicador?

Los indicadores se adjuntan en el archivo.

Gracias.

Archivos adjuntos: