Ajuda na codificação - página 675

 
traderduke:
Você usaria 1 2ma para a tendência geral e outro para a reentrada a curto prazo de altos e baixos.
Isso significa que deveria haver dois indicadores de canal volty?
 

Olá codificadores.

Preciso de uma ajuda nesta pergunta: como mudar horizontalmente os sinais de um simples indicador ma cruzado?

Eu tentei isto, mas ele muda somente à esquerda, eu preciso até mesmo à direita.

Obrigado

//+------------------------------------------------------------------+
//|                                                   ma crosses.mq4 |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 4
#property  indicator_color1  Blue
#property  indicator_color2  Red
#property  indicator_color3  LimeGreen
#property  indicator_color4  Magenta

//
//
//
//
//

extern int    FastMa             = 13;
extern int    FastMaShift        = 0;
extern int    FastMAMethod       = MODE_EMA;
extern int    FastMAPrice        = PRICE_CLOSE;
extern int    SlowMa             = 68;
extern int    SlowMaShift        = 0;
extern int    SlowMAMethod       = MODE_SMA;
extern int    SlowMAPrice        = PRICE_CLOSE;
extern bool   ShowMaLines        = true;

extern string note               = "turn on Alert = true; turn off = false";
extern bool   alertsOn           = true;
extern bool   alertsOnCurrent    = true;
extern bool   alertsMessage      = true;
extern bool   alertsSound        = true;
extern bool   alertsEmail        = false;
extern string soundfile          = "alert2.wav";

extern string note7              = "Arrow Type";
extern string note8              = "0=default,1=Thick,2=Thin,3=Hollow";
extern string note9              = "4=Round,5=Fractal,6=Diagonal Thin";
extern string note10             = "7=Diagonal Thick,8=Diagonal Hollow";
extern string note11             = "9=Thumb,10=Finger";
extern int    ArrowType          = 2;
extern int    arrowthickness     = 2;
extern double arrowsDisplacement = 2.0;
extern int    arrowHshift        = 0;

//
//
//
//
//

double CrossUp[];
double CrossDn[];
double fastMA[];
double slowMA[];
double trend[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
{
   IndicatorBuffers(5);   
   
   if (ArrowType == 0) {
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0,DRAW_ARROW,0,arrowthickness); SetIndexArrow(0,119);
   SetIndexBuffer(1, CrossDn );  SetIndexStyle(1,DRAW_ARROW,0,arrowthickness); SetIndexArrow(1,119);
   }
   if (ArrowType == 1) {
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 233);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 234);
   }
   else if (ArrowType == 2) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 225);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 226);
   }
   else if (ArrowType == 3) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 241);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 242);
   }
   else if (ArrowType == 4) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 221);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 222);
   }
   else if (ArrowType == 5) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 217);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 218);
   }
   else if (ArrowType == 6) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 228);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 230);
   }
   else if (ArrowType == 7) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 236);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 238);
   }
   else if (ArrowType == 8) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 246);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 248);
   }
   else if (ArrowType == 9) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 67);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 68);
   }
   else if (ArrowType == 10) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 71);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 72);
   }
   SetIndexBuffer(2, fastMA);
   SetIndexBuffer(3, slowMA);
   SetIndexBuffer(4, trend);
   
   if (ShowMaLines)
   {
     SetIndexStyle(2,DRAW_LINE); 
     SetIndexStyle(3,DRAW_LINE); 
   }
   else
   {
     SetIndexStyle(2,DRAW_NONE);
     SetIndexStyle(3,DRAW_NONE);
   }       
   
return(0);
}

//
//
//
//
//

int deinit() {  return(0); }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//

int start() {
   int counted_bars=IndicatorCounted();
   int i,limit;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
         limit = MathMin(Bars-counted_bars,Bars-1);
         
   //
   //
   //
   //
   //
            
   for(i=limit; i>=0; i--)
   {
      fastMA[i]  = iMA(NULL,0,FastMa,FastMaShift,FastMAMethod,FastMAPrice,i);
      slowMA[i]  = iMA(NULL,0,SlowMa,SlowMaShift,SlowMAMethod,SlowMAPrice,i);
      double gap = iATR(NULL,0,20,i); 
      
      trend[i] = trend[i+1];
         if (fastMA[i]>slowMA[i]) trend[i] = 1;
         if (fastMA[i]<slowMA[i]) trend[i] =-1;

         //
         //
         //
         //
         //
      
         CrossUp[i] = EMPTY_VALUE;
         CrossDn[i] = EMPTY_VALUE;
         if (trend[i]!= trend[i+1])
         if (trend[i] == 1)
               CrossUp[i+arrowHshift] = Low[i]  - arrowsDisplacement * gap;
         else  CrossDn[i+arrowHshift] = High[i] + arrowsDisplacement * gap; 
         }
         
         if (alertsOn)
         {
         if (alertsOnCurrent)
              int whichBar = 0;
         else     whichBar = 1;

         //
         //
         //
         //
         //
         
         if (trend[whichBar] != trend[whichBar+1])
         if (trend[whichBar] == 1)
               doAlert("uptrend");
         else  doAlert("downtrend");       
   }
   
   return(0);
}
//+------------------------------------------------------------------+


void doAlert(string doWhat)
{
   static string   previousAlert="nothing";
   static datetime previousTime;
   string message;
   
      if (previousAlert != doWhat || previousTime != Time[0]) {
          previousAlert  = doWhat;
          previousTime   = Time[0];

          //
          //
          //
          //
          //

          message =  StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," ma cross ",doWhat);
             if (alertsMessage) Alert(message);
             if (alertsEmail)   SendMail(StringConcatenate(Symbol()," ma cross "),message);
             if (alertsSound)   PlaySound(soundfile);
      }
}

 
thefxpros:

Olá codificadores.

Preciso de uma ajuda nesta pergunta: como mudar horizontalmente os sinais de um simples indicador ma cruzado?

Eu tentei isto, mas ele muda somente à esquerda, eu preciso até mesmo à direita.

Obrigado

Você tentou deslocar o buffer ao invés de deslocar o valor único

Algo como :

   SetIndexShift(0,arrowHshift);
   SetIndexShift(1,arrowHshift);

E depois reverter estas linhas para não ter nenhum turno

//
// instead of 
//


         if (trend[i] == 1)
               CrossUp[i+arrowHshift] = Low[i]  - arrowsDisplacement * gap;
         else  CrossDn[i+arrowHshift] = High[i] + arrowsDisplacement * gap; 

//
// it has to be
//

         if (trend[i] == 1)
               CrossUp[i] = Low[i]  - arrowsDisplacement * gap;
         else  CrossDn[i] = High[i] + arrowsDisplacement * gap; 
 
thefxpros:

Olá codificadores.

Preciso de uma ajuda nesta pergunta: como mudar horizontalmente os sinais de um simples indicador ma cruzado?

Eu tentei isto, mas ele muda somente à esquerda, eu preciso até mesmo à direita.

Obrigado

PS: para deslocar os valores agora você tem que usar + valores para deslocar as setas para a direita e - valores para deslocar os valores para a esquerda (anexando o código de teste e funciona bem para qualquer caso de deslocamento das setas - esquerda ou direita)

Arquivos anexados:
_test.mq4  8 kb
 
mladen:
Isso significa que deveria haver dois indicadores de canal volty?

mladen

Desculpe por não responder mais cedo, eu esperava voltar com uma solução para a questão do indicador, mas isso não aconteceu.

Sim, está correto. Desculpe pelo mal-entendido. Eu estava respondendo a Steven sobre o indicador 2MA. Não pude usar o indicador existente tanto para a entrada quanto para a reentrada como as ferramentas MR Tools fizeram para o indicador PrCh, embora meu EA nunca conseguisse corrigir a reentrada, É como balançar na fumaça.

De qualquer forma, eu posso fazer isso no EA com 2 volts, então não há necessidade de criar este indicador.


Obrigado pela ajuda.

Ray

 
pls pode u me ajudar a codificar este indicador para EA Eu só quero que ele troque uma vela quando a seta aparecer e feche-o quando a vela fechar pls u pode torná-lo opção eu preciso dele
Arquivos anexados:
 

Olá.

Estou tentando fazer um alerta com base no indicador de oferta - demanda de acordo com o crossover estocástico. Fui informado de que este indicador pode ser usado para engradar EA's, uma vez que armazena informações em tampões, porém ainda não estou super confiante na leitura e compreensão do mql4 e não tem mais do que 2-3 meses de experiência no tempo.

Portanto, espero que alguém lá fora possa me ajudar a escrever a linha iCustom para verificar se o preço está dentro do zoeno ou não.

//+------------------------------------------------------------------+
//|                                              Indicator: chan.mq4 |
//|                                       Created with EABuilder.com |
//|                                             http://eabuilder.com |
//+------------------------------------------------------------------+
#property copyright "Created with EABuilder.com"
#property link      "http://eabuilder.com"
#property version   "1.00"
#property description ""

#include <stdlib.mqh>
#include <stderror.mqh>

//--- indicator settings
#property indicator_chart_window
#property indicator_buffers 2

#property  indicator_type1 DRAW_ARROW
#property  indicator_width1 5
#property  indicator_color1 0xFFAA00
#property  indicator_label1 "Buy"

#property  indicator_type2 DRAW_ARROW
#property  indicator_width2 5
#property  indicator_color2 0x1A00FF
#property  indicator_label2 "Sell"

//--- indicator buffers
double Buffer1[];
double Buffer2[];

double myPoint; //initialized in OnInit

void myAlert(string type, string message)
  {
   if(type == "print")
      Print(message);
   else if(type == "error")
     {
      Print(type+" | chan @ "+Symbol()+","+Period()+" | "+message);
     }
   else if(type == "order")
     {
     }
   else if(type == "modify")
     {
     }
  }

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {   
   IndicatorBuffers(2);
   SetIndexBuffer(0, Buffer1);
   SetIndexEmptyValue(0, 0);
   SetIndexArrow(0, 241);
   SetIndexBuffer(1, Buffer2);
   SetIndexEmptyValue(1, 0);
   SetIndexArrow(1, 242);
   //initialize myPoint
   myPoint = Point();
   if(Digits() == 5 || Digits() == 3)
     {
      myPoint *= 10;
     }
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| 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[])
  {
   int limit = rates_total - prev_calculated;
   //--- counting from 0 to rates_total
   ArraySetAsSeries(Buffer1, true);
   ArraySetAsSeries(Buffer2, true);
   //--- initial zero
   if(prev_calculated < 1)
     {
      ArrayInitialize(Buffer1, 0);
      ArrayInitialize(Buffer2, 0);
     }
   else
      limit++;
   
   //--- main loop
   for(int i = limit-1; i >= 0; i--)
     {
      if (i >= MathMin(5000-1, rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation   
      //Indicator Buffer 1
      if(iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i) < 20
      && iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i+1) > 20 //Stochastic Oscillator crosses below fixed value
          !!!!!  && iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", i ***************** check if price is in upper zone
      )
        {
         Buffer1[i] = Low[i]; //Set indicator value at Candlestick Low
        }
      else
        {
         Buffer1[i] = 0;
        }
      //Indicator Buffer 2
      if(iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i) > 80
      && iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i+1) < 80 //Stochastic Oscillator crosses above fixed value
           !!!! && iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", i ***************  check if price is in lower zone
      )
        {
         Buffer2[i] = High[i]; //Set indicator value at Candlestick High
        }
      else
        {
         Buffer2[i] = 0;
        }
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+

Não espero que alguém invista tempo em me ajudar, mas se eu não postar, não tenho nenhuma chance, então pensei em tentar.

Paz e amor aos colegas comerciantes

Arquivos anexados:
 
NWFstudent:

Olá.

Estou tentando fazer um alerta com base no indicador de oferta - demanda de acordo com o crossover estocástico. Fui informado de que este indicador pode ser usado para engradar EA's, uma vez que armazena informações em tampões, porém ainda não estou super confiante na leitura e compreensão do mql4 e não tem mais do que 2-3 meses de experiência no tempo.

Portanto, espero que alguém lá fora possa me ajudar a escrever a linha iCustom para verificar se o preço está dentro do zoeno ou não.

Não espero que alguém invista tempo em me ajudar, mas se eu não postar, não tenho nenhuma chance, então pensei em tentar.

Paz e amor aos colegas comerciantes

Faça algo assim(verifique também os comentários)

   //
   //
   // checking if the price is withing the lower zone
   //
   //
   
   if (Close[i] <= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 6,i) &&
       Close[i] >= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 7,i))
   //
   //
   // checking if the price is withing the upper zone
   //
   //
   
   if (Close[i] <= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 4,i) &&
       Close[i] >= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 5,i))
       
   //
   //
   // PS: that indicator stores values only for current bar in the buffers, so it works only for i==0
   //
   //
   //       
 
mladen:

Faça algo assim (verifique também os comentários)

Obrigado, você deve ser o administrador mais gentil de qualquer página. Seu trabalho é tão apreciado.

Cuide-se.

 
dotmund:
pls pode u me ajudar a codificar este indicador para EA Eu só quero que ele troque uma vela quando a seta aparecer e feche-o quando a vela fechar pls u pode torná-lo opção eu preciso dele

pls me ajudem

Razão: