Indicador de tendencia ascendente en profundidad - página 4

 

Indicador de reloj desde este enlace de CodeBase.

Por cierto - La hora local para este indicador es la hora del ordenador (la hora de mi PC) que no es mi hora local :)

Por lo tanto, este indicador está mostrando: Hora GMT, hora del broker y hora de su pc

 
newdigital:

Indicador de reloj desde este enlace de CodeBase.

Por cierto - La hora local para este indicador es la hora del ordenador (la hora de mi PC) que no es mi hora local :)

Por lo tanto, este indicador está mostrando: Hora GMT, hora del broker y hora de su pc

¿Su PC no está configurado a su hora local? ¿Por qué, para el comercio?
 
No para comerciar. Simplemente me olvidé de ponerlo :) Mi hora local es GMT + 3(el horario de verano fue desactivado para todo el país, pero de todos modos - Nunca he cambiado mi reloj de PC en DST)
 

Bien de vuelta a Asctrend . Como ya se ha dicho Asctrend se basa en el indicador WPR.

Asctrend tiene solo un parámetro de entrada: Riesgo. Este parámetro se utiliza para definir el periodo de WPR y los niveles de venta/compra. El valor "histórico" por defecto para el riesgo es 3. (En Asctrend publicado es 4, no sé por qué).

Asctrend WPR Period = 3 + RISK * 2 = 9 by default.

Asctrend WPR buy level > - (33 - RISK)

            sell level < - (67 + RISK)


También hay un manejo de excepciones para el gap y el pico. Y filtrado interno de la señal si ya existe una señal de la misma dirección.


 

ASCtrend ( poner la alarma en él ).

hola; puede usted por favor ayudar.

Quiero establecer la alarma en el indicador "ASCtrend"; (cuando aparece la señal en la vela anterior, con el inicio de la nueva vela enviar la alarma)

añadir líneas altas iluminadas;

//+------------------------------------------------------------------+
//|                                                     ASCtrend.mq5 |
//|                             Copyright © 2011,   Nikolay Kositsin | 
//|                              Khabarovsk,   farria@mail.redcom.ru | 
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Nikolay Kositsin"
#property link "farria@mail.redcom.ru"
#property description "ASCtrend"
//---- indicator version
#property version   "1.00"
//---- drawing the indicator in the main window
#property indicator_chart_window 
//---- two buffers are used for calculation and drawing the indicator
#property indicator_buffers 2
//---- only two plots are used
#property indicator_plots   2
//+----------------------------------------------+
//|  Bearish indicator drawing parameters        |
//+----------------------------------------------+
//---- drawing the indicator 1 as a symbol
#property indicator_type1   DRAW_ARROW
//---- magenta color is used as the color of the bearish indicator line
#property indicator_color1  Magenta
//---- thickness of the indicator 1 line is equal to 4
#property indicator_width1  4
//---- bullish indicator label display
#property indicator_label1  "ASCtrend Sell"
//+----------------------------------------------+
//|  Bullish indicator drawing parameters        |
//+----------------------------------------------+
//---- drawing the indicator 2 as a symbol
#property indicator_type2   DRAW_ARROW
//---- blue color is used as the color of a bullish candlestick
#property indicator_color2  Blue
//---- thickness of the indicator 2 line is equal to 4
#property indicator_width2  4
//---- bearish indicator label display
#property indicator_label2 "ASCtrend Buy"

#define RESET 0 // The constant for getting the command for the indicator recalculation back to the terminal
//+----------------------------------------------+
//|  Indicator input parameters                  |
//+----------------------------------------------+
input int RISK=4;
//+----------------------------------------------+

//---- declaration of dynamic arrays that further 
// will be used as indicator buffers
double SellBuffer[];
double BuyBuffer[];
//----
int  StartBars,x1,x2,value10,value11,WPR_Handle[3];
//+------------------------------------------------------------------+
extern bool SoundON=true; //Alert
extern bool EmailON=true;//false; //Email
extern bool PushON=true; //Allow to send a signal to the mobile
input uint NumberofAlerts=10;
uint counter=0;
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//---- initialization of global variables   
   x1=67+RISK;
   x2=33-RISK;
   value10=2;
   value11=value10;
   StartBars=int(MathMax(3+RISK*2,4)+1);

//---- getting handle of the iWPR 1 indicator
   WPR_Handle[0]=iWPR(NULL,0,3);
   if(WPR_Handle[0]==INVALID_HANDLE)Print(" Failed to get handle of the iWPR 1 indicator");
//---- getting handle of the iWPR 2 indicator
   WPR_Handle[1]=iWPR(NULL,0,4);
   if(WPR_Handle[1]==INVALID_HANDLE)Print(" Failed to get handle of the iWPR 2 indicator");
//---- getting handle of the iWPR 3 indicator
   WPR_Handle[2]=iWPR(NULL,0,3+RISK*2);
   if(WPR_Handle[2]==INVALID_HANDLE)Print(" Failed to get handle of the iWPR 3 indicator");

//---- set dynamic array as an indicator buffer
   SetIndexBuffer(0,SellBuffer,INDICATOR_DATA);
//---- shifting the start of drawing the indicator 1
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,StartBars);
//---- create a label to display in DataWindow
   PlotIndexSetString(0,PLOT_LABEL,"ASCtrend Sell");
//---- indicator symbol
   PlotIndexSetInteger(0,PLOT_ARROW,108);
//---- indexing the elements in the buffer as timeseries
   ArraySetAsSeries(SellBuffer,true);
//---- setting values of the indicator that won't be visible on a chart
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);

//---- set dynamic array as an indicator buffer
   SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA);
//---- shifting the start of drawing the indicator 2
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,StartBars);
//---- create a label to display in DataWindow
   PlotIndexSetString(1,PLOT_LABEL,"ASCtrend Buy");
//---- indicator symbol
   PlotIndexSetInteger(1,PLOT_ARROW,108);
//---- indexing the elements in the buffer as timeseries
   ArraySetAsSeries(BuyBuffer,true);
//---- setting values of the indicator that won't be visible on a chart
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);

//---- Setting the format of accuracy of displaying the indicator
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- name for the data window and the label for tooltips 
   string short_name="ASCtrend";
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//----   
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---- checking the number of bars to be enough for the calculation
   if(BarsCalculated(WPR_Handle[0])<rates_total
      || BarsCalculated(WPR_Handle[1])<rates_total
      || BarsCalculated(WPR_Handle[2])<rates_total
      || rates_total<StartBars)
      return(RESET);

//---- declarations of local variables 
   int limit,bar,count,iii;
   double value2,value3,Vel=0,WPR[];
   double TrueCount,Range,AvgRange,MRO1,MRO2;

//---- calculations of the necessary amount of data to be copied and
//the limit starting index for loop of bars recalculation
   if(prev_calculated>rates_total || prev_calculated<=0)// checking for the first start of the indicator calculation
      limit=rates_total-StartBars; // starting index for calculation of all bars
   else limit=rates_total-prev_calculated; // starting index for calculation of new bars

//---- indexing elements in arrays as timeseries  
   ArraySetAsSeries(WPR,true);
   ArraySetAsSeries(open,true);
   ArraySetAsSeries(high,true);
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(close,true);

//---- main indicator calculation loop
   for(bar=limit; bar>=0 && !IsStopped(); bar--)
     {
      Range=0.0;
      AvgRange=0.0;
      for(count=bar; count<=bar+9; count++) AvgRange=AvgRange+MathAbs(high[count]-low[count]);

      Range=AvgRange/10;
      count=bar;
      TrueCount=0;

      while(count<bar+9 && TrueCount<1)
        {
         if(MathAbs(open[count]-close[count+1])>=Range*2.0) TrueCount++;
         count++;
        }

      if(TrueCount>=1) MRO1=count;
      else             MRO1=-1;

      count=bar;
      TrueCount=0;

      while(count<bar+6 && TrueCount<1)
        {
         if(MathAbs(close[count+3]-close[count])>=Range*4.6) TrueCount++;
         count++;
        }

      if(TrueCount>=1) MRO2=count;
      else             MRO2=-1;

      if(MRO1>-1) {value11=0;} else {value11=value10;}
      if(MRO2>-1) {value11=1;} else {value11=value10;}

      if(CopyBuffer(WPR_Handle[value11],0,bar,1,WPR)<=0) return(RESET);

      value2=100-MathAbs(WPR[0]); // PercentR(value11=9)

      SellBuffer[bar]=0;
      BuyBuffer[bar]=0;

      value3=0;

      if(value2<x2)
        {
         iii=1;
         while(bar+iii<rates_total)
           {
            if(CopyBuffer(WPR_Handle[value11],0,bar+iii,1,WPR)<=0) return(RESET);
            Vel=100-MathAbs(WPR[0]);
            if(Vel>=x2 && Vel<=x1) iii++;
            else break;
           }

         if(Vel>x1)
           {
            value3=high[bar]+Range*0.5;
            SellBuffer[bar]=value3;
           }
        }
      if(value2>x1)
        {
         iii=1;
         while(bar+iii<rates_total)
           {
            if(CopyBuffer(WPR_Handle[value11],0,bar+iii,1,WPR)<=0) return(RESET);
            Vel=100-MathAbs(WPR[0]);
            if(Vel>=x2 && Vel<=x1) iii++;
            else break;
           }

         if(Vel<x2)
           {
            value3=low[bar]-Range*0.5;
            BuyBuffer[bar]=value3;
           }
        }
     }
//----------------------------------------------------------------------//    

     Comment("        BuyBuffer[rates_total-4]=",BuyBuffer[rates_total-4],"   DateTime[rates_total-4]=",time[rates_total-4]
      ,"\n        BuyBuffer[rates_total-3]=",BuyBuffer[rates_total-3],"   DateTime[rates_total-3]=",time[rates_total-3]
      ,"\n        BuyBuffer[rates_total-2]=",BuyBuffer[rates_total-2],"   DateTime[rates_total-2]=",time[rates_total-2]
      ,"\n        BuyBuffer[rates_total-1]=",BuyBuffer[rates_total-1],"   DateTime[rates_total-1]=",time[rates_total-1]
      ,"\n        SellBuffer[rates_total-4]=",SellBuffer[rates_total-4],"   DateTime[rates_total-4]=",time[rates_total-4]
      ,"\n        SellBuffer[rates_total-3]=",SellBuffer[rates_total-3],"   DateTime[rates_total-3]=",time[rates_total-3]
      ,"\n        SellBuffer[rates_total-2]=",SellBuffer[rates_total-2],"   DateTime[rates_total-2]=",time[rates_total-2]      
      ,"\n        SellBuffer[rates_total-1]=",SellBuffer[rates_total-1],"   DateTime[rates_total-1]=",time[rates_total-1]
      ,"\n  rates_total=",rates_total
      ,"\n  prev_calculated=",prev_calculated
     );
 
//-----------------------------------   
//----------------------------------------------------------------------//

   MqlDateTime tm;
   double Ask,Bid;
   string text,sAsk,sBid,sPeriod;      
   TimeToStruct(TimeCurrent(),tm);
   text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
   Ask=close[0];
   Bid=close[0]+spread[0];
   sAsk=DoubleToString(Ask,_Digits);
   sBid=DoubleToString(Bid,_Digits);
   sPeriod=EnumToString(ChartPeriod());    
   if(rates_total!=prev_calculated) counter=0;  
     
   if( BuyBuffer[rates_total-2]!=0 ) 
     {
      if(counter<NumberofAlerts) 
        {
         counter++; 
         if(SoundON) 
           {
            Alert("ASC_TREND BUY signal at Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
            PlaySound("matrixrevolution.wav");
            //  PlaySound("SysAlert1.wav");
            //   PlaySound("samsam.wav");
            //    PlaySound("Alert_Play.wav");
            }
         if(EmailON) SendMail("ASC_TREND : BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         if(PushON) SendNotification("ASC_TREND: BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
        }
     } 
      
   if(SellBuffer[rates_total-2]!=0 ) 
     { 
      if(counter<NumberofAlerts)
        {
         counter++;
         if(SoundON)
           {
            Alert("ASC_TREND SELL signal at Ask=",sAsk,"\n Bid=",sBid,"\n Date=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
            PlaySound("matrixrevolution.wav");
            //  PlaySound("SysAlert1.wav");
            //  PlaySound("samsam.wav");
            //    PlaySound("Alert_Play.wav");
           }
         if(EmailON) SendMail("ASC_TREND","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         if(PushON) SendNotification("ASC_TREND: SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
        }
     }
      
//----------------------------------------------------------------------//          
//----     
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+     
void OnDeinit(const int reason)
  {
   Comment("");
   ChartRedraw();
  }
//********************************************************************************************************************  
//+------------------------------------------------------------------+  

hay un problema y no funciona.

Gracias.
Archivos adjuntos:
 
TIMisthebest:

ASCtrend ( poner la alarma en él ).

hola; puede usted por favor ayuda.

Quiero establecer una alarma en el indicador "ASCtrend"; (cuando aparece la señal en la vela anterior, con el inicio de la nueva vela enviar la alarma)

añadir lineas altas iluminadas;

hay un problema y no funciona.

gracias.

¿Por qué usaste esto?

   if( BuyBuffer[rates_total-2]!=0 ) 

Coloque su código en una función :

SendAlert(direction) {...} o similar

y llama a esta función cuando se detecta una señal :

         if(Vel>x1)
           {
            value3=high[bar]+Range*0.5;
            SellBuffer[bar]=value3;   
            SendAlert("sell");
           }

...

         if(Vel<x2)
           {
            value3=low[bar]-Range*0.5;
            BuyBuffer[bar]=value3;
            SendAlert("buy");
           }

 
angevoyageur:

¿Por qué usaste esto?

Coloque su código en una función :

SendAlert(direction) {...} o similar

y llame a esta función cuando se detecte una señal :

Todo bien.

gracias .

pero en ese caso tengo la alerta en la misma vela y puede ser en el final de la vela (tiempo de esa vela) ; no hay señal de " ASCtrend ".

me refiero a que la alerta se envía si al final de la vela anterior había una señal.

en "ASCtrend_alarm_2 " y con el tester se puede ver el valor de { value3 & BuyBuffer & SellBuffer }

y de 2013.04.10 a 2013.04.12 se puede ver lo que quiero decir .

por favor dime si estoy equivocado.

Archivos adjuntos:
 
TIMisthebest:

Todo bien.

Gracias.

pero en ese caso tengo alerta en la misma vela y puede ser en el final de la vela (tiempo de esa vela); no hay señal de "ASCtrend".

quiero decir: la alerta se envía si al final de la vela anterior había una señal.

por favor dime si estoy equivocado.

Tiene razón. Tienes que añadir una sentencia if, algo así como if(bar==1)
 
angevoyageur:
Tienes razón. Tienes que añadir una sentencia if, algo así como if(bar==1)

en la imagen de abajo:


no entiendo por qué el valor de "BuyBuffer" o "SellBuffer" es siempre igual a cero.

en el archivo mql tenemos:

          if(Vel>x1)
           {
            value3=high[bar]+Range*0.5;
            SellBuffer[bar]=value3;
           }

...
...
...
        if(Vel<x2)
           {
            value3=low[bar]-Range*0.5;
            BuyBuffer[bar]=value3;
           }

podemos comprobarlo en el probador.(archivo adjunto)

¿por qué siempre es igual a cero cuando "valor3" tiene otro valor?

Archivos adjuntos:
 
TIMisthebest:

en la imagen de abajo:


no entiendo por qué el valor de "BuyBuffer" o "SellBuffer" es siempre igual a cero.

en el archivo mql tenemos:

podemos comprobarlo en el tester.(archivo adjunto)

¿por qué esto es siempre igual a cero cuando "valor3" tiene otro valor?

Ya te dije que :

  if( BuyBuffer[rates_total-2]!=0 ) 

no es bueno.

¿Sabes lo que significa lo siguiente?

//---- indexing the elements in the buffer as timeseries
   ArraySetAsSeries(BuyBuffer,true);
Razón de la queja: