Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 924

 

Hola, ¿podría darme una pista?

Buscando el máximo igual al máximo de la primera barra del historial, almaceno el índice de la barra encontrada en la variable High_i

Yovoy así:

 highr=High[i];
      High_i=0;
      for(j=i+3;j<=i+m;j++)
         {
         if(j>Bars-1) break;
         
         if(!ok1)
            {
            if(MathAbs(High[j]-highr)  <= n*Point)
               {
               
               High_i = j;


Ahora, compruebo si los máximos antes y después de las tres barras deben ser inferiores al máximo de la primera barra.

Tengo que incluir esto en el bucle:

if(High[High_i]>High[High_i-3]&&High[High_i]>High[High_i-2]&&High[High_i]>High[High_i-1]
   && High[High_i]>High[High_i+3]&&High[High_i]>High[High_i+2]&&High[High_i]>High[High_i+1])

Por un lado intento comprobarlo así

 for(jl=High_i;jl<=High_i+3;jl++) 
    {
    // if (High_i!=0);
       
      if ( High[High_i]>High[jl])
          {
               cnt1++;
               if(cnt1>=3)
                  {
                  ok1=true;
                 BuyBuffer[i]=highr+5*Point;
                  }
               }
            }

Por favor, ayuda.




	          
 
tatianati:
Ahora comprobando, el hai de las tres barras anteriores y posteriores debe ser menor que el hai de la barra encontrada.

Podría ser así:

bool Status_Successful = true;

for(int x=(High_i-3); x<=(High_i+3); x++) {
   if(x==High_i) {
      continue;
   }
   if(High[x]>=High[High_i]) {
      Status_Successful = false;
      break;
   }
}


if(Status_Successful==true) {
   ....
}
 
atztek:
Probablemente sea así:



Gracias, funciona.

Pero después de aumentar el número de barras, así:

for(int x=(High_i-7); x<=(High_i+7); x++)

surge.

arrayfuera de rango en 'ta_v1_05.mq4' (174,11)

línea 174, ésta:

   if(High[x]>=High[High_i])

por favor, dígame cómo solucionarlo.

 
¿estás seguro de que x es un número natural o 0? si high_i = por ejemplo 6, entonces x = -1, y high[-1] ya es un problema. quizás añadir una comprobación en la línea 173 si (x < 0) continuar;
 
tatianati

danik: ¿estás seguro de que x es un número natural o 0? si high_i =, por ejemplo, 6, entonces x = -1 y high[-1] ya es un problema. tal vez añadir una comprobación si (x < 0) continuar a la línea 173;
Durante tres bares se ha realizado dicha "comprobación":
      for(j=i+3;j<=i+m;j++)

Para los demás valores hay que cambiarlos por completo.
Podrías empezar con esto, y luego ver si esto resuelve el problema o si hay algo más que necesita ser arreglado.
 
Hola, podríais aconsejarme por favor, hay una función para cerrar órdenes, pero las órdenes no se cierran por alguna razón, no puedo entender qué pasa
void CloseOrders(int otype)
    {
      int ClosePrice;
      
      if (otype == OP_BUY) ClosePrice=Bid;
      if (otype == OP_SELL) ClosePrice=Ask;
    
       
      int total = OrdersTotal();
      for(int i = total-1; i >= 0; i--)
      {    
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         { 
           if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
           OrderClose(OrderTicket(),OrderLots(),ClosePrice,Slippage,Yellow);
         }
      }
 
lufer:
Hola, podríais aconsejarme por favor, hay una función para cerrar órdenes, pero las órdenes no se cierran por alguna razón, no consigo averiguar qué es lo que falla

¡El precio no puede ser int!

int ClosePrice;
 
TarasBY:

¡El precio no puede ser int!

¡¡¡Oh, sí!!! ¡¡¡Gracias!!!
 
Ayúdame a encontrar un error en el código, parece que dibuja dos líneas basadas en los datos del indicador MACD ZeroLag para EUR\USD y GBP\USD, pero no pasa nada. Este es el código
#property indicator_separate_window
#property indicator_buffers 2
#property  indicator_color1 Red
#property  indicator_color2 DarkBlue
#property  indicator_width1 1
#property  indicator_width2 1
//+------------------------------------------------------------------+

extern string ExtParam1="EURUSD";
extern string ExtParam2="GBPUSD";
extern int FastEMA=12;
extern int SlowEMA=24;
extern int SignalEMA=9;

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexLabel(0,ExtParam1); 

SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexLabel(1,ExtParam2); 
//----
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars --; 
int limit=Bars-IndicatorCounted();
int bar;
for(bar=0; bar<limit; bar++)
ExtMapBuffer1[bar]=iCustom(ExtParam1,Period(),"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,iBarShift(ExtParam1,0,Time[bar],false));
ExtMapBuffer2[bar]=iCustom(ExtParam2,Period(),"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,iBarShift(ExtParam2,0,Time[bar],false));
return(0);
}  
 
ASZmyrov:
Por favor, ayúdenme a encontrar un error en el código, parece que el MACD ZeroLag debería dibujar dos líneas para EUR\USD y GBPUSD, pero no pasa nada. Este es el código

Se rumorea que IndicatorCounted() no funciona, también el recálculo de indicadores es más correcto para contar del pasado al presente, y hay algunos errores más en el código.

P.D. El propio MACD ZeroLag también debería ser "ajustado" para la nueva máquina virtual.

Archivos adjuntos:
Razón de la queja: