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

 
Stepan241 >> :

Estoy tratando de escribir un indicador. La idea es simple: vamos a promediar (fuerza de los toros - fuerza de los osos). Naturalmente, durante un periodo de tiempo determinado.



int inicio()
{
int i=Bars-IndicatorCounted()-1;
while(i>=0)
{
Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
MA_Bears[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_EMA,i);
MA_Bulls[i]=iMAOnArray(Bulls_array,100,MA_Period,0,MODE_SMA,i);
Buf_0[i]=MA_Bulls[i];
i--;
}
volver;
}

Sólo muestro los toros suavizados Buf_0[i]=MA_Bears[i]; se hace para controlar en cierta etapa del trazado del índice. Ni siquiera EXACTAMENTE. Si los aliso con un período de 1, de hecho deben repetir toros incrustados. ¡¡¡¡Por lo tanto, llegué a la conclusión de que algo está mal en la línea MA_Bulls[i]=iMAOnArray(Bulls_array,100,MA_Period,0,MODE_SMA,i); No entiendo qué exactamente...AYUDA me!!!! Han sido 3 días de mirar manuales y documentación. ¡GRACIAS!


Primero deberías formar las matrices de datos de toros y osos y luego suavizarlas con el siguiente ciclo, porque aún no lo has formado y ya estás usando el suavizado, no hay datos para suavizar...

 
Urain писал(а) >>

Primero formar las matrices de datos de toros y osos y luego usar el siguiente ciclo para plancharlos, porque aún no lo has formado y ya estás usando el suavizado, y no hay datos para suavizar?

Traducción de

int start()
{
  int i, limit=Bars-IndicatorCounted()-1;
  for ( i= limit; i>=0; i--){
    Bears_array[ i]=iBearsPower(NULL,0, PeriodPower,PRICE_CLOSE, i);
    Bulls_array[ i]=iBullsPower(NULL,0, PeriodPower,PRICE_CLOSE, i);
  }
  for ( i= limit; i>=0; i--){
    MA_Bears[ i]=iMAOnArray( Bears_array,0, MA_Period,0,MODE_EMA, i); 
    MA_Bulls[ i]=iMAOnArray( Bulls_array,100, MA_Period,0,MODE_SMA, i); 
  }
  return;
}
 

costy_ писал(а) >>

extern string xxxxxxxxxxxxx="x=0 сегодня х=1 вчера итд";
extern int х=0;
int середина=(iHigh(0,PERIOD_D1, х)-iLow(0,PERIOD_D1, х))/2;
if(Bid> середина)...;
if(Ask< середина)...;


extern datetime some_time=D'14:56';
int середина_some_time=(iHigh(0,0,iBarShift(0,0, some_time))-iLow(0,0,iBarShift(0,0, some_time)))/2;
if(Bid> середина_some_time)...;
if(Ask< середина_some_time)...;

Muchas gracias, me estoy acercando. Hay un punto que no está del todo claro.

'14:56' - la cadena literal de fecha está incompleta esta es la advertencia que recibí del ordenador.

Por lo que entiendo, sigue queriendo la fecha, pero no necesito una fecha concreta, lo que quiero es comparar el precio actual cada día con el precio a una hora determinada del mismo día. Por favor, aclare el punto.

 
alsu >> :

¿Por qué tienes que llamarlos a través de iCast? ¿Es por la unificación? Escriba un envoltorio de indicador separado para cada uno de ellos y llámelos a través de iCustom...

El problema es que he cambiado estos dos indicadores (AO y AC) y ahora quiero que las barras se coloreen según los indicadores modificados. ¿O hay alguna otra forma de hacerlo? Hace poco empecé con MQL...

 
Necron >> :

El problema es que he rehecho los dos indicadores (AO y AC), y ahora quiero que las barras se coloreen según los indicadores modificados. ¿O hay alguna otra forma de hacerlo? Hace poco que empecé a aprender MQL...

Entonces, lo que has rehecho y lo llamas, ¿cuál es el problema? Por ejemplo, si los indicadores modificados se llaman AO, AC, la llamada será

iCustom(0,0,"AO",0,shift);
iCustom(0,0,"AС",0,shift);

o puede añadir sus propios parámetros

 
future >> :

Muchas gracias, me estoy acercando. Hay un punto que no está del todo claro.

'14:56' - la cadena literal de fecha está incompleta esta es la advertencia que recibí del ordenador.

Por lo que entiendo, sigue queriendo la fecha, pero no necesito una fecha concreta. Lo que necesito es comparar el precio actual cada día con el precio a una hora determinada del mismo día. Por favor, aclare el punto.


string час="15";
string мин="15";
datetime some_time=D'Year().Month().Day() час:мин';//попробуй так ____ но на тестере не будет работать, так как текущие год месяц и день 
привяжитесь к барам так проще вместо iBarShift(0,0, some_time) номер бара
 

costy_ писал(а) >>

futuro >>:

Muchas gracias, me estoy acercando

.

Hay un punto que no está del todo claro.

'14:56' - date literal string is incomplete - este es el aviso que me ha dado el ordenador.

Entiendo que sigue queriendo la fecha, pero no necesito una fecha concreta, necesito comparar el precio actual cada día con el precio de una hora determinada del mismo

día. Por

favor, aclare el punto.


string час="15";
string мин="15";
datetime some_time=D'Year().Month().Day() час:мин';//попробуй так ____ но на тестере не будет работать, так как текущие год месяц и день 
привяжитесь к барам так проще вместо iBarShift(0,0, some_time) номер бара

Sin embargo, quiero saber si es posible mantener la unión a un tiempo determinado. En MQL4, ¿cómo se dice el precio de oferta a las 14.00 de cada día de negociación?

 

skifodessa 05.12.2009 14:07


Buenas tardes a todos.

Por favor, díganme cómo calcular el número de cruces del precio de un determinado nivel. Quiero que mi orden se abra después de 3 (4,5...), pero no después del primer cruce.

Gracias.
------------------------------------------------------------

Puedes probar el algoritmo


Si (Precio de la barra actual>precio de la barra anterior<nivel)entonces {el contador se incrementa en uno}

Si (contador>3) entonces {abrir orden; poner el contador a cero}

Ahora escribamos lo mismo en el lenguaje habitual (estoy escribiendo sólo bloques, puedes insertarlos en los lugares necesarios)

Extern int Chet=10; // después de cuántos cruces se debe abrir una orden

Extern double Uroven=1.6566; // después de que el precio haya cruzado que nivel empezar a contar.

En la función de inicio, las condiciones serán aproximadamente las siguientes

int k;

if(Open[0]> U roven&& Open[1]<Uroven)k=k+1;// aquí consideramos un cruce UP

if(k>Chet){OrderSend(.......);k=0};

En general, la pregunta no es muy difícil. El libro sobre ACM explica los fundamentos de la ALGORITMIA

 

FOR Vinin escribió >>.

Gracias por el consejo, pero no sirve de nada. Porque acabas de sustituir el bucle While por un bucle FOR.

FOR Urain escribió(a) >>

Las siguientes dos líneas están formando la matriz correcta.

Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);

Urain Debes haber pensado que la función iMAOnArray debe pasar un array ya formado. Formarlo con el bucle FOR no ha servido de nada. Eso es porque no es el array pasado a esta función (iMAOnArray) sino su NOMBRE. Y la matriz se procesa PERSONALMENTE.

cambiando i en la cadena MA_Bears[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMA,i);

He resuelto el problema. Es mucho más profundo de lo que parece. Si aplicas este procesamiento sólo en el Asesor Experto, no hay problemas, pero si construyes un gráfico usándolo, tendrás un problema de todos modos. La cuestión es que las matrices están indexadas de forma inversa. La función iMAOnArray tiene una indexación directa (de izquierda a derecha), mientras que el gráfico está indexado de derecha a izquierda. Gracias a Garfich por esta explicación.



 
Stepan241 >> :

FOR Vinin escribió >>.

Gracias por el consejo, pero no sirve de nada. Porque acabas de sustituir el bucle While por un bucle FOR.

FOR Urain escribió(a) >>

Las siguientes dos líneas están formando la matriz correcta.

Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);

Urain Debes haber pensado que la función iMAOnArray debe pasar un array ya formado. Formarlo con el bucle FOR no ha servido de nada. Porque no es el array que se pasa a esta función (iMAOnArray), sino su NOMBRE. Y la matriz se procesa PERSONALMENTE.

cambiando i en la cadena MA_Bears[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMA,i);

He resuelto el problema. Es mucho más profundo de lo que parece. Si aplicas este procesamiento sólo en el Asesor Experto, no hay problemas, pero si lo usas para construir un gráfico, tendrás un problema de todos modos. La cuestión es que las matrices están indexadas de forma inversa. La función iMAOnArray tiene una indexación directa (de izquierda a derecha), mientras que el gráfico está indexado de derecha a izquierda. Gracias a Garfich por esta explicación.

No sé cuál era el problema, pero Vinin lo escribió correctamente (da igual for o while), lo principal es que primero el bucle forma el array de datos y luego el siguiente bucle forma el iMA a partir de él,

y la cadena Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i); rellena sólo un valor i-ésimo de la matriz

sin un bucle, el array no se generará.