[¡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 268

 
okvseok:

cómo puedes entender estas líneas:

Escribe así y mira en el diario:

//---- return orders volume

if(buys>0){
 Print("buys = ",buys);
 return(buys);
}
else{
 Print("-sells = ",-sells);
 return(-sells);// это эквивалентно команде return(sells*(-1));
}
 

¿Puede darme algún consejo?

Utilizo varios indicadores que utilizan la fecha en las variables globales

extern bool   shiftdata           = false;
extern string ShiftHistory        = "02.06.2012 00:00";

Si cambias la fecha en el historial, tienes que cambiarla en todos los indicadores.

He hecho un indicador que envía el valor de desplazamiento a través de iCustom a barras int.

Pero el problema es que pasa la fecha sin modificar que está compilada (02.07.2012), pero cuando la cambias manualmente (02.06.2012) ¡no la pasa!

POR QUÉ y QUÉ HACER????

//+------------------------------------------------------------------+
//|                                                        iTime.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 1
extern string BLOK_______1        = "Работа с историей";
extern string ShiftHistory        = "02.07.2012 00:00";
extern string PERIOD              = "D1";
//---
double buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,buffer);
   SetIndexStyle(0,DRAW_ARROW,0,0);
   SetIndexEmptyValue(0,0.0);
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
int  counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
int i,period,limit,bs,barn;

if(PERIOD=="MN1") period=PERIOD_MN1;
else
if(PERIOD=="W1")  period=PERIOD_W1;
else
if(PERIOD=="D1")  period=PERIOD_D1;
else 
if(PERIOD=="H4")  period=PERIOD_H4;
else
if(PERIOD=="H1")  period=PERIOD_H1;
else
if(PERIOD=="M30") period=PERIOD_M30;
else
if(PERIOD=="M15") period=PERIOD_M15;
else
if(PERIOD=="M5")  period=PERIOD_M5;
else
if(PERIOD=="M1")  period=PERIOD_M1;
else
period=PERIOD_D1;

bs=iBarShift(Symbol(),period,StrToTime(ShiftHistory));
barn=iBars(Symbol(),period);
limit=barn-100;

if(limit>bs)
for(i=barn-1; i>=0; i--)
{
if (i==bs) buffer[i]=bs;
} RefreshRates();
return(0);
}

Aquí está el receptor

for(int y=barn-100; y>=0; y--)
{
int bbb,st=iCustom(Symbol(),PERIOD,"iTime",0,y);
if(st>0) bbb=st;
}
 Comment(bbb);

El comentario escribe el turno 16. Y al 02.06.2012 deberían ser 48.

Por favor, ayúdeme a aconsejarle.

 

ayúdame a determinar el último máximo y mínimo de un zigzag en un EA

doble zz1;
int inicio()
{
zz1=iCustom(NULL,0, "ZigZag", 12, 5, 3, 0, 1);
MessageBox("zz1="+zz1,"zz1");
return(0);
}
"0.00000" está saliendo

 
spek:

ayúdame a determinar el último máximo y mínimo de un zigzag en un EA

doble zz1;
int inicio()
{
zz1=iCustom(NULL,0, "ZigZag", 12, 5, 3, 0, 1);
MessageBox("zz1="+zz1,"zz1");
return(0);
}
"0.00000" está saliendo

double ZZ[10000]={0.0};  //массив для значений ZigZag
double zz1[10000]={0.0};

//-----
int init()
{

}
return(0);
//---
int start()
{
int q=1;   //ПОПРАВИЛ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

for(int i=1; i<=1000; i++)
{
zz1[i]=iCustom(NULL,0,"ZigZag", 12, 5, 3, 0, i);
if(zzl[i]>0) { ZZ[q]=zzl[i];  q++; }
//MessageBox("zz1="+zz1,"zz1");
Comment(ZZ[1],"  ",ZZ[2]);

return(0);
}
 

Quiero ponerle "Alert()" para que me diga cuando la tendencia se ha invertido.

Quiero poner "Alert()" para que me avise cuando la tendencia se invierta.

//+------------------------------------------------------------------+
//|                                                    mikahekin.mq4 |
//|                        Copyright 2004, MetaQuotes Software Corp. |
//|                                                http://www.sasara |
//|                              Modified by: Ronald Verwer/ROVERCOM |
//+------------------------------------------------------------------+
#property copyright "Copyright 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property  indicator_chart_window
#property  indicator_buffers 4
#property  indicator_color1  Silver
#property  indicator_color2  Yellow
#property  indicator_color3  Red
#property  indicator_color4  Blue
#property  indicator_width1 3
#property  indicator_width2 3

//---- input parameters
extern int KPeriod=3;
extern int DPeriod=3;
extern int JPeriod=7;

double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];
double ind_buffer4[];
double HighesBuffer[];
double LowesBuffer[];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
        IndicatorBuffers(6);
   SetIndexStyle(0,DRAW_HISTOGRAM, 0, 3);
   SetIndexStyle(1,DRAW_HISTOGRAM, 0, 3);
   SetIndexStyle(2,DRAW_ARROW, 0, 1);
   SetIndexStyle(3,DRAW_ARROW, 0, 1);
//----
   SetIndexDrawBegin(0,10);
   SetIndexDrawBegin(1,10);
   SetIndexDrawBegin(2,10);
   SetIndexDrawBegin(3,10);
   SetIndexDrawBegin(4,10);
   SetIndexDrawBegin(5,10);
//---- indicator buffers mapping
   SetIndexBuffer(0,ind_buffer1);
   SetIndexBuffer(1,ind_buffer2);
   SetIndexBuffer(2,ind_buffer3);
   SetIndexBuffer(3,ind_buffer4);
   SetIndexBuffer(4, HighesBuffer);
   SetIndexBuffer(5, LowesBuffer);
   
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("mikahekin");
   SetIndexLabel(0,"Open");
   SetIndexLabel(1,"Close");
   SetIndexLabel(2,"High");
   SetIndexLabel(3,"Low");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int start()
  {
   int    i,k,j;
   int    counted_bars=IndicatorCounted();
   double price;
   
//----
   if(Bars<=10) return(0);
//---- initial zero
   if(counted_bars<0) return (-1);
//---- minimums  counting
   i=Bars-KPeriod;
   if(counted_bars>KPeriod) i=Bars-counted_bars-1;
   while(i>=0)
     {
      double min=1000000;
      k=i+KPeriod-1;
      while(k>=i)
        {
         price=Low[k];
         if(min>price) min=price;
         k--;
        }
      LowesBuffer[i]=min;
      i--;
     }
//---- maximums counting
   i=Bars-DPeriod;
   if(counted_bars>DPeriod) i=Bars-counted_bars-1;
   while(i>=0)
     {
      double max=-100000;
      j=i+DPeriod-1;
      while(j>=i)
        {
         price=High[j];
         if(price>max) max=price;
         j--;
        }
      HighesBuffer[i]=max;
      i--;
     }
//---- mikahekin calcaulation
   i=Bars-JPeriod;
   if(counted_bars>JPeriod) i=Bars-counted_bars-1;
   while(i>=0)
     {
      double sumlow=0.0;
      double sumhigh=0.0;
      double sumopen=0.0;
      double sumclose=0.0;
      double close=0.0;
      double open=0.0;
      double high=0.0;
      double low=0.0;

      for(k=(i+JPeriod-1);k>=i;k--)
         {
         sumclose+=Close[k];
         close=sumclose/JPeriod;
         sumlow+= LowesBuffer[k];
         low= sumlow/JPeriod;
         sumopen+=Open[k];
         open=sumopen/JPeriod;
         sumhigh+=HighesBuffer[k];
         high=sumhigh/JPeriod;
         }
         
      ind_buffer1[i]=open;
      ind_buffer2[i]=close;
      ind_buffer3[i]=high;
      ind_buffer4[i]=low;

      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
Z.I. Soy un poco mejor en mql4 que en ballet, pero...
 
Zhunko:

1. No puedo añadir nada. Lo que quieras, devuélvelo.

2. el terminal ignora y su código no ignora, si es que está construido así. La llamada al sistema ignora tanto los parámetros como el valor de retorno. Es bastante obvio. ¿A dónde vuelve en este caso?

Sólo podemos adivinar la creación del patrón. Los desarrolladores deben haber partido de la INT por defecto.


Ha llegado un tick, el terminal llama a la función start() del EA. Usted afirma que el valor devuelto por esta función es indiferente al terminal. ¿Está documentado en algún sitio?
 
KoKoS:

Quiero ponerle "Alert()" para que me diga cuando la tendencia se ha invertido.

Quiero usar "Alert()" para que me diga cuando la tendencia se invierte.

Z.U. Soy un poco mejor en mql4 que en ballet pero...


Líneas

#property  indicator_color1  Silver
#property  indicator_color2  Yellow

Creo que los dos primeros topes son el indicador de un cambio de tendencia. Tienen signos rojos en la parte superior de los candelabros y azules en la parte inferior. Sólo la combinación amarillo-gris funciona como indicador de cambio de tendencia. Para ellos será en consecuencia:

//---- indicator buffers mapping
   SetIndexBuffer(0,ind_buffer1);// для серого цвета
   SetIndexBuffer(1,ind_buffer2);// для жёлтого цвета
Allí, en los valores de esos topes, cava.
 
Amigos, aconsejen sobre la transferencia de fechas a través de iCustom. Pasa el valor actual compilado, ¿cómo pasar el buffer cambiado a nivel global? Cuando cambio la fecha, sigue pasando el mismo valor.
extern bool   shiftdata           = false;
extern string ShiftHistory        = "02.06.2012 00:00";

Indicador publicado justo encima de .....

O no cambia de ninguna manera?????

¿Podrían informarme sobre la transferencia de fechas a través de iCustom?

 

Por favor, si alguno de ustedes puede, ayude a escribir el código para la siguiente condición:

"si, una orden fue cerrada por TakeProfit, después de cruzar una media móvil, entonces no abra más operaciones en esa dirección hasta que el precio cruce la media móvil en la dirección opuesta".

Gracias de antemano por su ayuda.

 
drknn:

Ha llegado un tick, el terminal llama a la función start() del EA. Usted afirma que el valor devuelto por esta función es indiferente al terminal. ¿Está documentado en algún sitio?
Es del derecho romano. No está prohibido, así que está permitido. Más arriba he dado un enlace a la sección de ayuda. En nuestro caso suena así: no se describe ningún comportamiento, por lo que no importa.