[Archivo!] Escribir un asesor de forma gratuita - página 11

 
skylord писал(а) >>

Hola.

Acabo de empezar a aprender MQL, estoy tratando de escribir un EA...

Estoy tratando de escribir un EA basado en el indicador sidus v.2, quiero que abra una posición en la dirección que he especificado por el EA, sólo cuando nazca una nueva barra, es decir, en el primer tick debe comprobar si hay una señal en la barra anterior, y qué tipo de señal. Adjuntar archivo de indicadores.

No tengo suerte en la lectura de esta señal((.

Ayuda, o al menos dime cómo hacerlo ...

Un asesor experto en el indicador Sidus

¡tal vez esto le ayude o la búsqueda le ayude!

¡o segundo viento!

 

Gracias a vvavva. Tengo una buena idea, pero salta y hace muchas señales de izquierda, pero no es lo que necesito (

¿Cómo puedo preguntar a alguien cómo solicitar el estado del buffer del indicador en la barra anterior desde el EA?

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}
else if (sigCurrent==2 && sigPrevious==1)
{
ExtMapBuffer3[i-1] = Low[i-1]-5*Point;
//ExtMapBuffer4[i] = Bid;
entry=true;
entry_point=Bid;

}
Un EA necesita una condición de coincidencia como ésta

double Up;
double Down;
int res;

Up=iCustom(NULL, 0, "sidus_v.2", 3, 1);
Down=iCustom(NULL,0, "sidus_v.2",2,1);
//---- condiciones de venta
if(Down==Low)
{
res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",MAGICMA,0,Red);
return;
}
//---- condiciones de compra
if(Up==High)
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,",MAGICMA,0,Blue);
return;
}

¡¡Pero está mal!!

Por favor, aconseje cómo tratar este caso...

 

Hola.

Estoy operando tranquilamente, estoy usando 4 induks, líneas de soporte de resistencia, tendencias, bla, bla, bla... Se me han roto los ojos en la pantalla, podéis ayudarme a insertar la señal sonora en las flechas (compra, venta) y las mismas flechas en el historial con una línea de puntos (recortada por la misma)

Archivos adjuntos:
zigandzag.mq4  16 kb
 
skylord писал(а) >>

Hola.

Acabo de empezar a aprender MQL, estoy tratando de escribir un EA...

Estoy tratando de escribir un EA basado en el indicador sidus v.2, quiero que abra una posición en la dirección que he especificado por el EA, sólo cuando nace una nueva barra, es decir, en el primer tick debe comprobar si la señal está en la barra anterior, y qué tipo de orden - con una parada y una toma. Adjuntar archivo de indicadores.

No he tenido suerte en encontrar esta señal((.

Ayuda, o al menos dime cómo hacerlo ...

Hola, acabo de ejecutar el código con mis ojos, lo siento soy un terrible cojo, podría estar equivocado, por supuesto, pero ¿el indicador sobregira? Intentemos pensar con lógica

for(int i=0; i<limit; i++)
   {

contar desde la barra cero hasta todas las barras del historial, aumentar el contador.

ExtMapBuffer1[ i]=iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i);
     ExtMapBuffer2[ i]=iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i);
     rsi_sig = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);

todo está claro aquí.

pipdiffCurrent=(ExtMapBuffer1[i]-ExtMapBuffer2[i]);

que se joda el macdak.

if ( pipdiffCurrent>0 && rsi_sig>50) 
     {
       sigCurrent = 1;  //Up
     }
     else if ( pipdiffCurrent<0 && rsi_sig<50)
     {
       sigCurrent = 2;  //Down

Si macdac es mayor que cero y RSI es mayor que 50, el sig es 1, y si es menor, es 2

Hasta ahora, todo va bien.

if (sigCurrent==1 && sigPrevious==2)
     {

aquí no entiendo... si tanto el macdak es positivo y el RSI es mayor de 50 y el macdak es negativo y el RSI es menor de 50... ya que hay una condición en el código siguiente

sigPrevious=sigCurrent;

entonces podemos equipararlos...

y robar el futuro es una mala idea...

ExtMapBuffer3[i-1]

No, sustituyámoslo por éste, o más bien modifiquémoslo por completo, pues ya conocemos la lógica:

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1
//----
extern int       FastEMA=14;
extern int       SlowEMA=21;
extern int       RSIPeriod=17;
//----
double BuyBuffer[], SellBuffer[];
int pre_signal = 0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
     
//----
      SetIndexBuffer(0, BuyBuffer);
      SetIndexLabel(0, "Buy");
      SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 1);
      SetIndexArrow(0, 241);
//----
      SetIndexBuffer(1, SellBuffer);
      SetIndexLabel(1, "Sell");
      SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 1);
      SetIndexArrow(1, 242);
//----
      return(0);
  }

int deinit()
  {
      
  }

int start()
  {
  

      int counted_bars = IndicatorCounted();

      
   int limit = Bars - 17;

   if( counted_bars > 17) 
     { 
       limit = Bars - counted_bars; 
     }

      for(int i = limit; i >= 0; i --)
        {
             BuyBuffer[ i] = EMPTY_VALUE;
             SellBuffer[ i] = EMPTY_VALUE;      
             
                
                 double a = iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i+1);
                 double s = iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i+1);
                 
                
                
                 double a1 = iMA(NULL,0, FastEMA,0,MODE_EMA,PRICE_CLOSE, i);
                 double s1 = iMA(NULL,0, SlowEMA,0,MODE_EMA,PRICE_CLOSE, i);
                 double d1 = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i)-50;
             //----
           if( a< s && a1> s1 && d1>0)
               {
                    BuyBuffer[ i] = Low[ i] - iATR(NULL, 0, 14, i);
                    
               }
             if( a> s && a1< s1 && d1<0)
               {
                    SellBuffer[ i] = High[ i] + iATR(NULL, 0, 14, i);         
                    
               }
        
      
        }
      return(0);
  }

Ahora mira, es una imagen triste. Compárala:

Aunque puede que me equivoque por supuesto y el indicador no se redibuje, pero perdonadme, y tal vez se pueda utilizar el precio de apertura (sobre todo en el RSI), pero no el de cierre, para que la señal aparezca en la barra, donde debería =(

 

Gracias por la preocupación vtoroe_dyxanie )))) Yo no escribí el indicador, no lo redibuja según mis observaciones. Lo uso desde el primer tick de la siguiente barra cuando ya se ha bloqueado. Por eso necesito saber qué había en la barra anterior en el primer tick. ¿Y por qué roba el futuro? Me parece que en un determinado tick, si hay esa coincidencia, asigna uno a sigCurrent y al final de la variable sigPrevious asigna el mismo sigCurrent:

sigPrevious=sigCurrent;

y luego en el siguiente tick si sigCurrent ya es 2 y la variable sigPrevious naturalmente llena el buffer con 1:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}

Y en cuanto a esto:

ExtMapBuffer3[i-1]

Yo tampoco lo entiendo muy bien...

Pero parece que funciona bien, ¡las flechas se dibujan en la barra en la que aparece la señal!

Pero cuando eliminé el -1, aparecieron muchas sorpresas(



 
skylord >> :

Gracias por la preocupación vtoroe_dyxanie )))) Yo no escribí el indicador, no lo redibuja según mis observaciones. Lo uso desde el primer tick de la siguiente barra cuando ya se ha bloqueado. Por eso necesito saber qué había en la barra anterior en el primer tick. ¿Y por qué roba el futuro? Me parece que en un determinado tick, si hay esa coincidencia, asigna uno a sigCurrent y al final de la variable sigPrevious asigna el mismo sigCurrent:

sigPrevious=sigCurrent;

y luego en el siguiente tick si sigCurrent ya es 2 y la variable sigPrevious naturalmente llena el buffer con 1:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}

Y en cuanto a esto:

ExtMapBuffer3[i-1]

Yo tampoco lo entiendo muy bien...

Pero parece que funciona bien, ¡las flechas se dibujan en la barra en la que aparece la señal!

Pero cuando eliminé el -1, hubo muchas sorpresas(
.



Pero tiene un efecto secundario más. A veces, cuando se cumplen las condiciones, da una señal pero no dibuja flechas. Pero cuando lo pongo de nuevo en un gráfico todas las flechas vuelven a su sitio. ¿Hay alguna forma de hacer que vuelva a compilar en un gráfico o de actualizar sus búferes de nuevo?

 
skylord писал(а) >>

¿Por qué roba el futuro? Parece que asigna uno a sigCurrent en un determinado tick si hay tal coincidencia, y asigna el mismo sigCurrent a la variable sigPrevious al final:

sigPrevious=sigCurrent;

y luego en el siguiente tick si sigCurrent ya es 2 y la variable sigPrevious naturalmente llena el buffer con 1:

if (sigCurrent==1 && sigPrevious==2)
{
ExtMapBuffer4[i-1] = High[i-1]-5*Point;
//ExtMapBuffer3[i] = Ask;
entry=true;
entry_point=Ask;
}



Tu verdadero, desatento yo...

Sobre: "Lo uso desde el primer tick de la siguiente barra cuando ya está fijado. Por eso necesito saber en el primer tick lo que había en la barra anterior. "Y realmente me pregunto si no puedes usar

doble iCustom( .... int turno)

la ayuda omnisciente dice que

turno - Índice del valor obtenido del búfer del indicador (desplazamiento relativo a la barra actual en el número de períodos especificado hacia atrás).

Me pregunto si se puede escribir así (yo mismo me lo pregunté)

for (i=0; i<limit;i++){

if (iCustom(NULL, 0, "sidus_v.2", 3, i+1)<0 && iCustom(NULL, 0, "sidus_v.2", 3, i)>0)

....

porque ooooopsie Los usuarios del foro de Wise difícilmente condescenderán con dos nerds, dejados para mejorar mis habilidades por su cuenta, ya que puede ser útil.

 
vtoroe_dyxanie писал(а) >>

Es cierto, soy desatento...

Sobre: "Lo uso desde el primer tick de la siguiente barra cuando ya se ha bloqueado. Por eso necesito saber en el primer tick lo que había en la barra anterior. "Y realmente me pregunto si no puedes usar

doble iCustom( .... int turno)

la ayuda omnisciente dice que

turno - Índice del valor obtenido del búfer del indicador (desplazamiento relativo a la barra actual en el número de períodos especificado hacia atrás).

Me pregunto si se puede escribir así (yo mismo me lo pregunté)

for (i=0; i<limit;i++){

if (iCustom(NULL, 0, "sidus_v.2", 3, 1)<0 && iCustom(NULL, 0, "sidus_v.2", 3, 0)>0)

....

como oooooovery Los participantes en el foro de Wise son poco propensos a condescender con los dos nubs, dejados para mejorar sus habilidades por su cuenta, ya que puede ser útil.

No se puede =(

Mierda, ¿entonces cómo resolver este problema? Bueno, ya que has sacado el tema: https://www.mql5.com/ru/forum/117268 estaremos atentos =)

 
vtoroe_dyxanie писал(а) >>

No se puede hacer =(

Hombre, ¿entonces cómo se resuelve esta cuestión? Bueno, como ya has iniciado un hilo: 'Cómo averiguar la dirección desde un EA ' estaremos atentos =)

>> (¡voy a hacer un seguimiento de la empresa!)

 
vtoroe_dyxanie писал(а) >>

No se puede hacer =(

Hombre, ¿entonces cómo se resuelve esta cuestión? Bueno, como ya has iniciado un hilo: 'Cómo saber la dirección desde un EA ' estaremos atentos =)

>> ¡eh! ¿recuerdas que te pedí ayuda? si no es difícil, ¿puedes decirme más? lo que has hecho por mí es lo que he escrito ahora (quería que el indicador mostrara los plazos más cercanos en una ventana) esto es lo que????

Archivos adjuntos:
test1.mq4  6 kb
Razón de la queja: