[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 280

 
No encuentro el comando que redibuja el indicador personalizado. Si alguien lo sabe, por favor, que me lo diga. Gracias de antemano =)
 
tesla-pip:
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

 
TarasBY:

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.



El primer código es el indicador A.

Segundo código-indicador B.

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Black
#property  indicator_color2  Green
#property  indicator_color3  Red
#property  indicator_width2  2
#property  indicator_width3  2
#property  indicator_level1 0.0

//---- input parameters
extern int FastPeriod =5;
extern int LowPeriod  =34;
//---- indicator buffers
double     ExtBuffer0[];
double     ExtBuffer1[];
double     ExtBuffer2[];



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   //---- drawing settings
   SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   IndicatorDigits(Digits+1);
   SetIndexDrawBegin(0,34);
   SetIndexDrawBegin(1,34);
   SetIndexDrawBegin(2,34);
//---- 3 indicator buffers mapping
   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("My_AO");
   SetIndexLabel(1,NULL);
   SetIndexLabel(2,NULL);
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Awesome Oscillator                                               |
//+------------------------------------------------------------------+
int start()
  {
      
  
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current;
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd
   for(int i=0; i<limit; i++)
      ExtBuffer0[i]=iMA(NULL,0,FastPeriod,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,LowPeriod,0,MODE_SMA,PRICE_MEDIAN,i);
//---- dispatch values between 2 buffers
   bool up=true;
   for(i=limit-1; i>=0; i--)
     {
      current=ExtBuffer0[i];
      prev=ExtBuffer0[i+1];
      if(current>prev) up=true;
      if(current<prev) up=false;
      if(!up)
        {
         ExtBuffer2[i]=current;
         ExtBuffer1[i]=0.0;
        }
      else
        {
         ExtBuffer1[i]=current;
         ExtBuffer2[i]=0.0;
        }
        
       
     }
//---- done
   return(0);
  }
#property indicator_separate_window
#property indicator_minimum -1.5
#property indicator_maximum 1.5
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property  indicator_width1  2
#property  indicator_width2  2
#property indicator_level1 0.0

//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {  
      
       
    double UP,DN;     
  
  
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
       
      { 
        UP=iCustom(NULL,0,"My_AO",1,i+1);               
        DN=iCustom(NULL,0,"My_AO",2,i+1);    
             
        
       if(UP>0)       
         {ExtMapBuffer1[i+1]=1;
          ExtMapBuffer2[i+1]=0;
         }
         
       if(UP<0)       
         {ExtMapBuffer1[i+1]=-1;
          ExtMapBuffer2[i+1]=0;
         }  
         
                              
       if(DN>0)            
         {
          ExtMapBuffer1[i+1]=0;
          ExtMapBuffer2[i+1]=1;
         }
              
       if(DN<0)            
         {
          ExtMapBuffer1[i+1]=0;
          ExtMapBuffer2[i+1]=-1;
         }
               
                       
    
    }
//----
   return(0);
 
   }
   
//+------------------------------------------------------------------+    
   

 

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

 
MK07:
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.

 
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:

extern int 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=2
   for(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.
 

¡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).

 #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.

Gracias.