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

 
dzhini:
Yuri, ¿puedes sugerir algo sobre mi pregunta de arriba?


Escritura de comprobación

//+------------------------------------------------------------------+
//|                                             VininI_CheckTime.mq4 |
//|                                            Copyright 2012, Vinin |
//|                                                    vinin@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Vinin"
#property link      "vinin@mail.ru"



//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int TimeFrame[]={PERIOD_MN1, PERIOD_W1, PERIOD_D1, PERIOD_H4, PERIOD_H1,PERIOD_M30, PERIOD_M15, PERIOD_M5, PERIOD_M1};
   int i, pos;
   for (i=0;i<ArraySize(TimeFrame);i++) {
      if (Period()<TimeFrame[i]) continue;
      pos=i;
      break;
   }
   for (i=pos+1;i<ArraySize(TimeFrame);i++) {
      int tmp=iBarShift(NULL, TimeFrame[i], Time[0], true);
      if (iTime(NULL, TimeFrame[i], tmp)<Time[0])tmp--;
      Print("TimeFrame: ",  TimeFrame[i], " TimeOpen: ", TimeToStr(iTime(NULL, TimeFrame[i], tmp), TIME_MINUTES), " Bar: ", tmp);
      
   
   
   }
   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Resultado

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 1 TimeOpen: 00:00 Bar: 1057

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 5 TimeOpen: 00:00 Bar: 212

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 15 TimeOpen: 00:00 Bar: 70

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 30 TimeOpen: 00:00 Bar: 35

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 60 TimeOpen: 00:00 Bar: 17

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 240 TimeOpen: 00:00 Bar: 4


 

Un consejo, por favor:

Quiero hacer una MA multitemporal, que cambie su color cuando la tendencia cambie. He hecho la visualización del precio medio de otros plazos, pero no sé cómo resolver el problema del cambio de color.

//+------------------------------------------------------------------+
//|                                                      MA-MTFC.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green
#property indicator_color3 Red
//+------------------------------------------------------------------+
extern int MA_TF=1440;
extern int MA_Period=89;
extern int MA_Shift=0;
extern int MA_Method=2;
extern int MA_AP=0;
//+------------------------------------------------------------------+
double Buffer_Yellow[];
double Buffer_Lime[];
double Buffer_Red[];

string Symb;
double MA;

int init()
  {
   Symb=Symbol();
   //---
   if (MA_TF != 1)
    if (MA_TF != 5)
     if (MA_TF != 15)
      if (MA_TF != 30)
       if (MA_TF != 60)
        if (MA_TF != 240)
         if (MA_TF != 1440)
          if (MA_TF != 10080)
           if (MA_TF != 43200)
            if (MA_TF != 0)
             return;
   //---
   SetIndexBuffer(0,Buffer_Yellow);
   SetIndexBuffer(1,Buffer_Lime);
   SetIndexBuffer(2,Buffer_Red);
   //---
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
   //---
   return(0);
  }

int deinit()
  {

   return(0);
  }

int start()
  {
   double MA;
   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars-1;
   if (limit>1) 
      limit=Bars-1;
      
   for(int i=limit-1;i>=0;i--)
    {
      int pos=iBarShift(NULL, MA_TF, Time[i]);
      MA=iMA(Symb,MA_TF,MA_Period,MA_Shift,MA_Method,MA_AP,pos);
      
      Buffer_Yellow[i]=MA;
      Buffer_Lime[i]=MA;
      Buffer_Red[i]=MA;
      
      if(Buffer_Yellow[i]>Buffer_Yellow[i+1])
       {
         Buffer_Red[i]=EMPTY_VALUE;
       }
      else if(Buffer_Yellow[i]<Buffer_Yellow[i+1])
       {
         Buffer_Lime[i]=EMPTY_VALUE;
       }
      else
       {
        Buffer_Red[i]=EMPTY_VALUE;
        Buffer_Lime[i]=EMPTY_VALUE; 
       }
      
    }

   return(0);
  }
 
Roman.:
Esta no es la manera de hacerlo. En el probador, tienes que ejecutar el búho en el TF mínimo utilizado en este búho en los precios de apertura. Es mejor ejecutar el búho en los minutos abiertos. ¡Y es mejor prescribir el TF, explícitamente!
Roman, estoy tratando de hacer que el indicador se muestre en el Probador de Estrategias. El indicador utiliza plazos inferiores para el análisis.
 
FAQ:
Sería mejor si pudieras mostrar el código completo, y pegarlo usando el botón "SRC".

Bien, intentaré añadir el código a este post.

En realidad, sé lo que quiero conseguir al final: llevo mucho tiempo operando, pero sólo empecé a programar cuando me di cuenta de lo que quería programar exactamente.

Mi objetivo ahora es conseguir una flecha verde en cada cierre de barra por encima de los tres resbalones y una flecha roja en cada barra cerrada por debajo de los tres y sólo para las barras cerradas después de adjuntar al gráfico. No me interesa el bar actual.

Quiero que estas flechas estén en el gráfico mientras el indicador está unido a él y luego se retira.

Ahora estoy dibujando los deslizadores sólo para que quede claro y luego los quitaré del EA.

Ahora tenemos algunos deslizadores y flechas, pero ahora aparecen y desaparecen y aparecen sobre barras equivocadas. Eso es lo que no entiendo.

Creo que puedo haber confundido algo con j o j+1 en las líneas 106-111 y a qué elemento anclarlas.


Gracias si me puedes dar una pista.


Por alguna razón el botón SRC no funciona, intentaré insertar el archivo como un mq4 normal

Archivos adjuntos:
t11.mq4  5 kb
 
Vinin:


Escritura de comprobación

Decidí modificar tu código y hacer una comprobación que se adapte a mis propósitos (lo ejecuté en H1).

   for (i=0;i<10;i++) {
      int tmp=iBarShift(NULL, PERIOD_M15, Time[i], true);
      if (iTime(NULL, PERIOD_M15, tmp)<Time[i])tmp--;
      Alert(" TimeOpen: ", TimeToStr(iTime(NULL, PERIOD_M15, tmp), TIME_MINUTES), " Bar: ", tmp);  
   }

Y aquí está

 
dzhini:

Decidí modificar tu código y hacer una comprobación que se adapte a mis propósitos (lo ejecuté en H1).

Y esto es lo que obtuve


Se comprueba en el probador abriendo los precios. Así que Roman ya ha escrito cómo hacerlo.

 
Es decir, ¿ejecutamos el probador en un TF de gama baja y modificamos el resto de la lógica del indicador para que se adapte a un TF de gama alta?
 
ilunga:

Precio de cierre de la barra anterior Close[1]

¡Muchas gracias! Entonces, el EA opera por ticks, pero ¿puedo cambiarlo para que opere por intervalos (candelabros)? Estoy muy confundido al respecto.
 

¡Buenos días a este hilo! El indicador compila, pero no dibuja nada, y no sé qué pasa, qué pensar, cómo buscar un error. ¡¡¡En fin, el código funcionaba, le añadí una función con mínimos cambios, pero ahora no hace nada!!!

Tal vez el problema esté en alguna parte de las declaraciones que comienzan con la rejilla, o tal vez soy demasiado lento y me lío... ¡Funcionaba!

//+------------------------------------------------------------------+
//|                                            ИндюкДимонакомпил.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#import "user32.dll"
   int   PostMessageA(int  hWnd,int  Msg,int  wParam,string lParam);
#import
#define WM_COMMAND                     0x0111
int delimiter = 0;

#property indicator_chart_window
double ВерхняячертаBuffer1[];
double НижняячертаBuffer2[];
double СинняячертаBuffer3[];
 double вершина; 
 double основание_первого_снижения;
 double начало;
 double вершина_волны_3;
 extern int T=4,K=200;
 int timeframe, start ;
 int бар_вершина ;
 int бар_основание_первого_снижения;
 int бар_начало;
int pereklutsatel;
double naklon,linija2; int P;extern int RO=49;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars-1;

   for (int i=limit;i>=0;i--) {
//----
 for ( int J=0;J<=RO;J++){
//----

  // for(int i=Bars; i>=0;i--)
   i=Bars;
      бар_вершина=iHighest( NULL,  timeframe, MODE_HIGH, K, start ) ;
       вершина =High[ бар_вершина ];
       бар_основание_первого_снижения=iLowest( NULL,  timeframe, MODE_LOW,NormalizeDouble ( бар_вершина/2,0), start ) ;
       основание_первого_снижения=Low[ бар_основание_первого_снижения ];
       бар_начало=iLowest( NULL,  timeframe, MODE_LOW,NormalizeDouble (бар_вершина*1.5,0), бар_вершина ) ;
       начало=Low[ бар_начало ];
       
         
  if(начало>основание_первого_снижения){naklon=(начало-основание_первого_снижения)/(бар_начало-бар_основание_первого_снижения);
  
    НижняячертаBuffer2[бар_начало]=начало;linija2=начало;for(i=бар_начало-1;i>=0;i--){linija2=linija2-naklon;
    
    НижняячертаBuffer2[i]=linija2;
     
   }
    НижняячертаBuffer2[бар_основание_первого_снижения]=основание_первого_снижения;}
    
    
         for (i=0;i<100;i++){  СинняячертаBuffer3[i]= Open[i];}
          for (i=330;i<500;i++){  СинняячертаBuffer3[i]= Open[i];}

     ВерхняячертаBuffer1[бар_начало]=начало;
     
 double точка4; int бар_точка4;   бар_точка4=iHighest( NULL,  timeframe, MODE_HIGH, бар_основание_первого_снижения, 3 ) ; 
  точка4 =High[ бар_точка4 ];  
   
   if(вершина>точка4){naklon=(начало-точка4)/(бар_начало-бар_точка4);  
   double linija1=начало;for(i=бар_начало-1;i>=0;i--){linija1=linija1-naklon;ВерхняячертаBuffer1[i]=linija1; }}
   
double vulf=НижняячертаBuffer2[0];
  if ( vulf==Ask&&vulf==Bid)vulf=1;
  else{ for (vulf=vulf+Point*10; vulf==НижняячертаBuffer2[0];vulf=vulf-Point){
           if ( vulf==Ask&&vulf==Bid){vulf=1;}} 
      for (vulf=vulf-Point*10; vulf==НижняячертаBuffer2[0];vulf=vulf+Point){
           if ( vulf==Ask&&vulf==Bid)vulf=1;} 
              
           
           
           }
           
           
   if (vulf==1){Comment ("  Есть вульв!!! "  , "  timeframe " , timeframe);return(0);  }
    if (vulf!=1&&pereklutsatel==1) {    
   
     if(delimiter<3){delimiter++;Comment(delimiter);return(0);}
   delimiter=0;
    fChangePeriod();P++;
                                 
                   }  } }
//----
   return(0);
  }
//+------------------------------------------------------------------+

void fChangePeriod(){int ii,hwd = WindowHandle(Symbol(),Period());
   switch(Period()){
      case PERIOD_W1    : ii = 33134; break; //PERIOD_D1;
      case PERIOD_D1    : ii = 33136; break; //PERIOD_H4;
      case PERIOD_H4    : ii = 33135; break; //PERIOD_H1;
      case PERIOD_H1    : ii = 33140; break; //PERIOD_M30;
      case PERIOD_M30   : ii = 33139; break; //PERIOD_M15;
      case PERIOD_M15   : ii = 33138; break; //PERIOD_M5;
      case PERIOD_M5    : ii = 33137; break; //PERIOD_M1;
      case PERIOD_M1    : ii = 33141; break; //PERIOD_W1;
   }     
   PostMessageA(hwd, WM_COMMAND, ii, 0);
   return;
}
 
skyjet:
¡Muchas gracias! Así que el EA opera en ticks, pero ¿puedo cambiarlo para que opere en intervalos (candelabros)? Estoy totalmente confundido con ella.

Es difícil decirlo, yo no lo he hecho así. Tal vez usted necesita para recordar de alguna manera una barra o candelero y si el siguiente aparece, entonces ... algo es arriba. El código escrito dentro de la función de inicio se ejecuta en cada tic, y lo que ya está escrito allí es lo que el programador escribió.