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

 
artmedia70:
El tamaño de la matriz es cero. No te olvides de ArrayResize(), o simplemente establece el tamaño adecuado para el array
Gracias, lo hice de otra manera, encontréArrayMaximum() en el indicador y pasé el valor a través deiCustom al Asesor Experto :)
 
Hola a todos, tengo un script que utiliza llamadas de una DLL externa, que específicamente cuenta las comillas y crea un archivo con las probabilidades necesarias, ¿hay alguna forma de hacer que el script se ejecute en un horario? ¿Necesito que funcione todos los días a una hora determinada?
 

Hola,

El cuadro lo mostraba:

En la primera ventana del indicador de volumen, ponga el índice de flujo de dinero (10) en la parte superior.

Hice unindicador separado, donde nuevamente tomo el Volumen, recalculo el mouwing con el Volumen y trato de hacer como en la primera ventana - 25%, 50%, 75%.

Lo intenté de la forma en que lo hice, pero no quedó bien.

Si alguien ha tenido problemas con esto, por favor comparta sus sugerencias.

Gracias

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_minimum 0

#property indicator_width1 2
#property indicator_width2 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Yellow

extern int MAPeriod = 30;
double     volum[],ma[];
//+------------------------------------------------------------------+
int init(){
    int bars_count=WindowBarsPerChart(),volh;
    int bar=WindowFirstVisibleBar();
    volh = Volume[iHighest(Symbol(),0,MODE_VOLUME,bar,0)];
    SetIndexBuffer(0,volum);
    SetIndexBuffer(1,ma);
    SetIndexStyle(0,DRAW_HISTOGRAM);
    SetIndexStyle(1,DRAW_LINE);
    SetLevelValue (0,   volh*1.05); 
    SetLevelValue (1, ((volh*1.05)/100)*75.0); 
    SetLevelValue (2, ((volh*1.05)/100)*50.0);
    SetLevelValue (3, ((volh*1.05)/100)*25.0); 
    return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
/*int start(){
    int limit;
        limit = Bars-IndicatorCounted()-1;
    for(int i=limit;i>=0;i--){
        volum[i] = NormalizeDouble(Volume[i],0);
        ma[i]    = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0);
       }
   return(0);
  }*/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
    int i=rates_total-prev_calculated-1;
    if(i<0)
       i=0; 
    while(i>=0){
      if(i<rates_total-1)
        volum[i] = NormalizeDouble(Volume[i],0);
        ma[i]    = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0);
        i--;
       }     
   return(rates_total);
  }
 
tara:
Se refería a la barra de menos segundos. Y el valor medio de los límites. Quiere burlarse de mí, supongo. Yo le mandaría a la mierda, ya sabes lo que quiero decir :)
Segundo grado, séptimo grado, que todavía no sabe que no hay tal país - Bielorrusia, llegó a los estudiantes de primer grado y kochetsya. Y ante cualquier pregunta, se limita a mandar o amonestar: deben aprender. Debe leer con atención encima de la puerta en qué rama se encuentra. Todavía estoy aprendiendo el alfabeto, así que no te emociones demasiado, de todos modos no lo entenderé.
 

Y aevillive y artmedia70 un enorme agradecimiento. Por su paciencia y su tiempo. Estoy seguro de que no es sólo mi opinión sobre ti. Todos los que entran en este hilo piden ayuda y la obtienen sobre todo de ti. Gracias.

 

Hola, queridos profesionales, hace mucho tiempo que no me pongo en contacto con vosotros

El caso es que hay un Expert Advisor con 2 muwks cruzados y nadie se molestó en abrir una orden

void Comercio()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt))

{

if(sumSO>0 && !ClosePos(OP_SELL)) return;

if(MO(OP_BUY,GetLot(),GetComment())==-1) return;

if(!ModifyByTicket(T)) return;

NumbUp=0; NumbDn=0;

}

si no

y así sucesivamente...

es decir, si hay un cruce de la distancia, abrir una orden

Necesito un código para encontrar la hora del último cruce ...

a continuación, desde el momento actual hasta el momento en el historial, busca un pedido dentro de un período determinado... y abre un pedido si no ha encontrado ninguno

he explorado el código de los indicadores trazadores para este propósito, todo parece estar claro allí

pero no sé cómo cronometrar la primera barra después del cruce de curvas para que sea la más a la derecha

Creo que es necesario un operador de forte, pero no puedo formularlo

 
evillive:

Esta no es la manera de hacerlo. Llama a iCustom para los 3 buffers, escribe cada valor en su propia variable y luego haz lo que quieras con estos valores.

En el caso de las bandas de Bollinger, para la segunda barra, según el ejemplo de la ayuda, no es necesario desmarcarlas:

Gracias.

Pero debido a mi analfabetismo tengo que buscar en mi manual todo el tiempo y desenterré lo siguiente: un indicador personalizado es un programa escrito de acuerdo con el algoritmo del autor. Y el tutorial dice que iCustomdevuelve el valor del indicador personalizado especificado.

Pero no uso ningún indicador personalizado (es decir, según tengo entendido, desarrollado por mí).

Necesito recuperar los valores de los indicadores estándar, si es que puedo llamarlos así, Media Móvil, Bandas de Bollinger y Oscilador Estocástico con los parámetros que he especificado. Por supuesto, lo hago "por intuición": se aplicará lo primero que encuentre, pero la variante que has sugerido tampoco me sirve.

¿No hay solución sin usar todos esos buffers, arrays y bucles? En ellos soy como un canto rodado en el mar: me hundo enseguida.

 
sannin:

Hola, queridos profesionales, hace mucho tiempo que no me pongo en contacto con vosotros

El caso es que hay un Expert Advisor con 2 muwks cruzados y nadie se molestó en abrir una orden

void Comercio()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt))

{

if(sumSO>0 && !ClosePos(OP_SELL)) return;

if(MO(OP_BUY,GetLot(),GetComment())==-1) return;

if(!ModifyByTicket(T)) return;

NumbUp=0; NumbDn=0;

}

si no

y así sucesivamente...

es decir, si hay un cruce de la distancia, abrir una orden

Necesito un código para encontrar la hora del último cruce ...

a continuación, desde el momento actual hasta el momento en el historial, busca un pedido dentro de un período determinado... y abre un pedido si no ha encontrado ninguno

he explorado el código de los indicadores trazadores para este propósito, todo parece estar claro allí

pero no sé cómo cronometrar la primera barra después del cruce de curvas para que sea la más a la derecha

Creo que es necesario un operador de forte, pero no puedo formularlo

Este Asesor Experto no funciona por intersección. El criterio es el siguiente: si el МА rápido es superior al lento en X pips y no hay ninguna posición abierta, ábrala en el mercado.

Para encontrar el cruce, siempre hay que tomar dos valores: la MA rápida/lenta antes del cruce y la MA rápida/lenta después del cruce para saber cuándo se intercambian, por así decirlo. En otras palabras

if(FastMA_2<SlowMA_2 && FastMA_1>SlowMA_1) - el МА rápido ha cruzado el lento de abajo a arriba entre el primer y el segundo compás.

En un bucle infinito, mira desde la barra cero hasta la detección del cruce, será X+1 barra, y necesitas el tiempo de la barra X, es decir, la barra más reciente después del cruce.

 
rapid_minus:

Gracias.

Pero, debido a mi analfabetismo, tengo que escarbar en el libro de texto todo el tiempo y esto es lo que desenterré: un indicador personalizado es un programa..., escrito según el algoritmo del autor. Y el tutorial dice que iCustomdevuelve el valor del indicador personalizado especificado.

Pero no utilizo ningún indicador personalizado (es decir, según tengo entendido, desarrollado por mí).

Necesito recuperar los valores de los indicadores estándar, si es que puedo llamarlos así, Media Móvil, Bandas de Bollinger y Oscilador Estocástico con los parámetros que he especificado. Por supuesto, lo hago "por intuición" - se aplicará lo primero que encuentre. Pero su variante sugerida no me parece adecuada también.

¿No hay solución sin usar todos esos buffers, arrays y bucles? Soy como un canto rodado en el mar: me hundo en él enseguida.

Correcto, cuando se utilizan las Bandas de Bollinger, no es necesario llamar a iCustom, sino que se debe llamar a iBands por separado para cada línea del indicador. La forma alternativa sin llamar al indicador ("sin usar buffers, arrays, bucles") es implementar en el Asesor Experto el algoritmo de cálculo de este indicador y leer el valor deseado cuando sea necesario (puede leer sólo el valor deseado, por ejemplo, sólo la línea inferior). Pero completamente sin bucles y matrices todo lo mismo no va a funcionar.
 
sannin:

Hola, queridos profesionales, hace mucho tiempo que no me pongo en contacto con vosotros

El caso es que hay un Expert Advisor con 2 muwks cruzados y nadie se molestó en abrir una orden

void Comercio()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt))

{

if(sumSO>0 && !ClosePos(OP_SELL)) return;

if(MO(OP_BUY,GetLot(),GetComment())==-1) return;

if(!ModifyByTicket(T)) return;

NumbUp=0; NumbDn=0;

}

si no

y así sucesivamente...

es decir, si hay un cruce de la distancia, abrir una orden

Necesito un código para encontrar la hora del último cruce ...

a continuación, desde el momento actual hasta el momento en el historial, busca un pedido dentro de un período determinado... y abre un pedido si no ha encontrado ninguno

he explorado el código de los indicadores trazadores para este propósito, todo parece estar claro allí

pero no sé cómo cronometrar la primera barra después del cruce de curvas para que sea la más a la derecha

Creo que es necesario un operador de forte, pero no puedo formularlo

Aquí hay un ejemplo, donde mostré cómo medir cuántas barras después de cruzar 2 muves.
datetime TimeStart = 0;
//+------------------------------------------------------------------+
int init(){return(0);}
int deinit(){return(0);}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int f;
   bool     cu1     = false;
   bool     cu2     = false;
   double   ma_1    = iMA(NULL,0,31,0,MODE_SMA,PRICE_OPEN,0);
   double   ma1     = iMA(NULL,0,11,0,MODE_SMA,PRICE_OPEN,0);
   double   ma_2    = iMA(NULL,0,31,0,MODE_SMA,PRICE_OPEN,1);
   double   ma2     = iMA(NULL,0,11,0,MODE_SMA,PRICE_OPEN,1);

   if(ma2<ma_2 && ma1>ma_1)
      TimeStart=Time[0]; 
   if(ma2>ma_2 && ma1<ma_1)
      TimeStart=Time[0];
   if(ma1>ma_1)
      cu1=true;
   if(ma1<ma_1)
      cu2=true;

   if(cu1==true || cu2==true)  
      int b1=iBarShift(Symbol(), PERIOD_H1, TimeStart);      
      int b2=iBarShift(Symbol(), PERIOD_H1, TimeCurrent());

    for(int j=b2;j<=b1;j++){
         f=b1-b2;
      }
       
   return(0);
  }
Razón de la queja: