[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 272

 

¡Buenas tardes señores programadores! Por favor, eche un vistazo a este interesante Asesor Experto. Quiero arreglar algo, a saber: realmente quiero adjuntar a ella (preferiblemente conmutable) arrastre personalizable en la toma de beneficios. Creo (y espero) que no será demasiado difícil para un especialista.

/*Descompilar en este foro va en contra de la ley. advertencia por primera vez. repetición - baneo eterno (FAQ)*/

 
Andrew1001:

¡Buenas tardes señores programadores! Por favor, eche un vistazo a este interesante Asesor Experto. Quiero arreglar algo, a saber: realmente quiero adjuntar a ella (preferiblemente conmutable) arrastre personalizable en la toma de beneficios. Creo (y espero) que no será demasiado difícil para un especialista.

/*Descompilar en este foro va en contra de la ley. advertencia por primera vez. repetición - baneo eterno (FAQ)*/



¡Ahí lo tienes! ¿Y cómo el código entonces establece que sería posible verlo, mejorarlo? (pregunta a los moderadores)
 
ANG3110:

Bueno, escribí un ejemplo más sencillo allí.

***

Y si no quieres dibujar todos los días, sólo el último, se hace de forma un poco diferente. Sólo sugiero un enfoque más profesional.

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2
//==============================
extern int    hour = 5;
extern int    hrma = 24;
//==============================
double fx[];
double hm;
int p,hr,hrp;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,fx); SetIndexEmptyValue(0,EMPTY); 
   
   p=hrma*60/Period();
   
   return(0);
}
//************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) cbi=Bars-p-1;
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hr==hour && hrp!=hr) 
      {
         fx[i+1]=EMPTY;
         hm=Close[i]; // я вставил закрытие оно работает на нижних таймфремах

//КАК ТУТ вставить High Low для  hour = 5 для ВСЕХ таймфремов ниже ограниченного таймфрема???????????

      }
      
      fx[i]=hm; 
   }
  
   return(0);
}
//***************************************************************

SÓLO NO está claro cómo insertar iHigh y iLow para una hora en particular, la misma hora = 5; ??????????? se obtienen los mismos huevos de nuevo...

PROFESIONALMENTE estaba usando iClose iHigh iLow, pero olvidé cómo estaba escrito el código para esta variante... Recuerdo el principio, pero he olvidado los detalles.

int start()
  {
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(Period() > 240)  return(-1);

int LastPrevDay = iBars(Symbol(), PERIOD_D1);
int barnH= iBars(Symbol(),PERIOD_H1);

for (int i = LastPrevDay-1; i >= 0; i--)
{
datetime NowDay = iTime(Symbol(), PERIOD_D1, i);
int PrevDay = iBarShift(Symbol(), PERIOD_D1, NowDay);
datetime LastD =  iTime(Symbol(), PERIOD_D1, i-1); 
int LastDay = iBarShift(Symbol(), PERIOD_D1, LastD);

if(PrevDay>LastDay)  /// что было дальше НЕПОМНЮ!!!!, НО вариант ЛУЧШЕ, можно непарясь ставить уровни iHigh iLow iClose iOpen
{ 
datetime x_time= StrToTime(TimeToStr(NowDay, TIME_DATE)+" "+shift_time); 
int x_shift= iBarShift(Symbol(),PERIOD_H1,x_time);
double CL= iClose(Symbol(),PERIOD_H1,x_shift);
}

buffer[i]= CL;
}

return(0);
}

Por favor, ayúdame a entender cómo hacerlo???????????????????

 

¡¡¡¡Una vez más, por favor, ayude a !!!!

Cómo poner correctamente iHigh iLow iClose???? de un marco temporal específico (H1) en el buffer, para que pueda ser leído correctamente en los gráficos de abajo????

int start()
  {
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(Period() > 240)  return(-1);

int LastPrevDay = iBars(Symbol(), PERIOD_D1);
int barnH= iBars(Symbol(),PERIOD_H1);

for (int i = LastPrevDay-1; i >= 0; i--)
{
datetime NowDay = iTime(Symbol(), PERIOD_D1, i);
int PrevDay = iBarShift(Symbol(), PERIOD_D1, NowDay);
datetime LastD =  iTime(Symbol(), PERIOD_D1, i-1); 
int LastDay = iBarShift(Symbol(), PERIOD_D1, LastD);

if(PrevDay>LastDay)  
/// что было дальше НЕПОМНЮ!!!!, НО вариант ЛУЧШЕ, можно непарясь ставить уровни iHigh iLow iClose iOpen
{ 
datetime x_time= StrToTime(TimeToStr(NowDay, TIME_DATE)+" "+shift_time); 
int x_shift= iBarShift(Symbol(),PERIOD_H1,x_time);
double CL= iClose(Symbol(),PERIOD_H1,x_shift);
}

buffer[i]= CL;
}

return(0);
}
 

Hola, ¿podríais decirme cómo se escribe correctamente?

El caso es que ObjectSetText no hace nada, por lo que obtengo texto en lugar de la leyenda del vértice.

ObjectCreate( "вершина",  OBJ_TEXT , WindowOnDropped( ) , Time[бар_вершина],  вершина+(10*Point)) ;  
       ObjectSet(  "вершина",  OBJPROP_COLOR, Crimson) ;
    ObjectSetText( "вершина", "вершина", 5, NULL, CLR_NONE) ;   
 
orb:

No puedo entender por qué en el archivo creado Open=Close=High=Low - no hay diferencia, todos los precios son los mismos, cuatro columnas de los mismos precios. A continuación se muestra el código del Asesor Experto descargando los datos.


No hay datos relevantes para el instrumento y el marco temporal -- abra los gráficos correctos.

Entrada no corregida en el código:

FileWrite(h,Wtime,Wday,DoubleToStr(iClose("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),..

Correcto:

FileWrite(h,Wtime,Wday,DoubleToStr(iClose("GBPUSD",0,0),MarketInfo("GBPUSD",MODE_DIGITS)),..

El código funciona si se cumplen las condiciones.

 
Roll:


No hay datos relevantes para el instrumento y el marco temporal -- abra los gráficos correctos.

Entrada incorrecta en el código:

Correcto:

Mientras se cumplan las condiciones, el código funciona.

Vale, ¡lo intentaré!)
 
nlp2311:

SÓLO NO está claro cómo insertar iHigh y iLow para una hora específica, la misma hora = 5; ??????????? resulta los mismos huevos de nuevo...

PROFESIONALMENTE estaba usando iClose iHigh iLow, pero olvidé cómo estaba escrito el código para esta variante... Recuerdo el principio, pero he olvidado los detalles.

ayúdame a entender cómo hacerlo???????????????????


Puede dibujar barras horarias en los gráficos por horas y por debajo sin tomar los precios de otro marco temporal. La vinculación con iHigh, etc., no es muy útil, ya que ralentiza el indicador y tiene que golpear el otro marco temporal.

Si es posible hacerlo todo en un solo plazo, es preferible.

¿Y cómo se dibujan prácticamente las líneas con datos horarios en un marco temporal más pequeño? Es algo así.

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Gold
#property indicator_color4 Lime
//==============================
double H[],L[],O[],C[];
double hm,lm,om,cm;
int hr,hrp,di,f=0;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,H);
   SetIndexBuffer(1,L);
   SetIndexBuffer(2,O);
   SetIndexBuffer(3,C);
   
   if (Period()>1440) f=1;
   
   di=60/Period();
   
   return(0);
}
//************************************************************
int start()
{
   if (f==1) {Comment("Период больше H1!"); return(0);}
   //-------------------------------
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) 
   {
      cbi=Bars-1;
      hm=High[cbi]; 
      lm=Low[cbi]; 
      om=Open[cbi]; 
      cm=Close[cbi]; 
   }
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hrp!=hr) 
      {
         for (int j=i+1; j<=i+di; j++)
         {
            H[j]=hm;
            L[j]=lm;
            O[j]=om;
            C[j]=cm;
         }
         
         hm=High[i];
         lm=Low[i];
         om=Open[i];
         cm=Close[i];
      }
      else
      {
         if (High[i]>hm) hm=High[i];
         if (Low[i]<lm) lm=Low[i];
         cm=Close[i];
      }
      
      H[i]=hm;
      L[i]=lm;
      O[i]=om;
      C[i]=cm;
   }
   
   return(0);
}
//***************************************************************
 
ANG3110:


En los gráficos por hora y por debajo, puede dibujar barras de marco temporal por hora y sin tomar los precios de otro marco temporal. La vinculación con iHigh, etc., no es muy útil, ya que ralentiza el indicador y tiene que golpear el otro marco temporal.

Si es posible hacerlo todo en un solo plazo, es preferible.

¿Y cómo se extraen prácticamente los datos por hora en un marco temporal más pequeño? Bueno, es más o menos así:


GRACIAS por el consejo):
 
Andrew1001:

¡Ahí lo tienes! ¿Cómo se pone el código para que se pueda mirar, para perfeccionarlo?
Pide el código fuente al autor del EA y publícalo con su permiso.
Razón de la queja: