Y este orden de cosas es normal (son los principios de la terminal).
Si quieres que el indicador B cambie sus indicaciones cuando los parámetros del indicador A cambien, haz un intercambio de información entre los indicadores (puede ser un fichero, variables globales del terminal, memoria del ordenador): el indicador A pasa sus parámetros inicializables durante la inicialización y el indicador B comprueba periódicamente los posibles cambios de los parámetros del indicador A. Cuando detecta cambios, el indicador B también debe perinicializarse con nuevos parámetros (forzar init()).
Gracias por su respuesta, pero no puedo utilizarlo ya que no entiendo todo y no soy muy bueno en programación, podría por favor hacer los cambios necesarios en los códigos de mis indicadores.
Buenos días a todos. Tengo un problema con el indicador "CurrencyPowerMeter" y no puedo moverlo a otra posición en la ventana del terminal. Si puedes ayudar, estaré encantado de hacerlo.
He decidido hacerte una pregunta, tal vez puedas decirme. Estoy escribiendo un indicador, en el indicador proceso de garrapatas en el marco de tiempo de garrapatas (que se abre de forma autónoma,este). Mi matriz de búferes NO procesa TODOS los ticks, sino selectivamente (por ejemplo, un tick cada 60 segundos, pero no es necesario). En lugar de
int counted_bars=IndicatorCounted();
Entiendo la siguiente construcción:
externint sec=60;//объявляем количество секундint i;//будет индексом текущей "свечи" (тика)int i_prev;//будет индексом предыдущей "свечи" (тика), отстоящего от теущего на sec секунд назадdouble MyBuffer[];//этот будет на чартеdouble MyTemp[];//этот только для подсчётовint init(){
IndicatorBuffers(2);
SetIndexBuffer(0,MyBuffer)
SetIndexBuffer(1,MyTemp)
SetIndexDrawBegin(0,14);
i=Bars-1;
while(Volume[i]-Volume[Bars-1]<sec) i--;//потому что в Volume[] на тиковом у нас время сервера точностью до секунды (а в Time[] - моделируемое для предоставления тиков на чарте)
i_prev=Bars-1;//отошли от первого исторического тика на чарте на заданное количество секунд, запомнили его, запомнили первый, уходим в start()return(0);
}
int start(){
double deltaHigh,deltaLow;
int counted_bars=IndicatorCounted();//честно говоря, не уверен, т.к. считаем мы не все "свечи" (тики)if(counted_bars>=i) i=Bars-counted_bars-1;//аналогичноwhile(i>=0){//цикл обработчика
deltaHigh=High[i]-High[i_prev];//к примеру
deltaLow=Low[i_prev]-Low[i];
//и дальше код обработчика (формируем предварительный массив MyTemp[]). В конце цикла:
i_prev=i;//запоминаем теперь текущий индекс как индекс предыдущего тикаwhile(Volume[i_prev]-Volume[i]<sec){//и уходим вперёд на заданное количество секунд
i--;
}
}
...
Ahora la pregunta. En la versión M1 pura, lo siguiente es estándar.
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;//принтовал, при первом обращении limit=Bars-2, при последующих limit=2for(i=0; i<=limit; i++){
MyBuffer[i]=iMAOnArray(MyTemp, 0, 14, 0, MODE_EMA, i);
¿Con qué reemplazar limit y counted_bars? Según tengo entendido,
int counted_bars=ArraySize(MyTemp)-1;//сразу после цикла while
(porque el número de ticks en 60 segundos no es constante, es decir, escribir simplemente int counted_bars=IndicatorCounted()/_number_of_ ticks_in_60_seconds_ no funcionará).
¿O me equivoco en todo?
p.s. adelantándome a una posible pregunta, responderé: sé que en forex sec!=60 no es aplicable, y sec=60 no tiene sentido, pero tampoco negocio en forex.
MK07: Gracias por su respuesta, pero no puedo utilizarlo ya que no entiendo todo y no soy bueno en la programación, podría por favor hacer los cambios necesarios en los códigos de mi indicador.
Disculpe, ¿tiene usted un coche? Si tienes uno, no lo consideras un lujo, sino una necesidad, ¿verdad? Si no, no vas a dejarlo así el resto de tu vida, ¿verdad? Esta es la edad, hay que saber conducir un coche. Sólo soy un agricultor, pero hago lo que hago, para mí la programación no es diferente del trabajo en el patio, como el trabajo de cerrajería, el mismo trabajo con las manos (vivo en el campo). Una carretilla, una carretilla o un MQL4 son sólo herramientas para mí. Tal vez se percibe de manera diferente para los habitantes de la ciudad, no lo sé. Variables globales en el manual aquí, funciones de archivo estándar aquí, más rápido estos, pero a través de WinAPI. Quería responder ayer, pero no lo hice.
Tengo un array que he inicializado con cadenas, es decir, masa doble [3567]={0.85374 , 0.85694 , 0.85974 , .... };
Y el programa leyó el array y lo ejecutó.
Ahora he inicializado el mismo array en una columna
doble massi[3567]
{
masa [ 0] = 0,85374; masa [ 1] = 0.85694; masa [ 2] = 0. 85974; masa [ 3] = 0.86174; masa [ 4] = 0,86474; masa [ 5] = 0,86494; masa [ 6] = 0,86504;
masa [ 7] = 0,86524;
}
El compilador no genera ningún error pero sí una advertencia.
'{' - expresión en el ámbito global no permitida C:\NArchivos de programa de Alpari NZ MT4(2)\Ninclude\MASSIV.mqh (4, 2)
El array se declara globalmente como antes (cuando se inicializaba con cadenas y funcionaba bien).
#include <MASSIV.mqh> int start()
{
double Price=iOpen (Symbol (),0,0);
double SL=NormalizeDouble (Price+3000*Point, Digits);
double TP=NormalizeDouble (Price-100*Point, Digits);
double value = Bid ;//параметру value функции ArrayBsearch присваивается значение цены последнего тикаdouble ld_Delta = 0.0010;
int S = ArrayBsearch( mass, value, WHOLE_ARRAY, 0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика int last_order_bar = 0;
int ot = OrdersTotal();
...............................(остальной код опустил,но он не изменился)
Sólo hay 2 entradas en el registro.
2013.04.12 16:14:44 XXX prueba iniciada
2013.04.12 16:14:36 XXX EURUSD,H1: cargado con éxito
PREGUNTA.POR QUÉ EL PROGRAMA NO LEE UN ARRAY INICIALIZADO EN UNA COLUMNA.
No encuentro el comando que redibuja el indicador personalizado. Si alguien lo sabe, por favor, que me lo diga. Gracias de antemano =)
Ya lo he encontrado. Gracias a todos =)
Buenas tardes.
¿Puede ayudarme a encontrar una fórmula?
Tengo un paso de recarga SD=100;
si el precio es de 25, entonces el nivel de tope será DE=100
si el precio es 102, su tasa de unidades será UD=200
si el precio es de 215, la tasa de recarga es BP=300
el precio volvió a caer a 135, el nivel máximo será UD=200
Y este orden de cosas es normal (son los principios de la terminal).
Si quieres que el indicador B cambie sus indicaciones cuando los parámetros del indicador A cambien, haz un intercambio de información entre los indicadores (puede ser un fichero, variables globales del terminal, memoria del ordenador): el indicador A pasa sus parámetros inicializables durante la inicialización y el indicador B comprueba periódicamente los posibles cambios de los parámetros del indicador A. Cuando detecta cambios, el indicador B también debe perinicializarse con nuevos parámetros (forzar init()).
El primer código es el indicador A.
Segundo código-indicador B.
La última pregunta fue resuelta, la nueva es
Tengo el nivel de recarga recalculado en cada barra.
¿Cómo recuerdo el nivel de la última barra?
y utilizarlo para abrir una operación
Gracias por tu respuesta, pero no puedo utilizarlo ya que no entiendo todo y no soy muy bueno programando.
Estás sugiriendo que haga por ti lo que tú "juegas". Lo siento, no me interesa.
Y, si estás aprendiendo a programar, es una tarea interesante para ti.
int counted_bars=IndicatorCounted();Entiendo la siguiente construcción:
Ahora la pregunta. En la versión M1 pura, lo siguiente es estándar.
¿Con qué reemplazar limit y counted_bars? Según tengo entendido,
(porque el número de ticks en 60 segundos no es constante, es decir, escribir simplemente int counted_bars=IndicatorCounted()/_number_of_ ticks_in_60_seconds_ no funcionará).
¿O me equivoco en todo?
p.s. adelantándome a una posible pregunta, responderé: sé que en forex sec!=60 no es aplicable, y sec=60 no tiene sentido, pero tampoco negocio en forex.
Gracias por su respuesta, pero no puedo utilizarlo ya que no entiendo todo y no soy bueno en la programación, podría por favor hacer los cambios necesarios en los códigos de mi indicador.
¡Buenas tardes a todos!
Estoy aprendiendo a utilizar arrays.
Tengo un array que he inicializado con cadenas, es decir, masa doble [3567]={0.85374 , 0.85694 , 0.85974 , .... };
Y el programa leyó el array y lo ejecutó.
Ahora he inicializado el mismo array en una columna
doble massi[3567]
{
masa [ 0] = 0,85374;
masa [ 1] = 0.85694;
masa [ 2] = 0. 85974;
masa [ 3] = 0.86174;
masa [ 4] = 0,86474;
masa [ 5] = 0,86494;
masa [ 6] = 0,86504;
masa [ 7] = 0,86524;
}
El compilador no genera ningún error pero sí una advertencia.
'{' - expresión en el ámbito global no permitida C:\NArchivos de programa de Alpari NZ MT4(2)\Ninclude\MASSIV.mqh (4, 2)
El array se declara globalmente como antes (cuando se inicializaba con cadenas y funcionaba bien).
Sólo hay 2 entradas en el registro.
2013.04.12 16:14:44 XXX prueba iniciada
2013.04.12 16:14:36 XXX EURUSD,H1: cargado con éxito
PREGUNTA.POR QUÉ EL PROGRAMA NO LEE UN ARRAY INICIALIZADO EN UNA COLUMNA.
Gracias.