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

 
ToLik_SRGV:

Además Odiseo, en el ejemplo anterior lo tenías así:

Y ahora es así:

No has borrado nada, ¿o me lo estoy imaginando?
aquí está el código orinal
 IndicatorBuffers(7);
   SetIndexBuffer(0, MACDBuffer);
   SetIndexBuffer(1, SignalBuffer);
   SetIndexBuffer(2, FastEMABuffer);
   SetIndexBuffer(3, SlowEMABuffer);
   SetIndexBuffer(4, SignalEMABuffer);
   SetIndexBuffer(5, Buffer1);
   SetIndexBuffer(6, Buffer2);
   SetIndexStyle(0, DRAW_NONE);
   SetIndexStyle(1, DRAW_LINE,EMPTY);
  SetIndexStyle(2, DRAW_LINE,EMPTY,2 );
   SetIndexStyle(3, DRAW_NONE,EMPTY,2);
   SetIndexStyle(4, DRAW_NONE);
   SetIndexStyle(5, DRAW_HISTOGRAM,EMPTY, 2);
   SetIndexStyle(6, DRAW_HISTOGRAM,EMPTY, 2);
   SetIndexDrawBegin(0, SlowEMA);
   SetIndexDrawBegin(1, SlowEMA);
   IndicatorShortName("ZeroLag MACD Colored(" + FastEMA + "," + SlowEMA + "," + SignalEMA + ")");
   SetIndexLabel(0, "MACD");
   SetIndexLabel(1, "Signal");
   SetIndexLabel(5, "MACD");
   SetIndexLabel(6, "MACD");
 
odiseif:
aquí está el código final
Lo siento, mi error. ..... es el original.
//+------------------------------------------------------------------+
//|                                                 ZeroLag MACD.mq4 |
//|                                                               RD |
//|                                                 marynarz15@wp.pl |
//| Colored by SVK © 2009.                                           |
//+------------------------------------------------------------------+
#property copyright "RD"
#property link      "marynarz15@wp.pl"
//----
#property indicator_separate_window
#property  indicator_buffers 7
#property indicator_color1 Black
#property indicator_color2 Blue
#property indicator_color3 Black
#property indicator_color4 Black
#property indicator_color5 Black
#property indicator_color6 Lime
#property indicator_color7 Red

//---- input parameters
extern int FastEMA = 12;
extern int SlowEMA = 26;
extern int SignalEMA = 9;

//---- buffers
double MACDBuffer[];
double SignalBuffer[];
double FastEMABuffer[];
double SlowEMABuffer[];
double SignalEMABuffer[];

double Buffer1[];
double Buffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(7);
   SetIndexBuffer(0, MACDBuffer);
   SetIndexBuffer(1, SignalBuffer);
   SetIndexBuffer(2, FastEMABuffer);
   SetIndexBuffer(3, SlowEMABuffer);
   SetIndexBuffer(4, SignalEMABuffer);
   SetIndexBuffer(5, Buffer1);
   SetIndexBuffer(6, Buffer2);
   SetIndexStyle(0, DRAW_NONE);
   SetIndexStyle(1, DRAW_LINE,EMPTY);
   SetIndexStyle(2, DRAW_NONE);
   SetIndexStyle(3, DRAW_NONE);
   SetIndexStyle(4, DRAW_NONE);
   SetIndexStyle(5, DRAW_HISTOGRAM);
   SetIndexStyle(6, DRAW_HISTOGRAM);
   SetIndexDrawBegin(0, SlowEMA);
   SetIndexDrawBegin(1, SlowEMA);
   IndicatorShortName("ZeroLag MACD Colored(" + FastEMA + "," + SlowEMA + "," + SignalEMA + ")");
   SetIndexLabel(0, "MACD");
   SetIndexLabel(1, "Signal");
   SetIndexLabel(5, "MACD");
   SetIndexLabel(6, "MACD");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   double prev,current;
   int counted_bars = IndicatorCounted();
   if(counted_bars < 0) 
       return(-1);
   if(counted_bars > 0) 
       counted_bars--;
   limit = Bars - counted_bars;
   double EMA, ZeroLagEMAp, ZeroLagEMAq;
   for(int i = 0; i < limit; i++)
     {
       FastEMABuffer[i] = 100.0*iMA(NULL, 0, FastEMA, 0, MODE_EMA, PRICE_CLOSE, i);
       SlowEMABuffer[i] = 100.0*iMA(NULL, 0, SlowEMA, 0, MODE_EMA, PRICE_CLOSE, i);
     }
   for(i = 0; i < limit; i++)
     {
        EMA = iMAOnArray(FastEMABuffer, Bars, FastEMA, 0, MODE_EMA, i);
        ZeroLagEMAp = FastEMABuffer[i] + FastEMABuffer[i] - EMA;
        EMA = iMAOnArray(SlowEMABuffer, Bars, SlowEMA, 0, MODE_EMA, i);
        ZeroLagEMAq = SlowEMABuffer[i] + SlowEMABuffer[i] - EMA;
        MACDBuffer[i] = ZeroLagEMAp - ZeroLagEMAq;
        FastEMABuffer[i] = 0.0;
        SlowEMABuffer[i] = 0.0;
     }
   for(i = 0; i < limit; i++)
       SignalEMABuffer[i] = iMAOnArray(MACDBuffer, Bars, SignalEMA, 0, MODE_EMA, i);
   for(i = 0; i < limit; i++)
     {
       EMA = iMAOnArray(SignalEMABuffer, Bars, SignalEMA, 0, MODE_EMA, i);
       SignalBuffer[i] = SignalEMABuffer[i] + SignalEMABuffer[i] - EMA;
       SignalEMABuffer[i] = 0.0;
     }
//---- dispatch values between 2 buffers
   bool up=true;
   for(i=limit-1; i>=0; i--)
     {
      current=MACDBuffer[i];
      prev=MACDBuffer[i+1];
      if(current>prev) up=true;
      if(current<prev) up=false;
      if(!up)
        {
         Buffer2[i]=current;
         Buffer1[i]=0.0;
        }
      else
        {
         Buffer1[i]=current;
         Buffer2[i]=0.0;
        }
     }     
   return(0);
  }
//+------------------------------------------------------------------+
 
ToLik_SRGV:

Sergey, no entiendo muy bien qué es lo que has cambiado exactamente, porque en la dirección que has proporcionado tienes que registrarte para ver el código fuente de CCI Filter.
Sólo he encontrado un error, iWPR no tiene el parámetro applied_price, por lo que es correcto:


¡¡¡Todo, gracias, ahora rrrrrr funciona!!!

 
ToLik_SRGV:

En principio, no hay ninguna diferencia.
Pruebe mi función, es bastante simple, pasar el "medj", y el arrastre deseado como parámetros.
Esta función debe ser llamada al inicio en cualquier lugar, siempre y cuando se inicie con cada tick.

Obviamente, los pedidos deben tener diferentes deslizadores.

Entendido:
Lo entiendo, defines una variable ro al principio de la función, pero no la asignas a ningún sitio, es decir, es 0.

ToLik_SRGV, gracias, sigue sin funcionar correctamente. Significa que tengo el lugar equivocado para esconder el problema. Gracias de todos modos, lo resolveré por mi cuenta.Roger,
 

Como siempre aquí ))) Como siempre a la buena gente )))

Cuál es el problema, no puedo entenderlo. Problemas con las variables globales. Lo hago en el código del indicador:

string Global="Global"; //имя глобальной переменной
int param; // параметр глобальной переменной
int init()
  {
  GlobalVariablesDeleteAll(NULL); 
   return(0);
  }
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
int start()
  { //привожу простой пример
  double bar1= iMA(Symbol(),PERIOD_M5,13,0,MODE_SMMA,PRICE_TYPICAL,0);
  double bar2= iOpen(Symbol(),PERIOD_M5,0);
   if (bar1>bar2){ param = 1; GlobalVariableSet(Global,param); }
   if (bar1<bar2){ param = 2; GlobalVariableSet(Global,param); } 

//----
   return(0);
  }

Luego intento obtener el valor de una variable global desde un Asesor Experto con este código

string Global="Global";  
int param;

int start()
  {
  int i= GlobalVariableSet(Global,param);
  Print (i);   // Здесь он мне и выводит всякую лабуду вида : 1279217736


   return(0);
  }
¿Qué estoy haciendo mal? Se suponía que debía obtener 1 o 2 valores de parámetros, pero obtuve ..... ¿Y por qué tengo que volver a escribir el nombre y la variable al principio del código EA? Parece que existen como globales, pero la compilación no funciona sin ellos.
 

¿Puedo abrir dos posiciones de COMPRA/VENTA simultáneamente?

Lo probé - escribí un código simple que abre posiciones de COMPRA y VENTA simultáneamente, conectado al EUR/USD en tiempo real, parece que se abren.

Pero eso era una cuenta demo y un probador de estrategias, ¿qué pasa en tiempo real, le importará a mi empresa de corretaje?

Nunca lo he probado antes, no creo que haya empezado este tipo de experimento.

 
Infinity:...
Necesitas otra función para leer el valor de las variables globales :)))
int i= GlobalVariableGet(Global);
 
Lim1:

¿Puedo abrir dos posiciones de COMPRA/VENTA simultáneamente?

Lo probé - escribí un código simple que abre posiciones de COMPRA y VENTA simultáneamente, conectado al EUR/USD en tiempo real, parece que se abren.

Pero eso era una cuenta demo y un probador de estrategias, ¿qué pasa en tiempo real, le importará a mi empresa de corretaje?

Nunca lo he probado antes, no creo que haya empezado este tipo de experimento.

Abrir... mientras te dejan... :)
En general - pregunte al equipo de apoyo de su DC
 
ToLik_SRGV:
Para leer el valor de las variables globales necesitamos otra función :)))

¡Así de claro, mirar en el libro y no ver, funciona gracias! Siguiendo) con las preguntas. Todo sobre las mismas variables globales. He añadido la siguiente condición al indicador:

string EUR="EURUSD"; //имя глобальной переменной
string GBP="GBPUSD"; //имя глобальной переменной
string valuta="";
int param; // параметр глобальной переменной
int init()
  {
  GlobalVariablesDeleteAll(NULL); 
   return(0);
  }
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
int start()
  { string symb = Symbol();  //Здесь узнаю на какой валюте стоит индикатор
    
    if (symb==EUR) {valuta=EUR;}   // здесь сравнивая ,в переменную занощу имя глобальной переменной
    if (symb==GBP) {valuta=GBP;}   // которую следует использовать
  //привожу простой пример
  double bar1= iMA(Symbol(),PERIOD_M5,13,0,MODE_SMMA,PRICE_TYPICAL,0);
  double bar2= iOpen(Symbol(),PERIOD_M5,0);
   if (bar1>bar2){ param = 1; GlobalVariableSet(valuta,param); }   // а здесь присваиваю параметр глобальной переменной
   if (bar1<bar2){ param = 2; GlobalVariableSet(valuta,param); } 
   return(0);
  }

Quiero definir a qué variable global se le debe asignar un valor, dependiendo de la moneda en la que se base el indicador.

Entiendo que en la variable global GlobalVariableSet(valuta,param), el nombre (valuta) debe contener el valor que se le ha asignado anteriormente

llamar de nuevo a la variable global en el código del Asesor Experto

string valuta="valuta";

int i= GlobalVariableGet(valuta); // pero no obtengo el valor, .... Es decir, obtengo 0. ¿Puede ser que sea imposible cambiar el nombre de la variable global de esta manera?

Creo que lo tengo resuelto - resulta que no puedo llamar a una variable global con este nombre, pero si registro el nombre de cadena GlobalVariableGet("EURUSD") funciona).

 

En primer lugar, de la ayuda

double GlobalVariableGet( nombre de cadena)

Devuelve el valor de la variable global existente o 0 en caso de error. Llame a GetLastError() para obtener información sobre el error.


¿Puede ver el contenido del GV, pero no puede recuperarlo?

Razón de la queja: