Ayuda a la codificación - página 775

 

Por favor, ayúdenme con este asunto.

Abajo está la alerta cruzada MA, pero tengo demasiados mensajes por 1 misma notificación.

Sólo quiero recibir 1 notificación por 2 barras consecutivas, lo que significa que elnúmero de barras es 2 para saltar antes de la siguiente alerta.

Cómo puedo hacer, por favor ayúdeme. Muchas gracias



//+------------------------------------------------------------------+

//|                MA Cross Arrows.mq4                               |

//|                Copyright © 2006  Scorpion@fxfisherman.com        |

//+------------------------------------------------------------------+

#property copyright "FxFisherman.com"

#property link      "http://www.fxfisherman.com"



#property indicator_chart_window

#property indicator_buffers 3

#property indicator_color1 Blue

#property indicator_color2 White

#property indicator_color3 Red



extern int Crossed_Pips = 0;

extern int MA_Period = 21;

extern int MA_Type = MODE_SMA;

extern int Shift_Bars=0;

extern int Bars_Count= 1000;

int state;

  

//---- buffers

double v1[];

double v2[];

double v3[];

  





int start()

 {

  double ma;

  int previous;

  int i;

  int shift;

  bool crossed_up, crossed_down;

  int totalBars = Bars - (MA_Period * 2);

  

  if (Bars_Count > 0 && Bars_Count <= totalBars)

  {

    i = Bars_Count;

  }else if(totalBars <= 0 ) {

    return(0);

  }else{

    i = totalBars;

  }

  

  while(i>=0)

   {

    shift = i + Shift_Bars;

    ma = iMA(Symbol(), Period(), MA_Period, 0, MA_Type, PRICE_CLOSE, shift);

    crossed_up = High[shift] >= (ma + (Crossed_Pips * Point));

    crossed_down = Low[shift] <= (ma - (Crossed_Pips * Point));



    v1[i] = NULL;

    v2[i] = NULL;    

    v3[i] = ma;

    if (crossed_up && previous != 1) {

      v1[i] = ma + (Crossed_Pips * Point);

      previous = 1;

    }else if(crossed_down && previous != 2){

      v2[i] = ma - (Crossed_Pips * Point);

      previous = 2;

    }

 

    i--;

   }

   

   ma = iMA(Symbol(), Period(), MA_Period, 0, MA_Type, PRICE_CLOSE, 0);

   if (Close[0] >= ma + (Crossed_Pips * Point) && state != 1) { 

      state = 1;

      SendNotification(Symbol() + "M"+_Period + " Price crossed UP EMA21.");

   }else if (Close[0] <= ma - (Crossed_Pips * Point) && state != -1) {

      state = -1;

      SendNotification(Symbol() + "M"+_Period + " Price cross DOWN the EMA21.");

   }



   return(0);

 }
[Eliminado]  

Cuando declaro una variable externa obtengo un mensaje de error "extern-unexpected token"

Por favor, ayuda

Archivos adjuntos:
error1.zip  116 kb
 
Ricardo Schuller:

Cuando declaro una variable externa obtengo un mensaje de error "extern-unexpected token"

Por favor, ayuda

no se puede utilizar extern dentro de un método o función.

 

¿cómo se soluciona el error?

 
Mo3tasemovic:

¿como arreglar el error?

" GBPUSD"

 
Keith Watford:

" GBPUSD"

gracias

 
pivboll:

Necesito ayuda para modificar un indicador

Estoy tratando de modificar un indicador MACD para convertirlo en un indicador de empuje de tendencia como se describe en el libro de Buff Dormeier Invertir con análisis de volumen.

Tengo problemas con la variable y no puedo conseguir un resultado decente. Adjunto el volWMA y el MACD de VW que están funcionando

Aquí está la descripción

Indicador de empuje de la tendencia

El indicador de empuje de tendencia (Tti), una versión mejorada del indicador de convergencia/divergencia de medias móviles ponderadas por volumen (VW-Macd), fue introducido en mi libro Investing With Volume Analysis. El Tti utiliza un multiplicador de volumen de forma única para exagerar el impacto del volumen en las medias móviles ponderadas por volumen. Al igual que el VW-Macd, el Tti utiliza medias móviles ponderadas por volumen en lugar de medias móviles exponenciales. Las medias ponderadas por volumen ponderan los precios de cierre de forma proporcional al volumen negociado durante cada periodo de tiempo, por lo que el Tti da mayor énfasis a aquellas tendencias de precios con mayor volumen y menor énfasis a los periodos de tiempo con menor volumen. En el número de febrero de 2001 de Stocks & Commodities, demostré que las medias móviles ponderadas por volumen (medias Buff, o Vwmas) mejoran la capacidad de respuesta y aumentan la fiabilidad de las medias móviles simples.

Al igual que el Macd y el VW-Macd, el Tti calcula un diferencial restando la media corta (rápida) de la media larga (lenta). Este diferencial combinado con un multiplicador de volumen crea el diferencial Buff

Los cálculos son los siguientes

multiplicador de volumen = VolWMA rápido / VolWMA lento

el multiplicador de volumen se lleva a la segunda potencia y se multiplica por el VolWMA rápido para obtener el volumen que mejora la media rápida

el multiplicador de volumen se lleva a la segunda potencia y se multiplica por el VolWMA LENTO para obtener la media lenta de Volume enhance

TTi = mejorar la media rápida - mejorar la media lenta

Gracias por su ayuda

enlace del indicador: https://www.sendspace.com/file/rfy2dv

Hola amigo. ¿Has conseguido solucionar el TTI? ¿Puedes compartirlo aquí o enviármelo por MP? Gracias

 
Hi
Podría por favor ayudarme con este problema
Necesito un EA queenvíe una notificación push cada vez que la diferencia entre el precio de compra y el precio de venta (en ichimoku) sea mayor de 3 pips (30 puntos) en 1 minuto.
 

hai,


por favor, añadir sonido de alerta, mensaje de alerta y la opción de notificación móvil para este indicador.

gracias

Archivos adjuntos:
 

Hola

He encontrado temas como "iCustom devuelve valores erróneos" pero esto es un poco diferente.

Intento crear un indicador que compare el tamaño de barras del mismo tipo (tipo bull/bear) en una secuencia.

y muestra los valores máximos de la comparación en el histograma.

como esto.

valor_máximo

//-----------------------------

con ArrayMaximum el resultado es más rápido. pero hay algo mal en mi código.ejemplo:

iCustom_diff

aquí está el código que compara los valores de iCustom y devuelve los valores erróneos:

#property indicator_separate_window
#property indicator_buffers 4


#property indicator_color1 DeepSkyBlue
#property indicator_width1 10


#property indicator_color2 Red
#property indicator_width2 10



#property indicator_color3 DodgerBlue
#property indicator_width3 4


#property indicator_color4 Crimson
#property indicator_width4 4


#property indicator_level1 0
#property indicator_levelcolor White
#property indicator_levelstyle 0


string LF = "\n";  // use this in custom or utility blocks where you need line feeds
int ObjCount = 0;  // count of all objects created on the chart, allows creation of objects with unique names
int current = 0; // variable points to current bar


double Buffer1[];
double Buffer2[];

double Buffer3[];
double Buffer4[];


double bar_0;
double bar_1;
double bar_2;
double bar_3;
double bar_4;
double bar_5;
double bar_6;
double bar_7;
double bar_8;
double bar_9;
double bar_10;
double bar_11;


//+------------------------------------------------------------------+
int init()
{
    if (false) ObjectsDeleteAll();      // clear the chart

    IndicatorDigits(Digits-5);
    IndicatorBuffers(4);
    
    SetIndexBuffer(0, Buffer1);
    SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID);
    
    SetIndexBuffer(1, Buffer2);
    SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID);
    
    
    
    
    SetIndexBuffer(2, Buffer3);
    SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID);
    
    SetIndexBuffer(3, Buffer4);
    SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID);
    
    
    return(0);
}


//+------------------------------------------------------------------+
int deinit()
{
if (false) ObjectsDeleteAll();

return(0);
}


//+------------------------------------------------------------------+
int start()
{
OnEveryTick1();

return(0);
}
//+------------------------------------------------------------------+
void OnEveryTick1()
{
    
    int i;
    int counted_bars = IndicatorCounted();
    if(counted_bars < 0) return(-1);
    if(counted_bars > 0) counted_bars--;
    i = Bars - counted_bars - 1;
    // main calculation loop
    while (i >= 0)
    
{
current = i;
        
//current  >0
//current+1=0
TechnicalAnalysis00();

//current  >0
//current+1>0
//current+2=0
TechnicalAnalysis01();

//current  >0
//current+1>0
//current+2>0
//current+3=0
TechnicalAnalysis02();


i--;
}
}

//-----------------------------------------------------
//---------bar_0-------------------------------
//-----------------------------------------------------
void TechnicalAnalysis00()
{

bar_0 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current);
bar_1 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+1);

if
(
bar_0 > 0
&&
bar_1 == 0
)

{
Histogram00();
}

}

void Histogram00()
{
Buffer1[current]= bar_0;
}
//-----------------------------------------------------
//---------bar_1-------------------------------
//-----------------------------------------------------
void TechnicalAnalysis01()
{

bar_0 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current);
bar_1 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+1);
bar_2 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+2);

if
(
bar_0 > 0
&&
bar_1 > 0
&&
bar_2 == 0
)

{
Histogram01();
}

}

void Histogram01()
{
int x_up_01[] = {0,0};

x_up_01[0] = bar_0;
x_up_01[1] = bar_1;

int maxValue_01 = ArrayMaximum(x_up_01);

Buffer1[current]= x_up_01[maxValue_01];
}
//-----------------------------------------------------
//---------bar_2-------------------------------
//-----------------------------------------------------
void TechnicalAnalysis02()
{

bar_0 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current);
bar_1 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+1);
bar_2 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+2);
bar_3 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+3);

if
(
bar_0 > 0
&&
bar_1 > 0
&&
bar_2 > 0
&&
bar_3 == 0
)

{
Histogram02();
}

}

void Histogram02()
{
int x_up_02[] = {0,0,0};

x_up_02[0] = bar_0;
x_up_02[1] = bar_1;
x_up_02[2] = bar_2;

int maxValue_02 = ArrayMaximum(x_up_02);

Buffer1[current]= x_up_02[maxValue_02];
}
//-----------------------------------------------------
//---------bar_3--------and so on-----------------------
//-----------------------------------------------------

¿dónde está mi error? ¿cómo puedo arreglarlo?
Intenté llamar a iCustom con todos los parámetros externos - el mismo resultado erróneo. Probé con iCustom sin parámetro externo - mismo resultado erróneo.

gracias por la ayuda

código principal (primer histograma) y segundo código (segundo histograma) basado en él :