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

 
skyjet:

Gracias. ¿No importa desde qué lado empezar a contar, es decir, desde el tercer compás?

Para tu ejemplo no hay ninguna diferencia, pero tienes que especificar el principio y el final de la matriz de todos modos.

for (int x=3; x>1; x--)
{
 if(Open[x]==Open[x-1]) continue;
 if(Open[x]<Open[x-1])
   {
   //--- action
   }
}
El comienzo sí importa si la matriz es grande. Por ejemplo, si la condición se activa al final de la matriz como regla, será mejor que empiece por el final. Este ejemplo es típico de la búsqueda por orden/posición. Por supuesto, si usted hace la búsqueda primero en este caso, el programa llegará a este punto de todos modos, pero tomará más recursos.
 
Danila_mactep:
Hola a todos! Por favor, aconséjenme sobre este tema... Quiero desplazar el nivel de la MA en la pestaña de niveles. Si quiero desplazarla a 798, es demasiado complicado de calcular para muchos pares. ¿Cómo escribir un indicador que dibuje el precio de la media móvil desplazada o lo muestre en la ventana de datos y no tenga que calcularlo manualmente?
Puede crear un indicador con un desplazamiento de MA en sus datos de entrada. Y el indicador calculará el nivel de precios y mostrará inmediatamente sus objetos en el gráfico.
 
chief2000:
Tal problema - hay una matriz unidimensional cuyo tamaño puede variar.
¿Cómo recorrer todas las combinaciones posibles de elementos de la matriz entre sí?
El orden de los elementos no importa, es decir, 123==213==321...

Este es un ejemplo para una matriz con 4 elementos:


Es una buena tarea para tu cerebro. Puede probar esto:
int start(){
 double array[4];
 int k,N[];
 k=ArraySize(array);
 ArrayResize(N,k);
 for (int i=0;i<k;i++)N[i]=-i-1;// Заполнили массив элементов массива отрицательными
//
 int j=0;
 while(N[k-1]<k){
  if(N[j]<k-1){
   N[j]++;
   bool NewComb=false;
   for(i=0;i<k-1;i++){
    if(N[i]>N[i+1]){NewComb=true;}else{NewComb=false;break;}
   }
//
   if(NewComb){
// Получили новую комбинацию в массиве N размерностью k    
    string temp="";
    for(i=0;i<k;i++){// Перебираем массив N. Если N[i] то элемент array[N[i]] не участвует в выборке.
                     // Например, для размерности 4 если N[0]=3,N[1]=1,N[2}<0,N[3]<0 то это выборка array[3] и array[1]
                     //                             если N[0]=3,N[1]=2,N[2]=1,N[3]=0 то это выборка array[3] и array[2] array[1] и array[0]
     if(N[i]<0)temp=StringConcatenate(temp,"X");else temp=StringConcatenate(temp,N[i]);
    }
   Print("NEWCOMB ",temp);// это для проверки какие комбинации выбираются
   }
//
  }
  else{
   N[j]=0;i=1;
   while(i<k){
    if(N[i]<k-1) {if(N[i]>=0)N[i]++;else N[i]=0;j=0;break;}
    else {N[i]=0;i++;}
   }
  }
  if(N[k-1]>=k-1) break;
 }
 return;
}

Resultado de la prueba de la dimensión 4. Si no se selecciona el elemento X del array, en caso contrario se utiliza array[digit] y el fragmento para la dimensión 6:

 
artmedia70:
Haga un indicador cuyos datos de entrada especifiquen el desplazamiento de la MA. Y el indicador calculará el nivel de precios y mostrará inmediatamente sus objetos en el gráfico.


No sé cómo hacerlo y, francamente, no tengo ni idea de cómo - cuando abro el código de МА МА, hay tantas cosas allí que no veo dónde está el parámetro de nivel, así que no puedo copiar y pegar niveles.
 
Danila_mactep:

No sé cómo hacerlo y, para ser honesto, no tengo ni idea de cómo hacerlo - abro el código de MA, hay tantas cosas allí que no veo dónde está el parámetro de nivel, para poder copiar y pegar niveles en él. ¿Qué parte del código de MA debo copiar y dónde debo pegar niveles?
Tienes que empezar a escribir tu propio indicador y ellos te dirán lo que tienes que hacer.
 
artmedia70:
No, tienes que empezar a escribir tu propio indicador, y luego ellos te dirán lo que tienes que hacer.

He creado un nuevo indicador, hasta ahora se ve así:

#property copyright "Copyright 2013, MetaQuotes Software Corp.
#enlace de propiedad "http://www.metaquotes.net"

#propiedad ventana_del_gráfica_del_indicador
#property indicator_buffers 1
#property indicator_color1 Rojo
//--- buffers
doble ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Función de inicialización de indicadores personalizada |
//+------------------------------------------------------------------+
int init()
{
//---- indicadores
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
return(0);
}
//+------------------------------------------------------------------+
//| Función de desinicialización de indicadores personalizada |
//+------------------------------------------------------------------+
int deinit()
{
//----
#include "Moving Averages.mq4"
//----
return(0);
}
//+------------------------------------------------------------------+
//| Función de iteración de indicadores personalizada |
//+------------------------------------------------------------------+
int inicio()
{
int barras_contadas=IndicadorContado();
//----

//----
return(0);
}
//+------------------------------------------------------------------+

 
El indicador MA tiene niveles. La pregunta es la siguiente: cómo podemos obtener datos de estos niveles, digamos que el precio ha alcanzado el nivel 100 o -100 (abrir una operación de compra/venta).
 
alexey1979621:
Hay niveles en el indicador MA. La pregunta es la siguiente: cómo podemos obtener datos de estos niveles, digamos que el precio ha alcanzado el nivel 100 o -100 (abrir una operación de compra/venta).

La propia MA en la barra cero (actual) es:

double priceMA0=iMA(Symbol(), Period(), MA_Period, MA_Shift, MA_ Method, PRICE_OPEN, 0);

Para calcular la MA, tomamos el precio de apertura para deshacernos de la "charla" en la barra actual.

Entonces el precio del nivel +100 será:

double priceP100=priceMA0+100*Point;

El precio de nivel de -100 será:

double priceM100=priceMA0-100*Point;
 
artmedia70:

La propia MA en la barra cero (actual) es:

Para calcular la MA, tomamos el precio de apertura para deshacernos de la "charla" en la barra actual.

Entonces el precio del nivel +100 será:

El precio de nivel de -100 sería:


Gracias, me has ayudado más de una vez. Estoy seguro de que pronto me haré con la programación.....