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

 
ModRed:
Existe el indicador MA. Y existe un indicador HMA similar a éste. ¿Cómo se puede insertar en un EA? ¿Copiar el código completamente? ¿O hay una variante más corta?

estudio iCustom
 
Mitruha:

La idea es muy buena, ¿habéis visto aquí programas de este tipo que transfieran o copien las operaciones a otros terminales?

¿Un programa de este tipo?
 
ModRed:
Existe el indicador MA. Y existe un indicador HMA similar a éste. ¿Cómo se puede insertar en un EA? ¿Copiar el código completamente? ¿O hay una variante más corta?
Cómo hacerlo.
 

Hola a todos, tengo un problema, he "perdido" este indicador, es una especie de CCI suavizado, que podía cambiar dos parámetros, periodo y un multiplicador. En la versión original, estos parámetros eran respectivamente 20 y 2. Y, si no recuerdo mal, el nombre de este indicador constaba de dos palabras y la segunda palabra empezaba por la letra inglesa "C".

 
alsu:

Pero en general, por supuesto, puedes sobrecargar el constructor y usarlo en lugar de Init(), después de todo, es la misma función. A qué variante recurrir es una cuestión personal de cada uno, en cuestiones de gustos, como sabemos, no hay asesores)


Y si la inicialización falla, en caso de utilizar el método, por ejemplo, Init(), se puede describir como la devolución de un valor del tipo correspondiente y la devolución de un valor apropiado en caso de error. El código de llamada sabrá así que la inicialización ha fallado y que, por tanto, el objeto no puede ser utilizado. ¿Cómo sabe el código de llamada sobre la inicialización fallida cuando se utiliza el constructor?

 

Ayuda chicos, cómo hacer que el búho no abra una orden en la misma barra en la que se abrió la posición por una señal, y esperar a una nueva barra y comprobar la señal de nuevo, lo hice - barra por barra

añadió esto

datetime   BARflag  = 0; 
и -
int start()
{
 datetime now = Time[0];
  if(BARflag >= now) return(0);
   BARflag = now;
 
bergkamp.:

Ayuda chicos, cómo hacer que el búho no abra una orden en la misma barra en la que se abrió la posición por una señal, y esperar a una nueva barra y comprobar la señal de nuevo, lo hice - barra por barra

añadió esto

и -

Algo así:

   //---
   if(iBarShift(OrderSymbol(),Period(),OrderOpenTime())==0) {
      // выбранный ордер открыт на нулевом (текущем) баре, значит ещё рано открывать следующий
      }
   else {
      // выбранный ордер открыт не на нулевом (текущем) баре, значит можно открывать следующий
      }
 
artmedia70:

Algo así:

Gracias, ¿sería fácil descifrar las líneas prescritas para el ejemplo? --// la orden seleccionada está abierta en la barra cero (actual), por lo que es demasiado pronto para abrir la siguiente

//la orden seleccionada no está abierta en la barra cero (actual), lo que significa que está bien abrir la siguiente ......???

 
bergkamp.:

Gracias, ¿sería posible descifrar las líneas prescritas para el ejemplo? --//Orden seleccionada abierta en la barra cero (actual), por lo que es demasiado pronto para abrir la siguiente

//la orden seleccionada no está abierta en la barra cero (actual), lo que significa que está bien abrir la siguiente ......???

Esta es la función que devuelve la barra para abrir la última posición abierta:

//+------------------------------------------------------------------+
   int BarOpenLastPos(string sy, int timeframe, int op, int mn) {
      datetime t=0;
      int      i, j=-1, k=OrdersTotal()-1;
      for (i=k; i>=0; i--) {
         if (OrderSelect(i, SELECT_BY_POS)) {
            if (OrderSymbol()!=sy)        continue;
            if (OrderType()!=op)          continue;
            if (OrderMagicNumber()!=mn)   continue;
            if (t<OrderOpenTime()) {
               t=OrderOpenTime();
               j=i;
               }
            }
         }
      if (OrderSelect(j, SELECT_BY_POS)) return(iBarShift(sy,timeframe,OrderOpenTime()));
      return(-1);
   }
//+------------------------------------------------------------------+

Si la función devuelve -1, entonces no hay ninguna posición abierta cuyos datos se hayan pasado a la función.

Ejemplo de uso:

if(BarOpenLastPos(Symbol(), Period(), OP_BUY, magic)>0) {
   // бар открытия последней открытой позиции Buy на текущем символе, текущем таймфрейме, 
   // с магиком magic больше нулевого --> можно открывать следующую позицию
   }

o

if(BarOpenLastPos(USDCAD, PERIOD_M15, OP_SELL, magic0)<0) {
   // нет позиций Sell на USDCAD с магиком magic0 --> можно открывать позицию на USDCAD
   }
 

Los entendidos piden su ayuda...

algoritmo test01

//+------------------------------------------------------------------+
//test                                                                    
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  clrGold
#property indicator_color2  clrBlue

#property indicator_level1    0

//--- indicator buffers
double Buf0[];
double Buf1[];

double t1[];
double t2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(4);
   SetIndexBuffer(0,Buf0); SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(1,Buf1); SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2,t1); 
   SetIndexBuffer(3,t2); 
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
   
   {
   int i,counted_bars;
   counted_bars=IndicatorCounted();
   i=Bars-counted_bars-1;
   
int sr=24,n;
double sum,sum2;
double m1,m2;

  
   while(i>=0)
   {
   sum=0;
   sum2=0;
   
   for(n=i; n<=i+sr-1; n++) 
   {
   if(Open[i]>Open[i+1]) m1=sum=sum+Close[i]-Close[n];
   if(Open[i]<Open[i+1]) m2=sum=sum+Close[i]-Close[n];
   
   if(Open[i]>Open[i+1]) t1[i]=sum2=sum2+Close[i]-Close[n];
   if(Open[i]<Open[i+1]) t2[i]=sum2=sum2+Close[i]-Close[n];
   }
     
   Buf0[i]=(m1+m2)/sr;
   Buf1[i]=(t1[i]+t2[i])/sr;
   
   i--;
   }
return(0);
  }
//+------------------------------------------------------------------+

¿por qué en Buf1 hay valores diferentes a los de Buf0? lógicamente deberían ser los mismos?

¿por qué es posible utilizar una variable para un valor, pero un buffer (matriz de datos)--> (se requiere una matriz para el cálculo posterior) para otro valor? ¿cómo puedo utilizar una matriz así como las variables m1 y m2?

Archivos adjuntos:
test01.mq4  2 kb
Razón de la queja: