Ajuda na codificação - página 782

 
  1. Não duplique o correio! Você já tinha este tópico aberto.
    Regras gerais e melhores práticas do Fórum. - Geral - Fórum de programação MQL5

  2. mcaesart: Mas não funciona como eu quero.

    "Não funciona" não faz sentido - assim como dizer que o carro não funciona. Não pega, não vai na engrenagem, não tem eletricidade, falta da chave, pneus furados - sem sentido.
    Como fazer perguntas da maneira inteligente. 2004
    Ao fazer perguntas sobre código

 
mcaesart

Eu apaguei seu tópico com o mesmo assunto.

 
KristijanO: Estou recebendo muitos erros ... estou recebendo é um erro simbólico inesperado.
  1. Não se aproprie de outros fios para seu posto fora do tópico. Você não está pedindo "ajuda na codificação". Da próxima vez, faça seu próprio, novo, tópico.

  2. Você realmente espera uma resposta? Não há leitores de mente aqui e nossas bolas de cristal estão rachadas. Não podemos ver seu código quebrado. Não há contexto para sua única linha. É provável que seu problema esteja acima disso.

  3. Coloque todos os códigos relevantes (como o que está acima dessa linha).
  4. Coloque as mensagens de erro e indique qual linha tem o erro.

  5. Como fazer perguntas da maneira inteligente. 2004
    Podar consultas sem sentido.

 
auto_free_TEAMTRADER:

Todos os símbolos estão disponíveis em minhas plataformas.

Experimentei com 3 indicadores renko diferentes e em três plataformas diferentes, mas ainda nada funciona nos gráficos renko.

Todos os outros indicadores funcionam corretamente e são CCI, RSI e stochs.

Alguém mais tem alguma sugestão?

TEAMTRADER

Olá Auto_líder_de_equipa livre


Eu tenho o mesmo problema, se você encontrou a solução, responda.

 
Rex Kalist:

Olá Auto_líder_de_equipa livre


Eu tenho o mesmo problema, se você encontrou a solução, responda.

auto_free_TEAMTRADER ou Mladen , Pls assist
 

Oi pessoal,

Passei 3 semanas para criar um indicador personalizado, mas claramente não sou bom o suficiente, esperando que alguém possa ajudar.

Meu indicador leva 3 extern: "Timeframe", "número de nível de exibição no gráfico" e "distância mínima entre cada nível".

Tudo que eu preciso codificar é agrupar, remover o ponto fractal dentro da distância mínima e, em seguida, exibir o nível de ponto fractal restante.

A primeira versão (MainRS_AddOn2.mq4) que criei faz exatamente o que eu quero, porém eu uso o método estúpido desenhando objeto e mantenho modificar objeto, o indicador roda extremamente lento.

A segunda versão (17_8_2020_RS_Indicator.mq4) armazena todos os níveis no buffer que roda muito mais rápido, mas tenho problemas que não consigo corrigir.

----Acredito que tenho um erro lógico ao armazenar o novo nível fractal, que algum nível de exibição não atendeu ao requisito de distância mínima e obteve mais nível duplicado quando executado no testador.

lado esquerdo é 17_8_2020_RS_Indicator.mq4, que tem nível duplicado.

Acima está o nível duplicado dentro do testador.


 if (modify == false ) // store new level when display level limit have no more room
                     {      
                                 if (RSMode[limit]== 1 )
                                    { 
                                       int index = ArrayMinimum (Display_level, WHOLE_ARRAY , 0 );
                                       Display_Mode[index]=RSMode[limit] ;
                                       Display_level[index]=RSBuffer1[limit];
                                    }  
                                 if (RSMode[limit]== 2 )
                                    { 
                                       int index = ArrayMaximum (Display_level, WHOLE_ARRAY , 0 );
                                       Display_Mode[index]=RSMode[limit] ;
                                       Display_level[index]=RSBuffer1[limit];
                                    }
                                    
                                  modify = true ; 
                                      
                     } 
                 }          

Estou pensando que o código acima pode causar o erro lógico. Mas ninguém pode dizer, a menos que esteja disposto a gastar tempo para examinar o arquivo inteiro.

Agradeço se alguém puder ajudar. Abaixo está o código completo, você pode copiar e colar ou baixar o arquivo anexado.

Muito Obrigado.

 //+------------------------------------------------------------------+
//|                                             MainRS_Indicator.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+

#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property description "Indicator to show Grouped Fractal Support and Resisitance Level"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#define Confirm_Level 3
#define Up_Fractal   1
#define Down_Fractal   2
#define Combined_Up   4
#define Combined_Down   5
 
enum timeframe_display_option
   {
    Current = 0 ,
    PeriodM5 = 5 ,
    PeriodM15 = 15 ,
    PeriodM30 = 30 ,
    PeriodH1 = 60 ,
    PeriodH4 = 240 ,
    PeriodD1 = 1440 ,
    PeriodW1 = 10080 ,
   };
double RSBuffer1[]; //hold new form fractal
double RSMode[]; //hold new form fractal status
double Display_level[]; // hold fractal display level 
double Display_Mode[]; // hold fractal display level status

extern int                        Show_Level_Limit = 15 ;         //Max Level to be display on chart
extern timeframe_display_option  Level_of_TimeFrame=Current; //Option to display which timeframe level on chart
extern double                     sensitvity = 15 ;     // Min distance between each RS level,input in pips values
int DisplayIndex = 0 ;


//++++ These are adjusted for 5 digit brokers.
   int      pips2points;     // slippage  3 pips    3=points    30=points
   double   pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
   int      Digitspips;     // DoubleToStr(dbl/pips2dbl, Digits.pips)
   string indId = "SR_" ;     // string to name object on chart for delete and create object
   double fractal;         // to store fractal point value
   bool modify = false ;     // to indicate a existing level on chart being modify or not
   double status; // status of display level, use to reduce and combine level within min distance
   color mark = clrRed ;                 

   //--------------------------------------------------
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
                                            
     if ( Digits % 2 == 1 )
     {       // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262
                pips2dbl    = Point * 10 ; 
                pips2points = 10 ;   
                Digitspips = 1 ;
     } 
     else 
     {   pips2dbl    = Point ;    
         pips2points =   1 ;   
         Digitspips = 0 ; 
     }
   SetIndexBuffer ( 0 , RSBuffer1);
   SetIndexStyle( 0 , DRAW_ARROW );
   SetIndexArrow( 0 , 251 );   //buffer 0 draw line not symbol
   SetIndexEmptyValue( 0 , 0.0 );
   SetIndexBuffer ( 1 , RSMode);
   SetIndexStyle( 1 , DRAW_NONE );
   SetIndexArrow( 1 , 251 );   //buffer 0 draw line not symbol
   SetIndexEmptyValue( 1 , 0.0 );
   sensitvity = sensitvity * pips2dbl; // min distance of each display level/fractal point
     return ( 0 );

  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   DeleteAllObjects();
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted();
   if (counted_bars > 0 )       //---- the last calculated bar will be recalculated   
      counted_bars--;
   int limit = Bars - counted_bars- 1 ;

//-------------------------------------------------------------------------------------------------  
//---- store fractal point to array   
//-------------------------------------------------------------------------------------------------  
   while (limit> 0 )
   { 
   fractal = iFractals ( NULL , Level_of_TimeFrame, MODE_UPPER, limit);
       if (fractal != 0 )
     {   
      RSBuffer1[limit]= fractal;
      RSMode[limit]= Up_Fractal;
     }
   fractal = iFractals ( NULL , Level_of_TimeFrame, MODE_LOWER, limit);
       if (fractal != 0 )
      {
      RSBuffer1[limit]= fractal;
      RSMode[limit]= Down_Fractal;
      }
//-----------------------------------------------------------------------------------------------------------------------------------------------      
//below status for fractal point reduction  
//Confirm_Level 3
//Up_Fractal  1
//Down_Fractal  2
//Combined_Up   4
//Combined_Down  5
//upper fractal point with another upper fractal point == combined up
//lower fractal point with another lower fractal point == combine down
//opposite fractal merge == confirm level (up & down || up & combine down || up && confirm || down & up || down & combine up ||down && confirm)
//--------------------------------------------------------------------------------------------------------------------------------------------------

   ArrayResize (Display_level,Show_Level_Limit+ 1 );
   ArrayResize (Display_Mode,Show_Level_Limit+ 1 );
     if ( RSBuffer1[limit]!= 0 )
     { 
       for ( int i=Show_Level_Limit- 1 ;  i>= 0 ; i--)
      {
         double diff = MathAbs (RSBuffer1[limit]-Display_level[i]); // calculate min distance between level
         modify = false ;

                   if (diff<=sensitvity ) //new fractal, check against Displaylevel
                     {  
                         if (Display_Mode[i]== 1 && RSMode[limit] == 1 ) // 
                           {   
                                 Display_Mode[i]= 4 ; // mode up & up = combine up
                                 if (RSBuffer1[limit]<Display_level[i])
                                    Display_level[i]=Display_level[i];
                                    
                               Comment (   " Up & Up== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
                           }
                         if (Display_Mode[i]== 4 && RSMode[limit] == 1 )
                           {
                                    Display_Mode[i]= 4 ; // mode combine up & up = combine up
                                     if (RSBuffer1[limit]<Display_level[i])
                                       Display_level[i]=Display_level[i];
                               Comment (   " Up & combine Up== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
                           }      
                         if (Display_Mode[i]== 2 && RSMode[limit] == 2 )
                           {  
                                  Display_Mode[i]= 5 ; // mode down & down = combine down
                                   if (RSBuffer1[limit]>Display_level[i])
                                    Display_level[i]=Display_level[i];
                               Comment (   "down & down== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]); 
                           }
                         if (Display_Mode[i]== 5 && RSMode[limit] == 2 )
                           {
                                    Display_Mode[i]= 5 ; // mode down & combine down  = combine down
                                     if (RSBuffer1[limit]>Display_level[i])
                                       Display_level[i]=Display_level[i];
                               Comment (   " Down & combine down== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
                           }   
                         
                     }    

                     if (diff<=sensitvity) 
                     {    
                         
                         if ((Display_Mode[i]== 2 && RSMode[limit] == 1 )||(Display_Mode[i]== 1 && RSMode[limit] == 2   ))
                           {
                               Display_Mode[i]= 3 ; // mode  up & down & combine down  = confirm 
                                    Display_level[i]=Display_level[i];
                               Comment (   "Up & down or combine down == " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
                              modify = true ;
                               break ;
                           }                          
                         if ( (Display_Mode[i]== 3 || Display_Mode[i]== 5 ))
                           {
                               Display_Mode[i]= 3 ; // mode  up & confirm level = confirm 
                               Display_level[i]=Display_level[i];
                               Comment (   "Up & confirm level== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
                              modify = true ;
                               break ;
                           }
                           
                         if ( Display_Mode[i]== 3 || Display_Mode[i]== 4 )
                           {
                               Display_Mode[i]= 3 ; // mode  down & confirm level = confirm 
                               Display_level[i]=Display_level[i];
                               Comment (   "Down & confirm level== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
                              modify = true ;
                               break ;
                           }
                           
                     }
                  
       } //end of modify existing level for loop 
                  
                   if (modify == false ) // store disply level untill reacah show level limit
                  { 
                     for ( int a= 0 ;  a<Show_Level_Limit- 1 ; a++)
                     { 
                         if (Display_Mode[a]== 0 )
                        {
                           Display_Mode[a]=RSMode[limit];
                           Display_level[a] = RSBuffer1[limit];
                           
                           modify = true ;
                           break ;
                        } 
                        a++;  
                     }
                 
                   if (modify == false ) // store new level when display level limit have no more room
                     {      
                                 if (RSMode[limit]== 1 )
                                    { 
                                       int index = ArrayMinimum (Display_level, WHOLE_ARRAY , 0 );
                                       Display_Mode[index]=RSMode[limit] ;
                                       Display_level[index]=RSBuffer1[limit];
                                    }  
                                 if (RSMode[limit]== 2 )
                                    { 
                                       int index = ArrayMaximum (Display_level, WHOLE_ARRAY , 0 );
                                       Display_Mode[index]=RSMode[limit] ;
                                       Display_level[index]=RSBuffer1[limit];
                                    }
                                    
                                  modify = true ; 
                                      
                     } 
                 }          
      }

      limit--;
      
   }    
                  DeleteAllObjects();
                 
                   int uplevel= 1 ;
                   int downlevel= 1 ;
                   ArraySort (Display_level, WHOLE_ARRAY , 0 ,MODE_ASCEND);
                  DisplayIndex = 0 ;
                   for ( int a= 0 ;a< ArraySize (Display_level)- 1 ; a++)
                  {
                         if (Display_level[a]<Bid && Display_level[a+ 1 ]>Bid)
                           DisplayIndex =a+ 1 ;
                  }         

                     for ( int c =DisplayIndex ; c<=Show_Level_Limit; c++)
                  {         
                     HLine( "SR_RES" +uplevel+ " # " + c, Display_level[c],mark);
                     uplevel++;
                  }   
                     for ( int c =DisplayIndex- 1 ; c> 0 ; c--)
                  {         
                     HLine( "SR_SUP" +downlevel+ " # " + c, Display_level[c],mark);
                     downlevel++;
                  }   

                     

       



return ( 0 );
   } 
void HLine( string name, double P0, color clr)
      {
           #define WINDOW_MAIN 0
     /**/    if ( ObjectMove ( name, 0 , Time[ 0 ], P0 )){}
             else if (! ObjectCreate ( name, OBJ_HLINE , WINDOW_MAIN, Time[ 0 ], P0 ))
                     Alert ( "ObjectCreate(" ,name, ",HLINE) failed: " , GetLastError () );
           if (!ObjectSet(name, OBJPROP_COLOR , clr )) // Allow color change
                   Alert ( "ObjectSet(" , name, ",Color) [1] failed: " , GetLastError () );
           if (!ObjectSetText(name, PriceToStr(P0), 10 ))
                     Alert ( "ObjectSetText(" ,name, ") [1] failed: " , GetLastError ());
}
void DeleteAllObjects()
{
   // Delete all objects created by the indicator
   for ( int i = ObjectsTotal () - 1 ;  i >= 0 ;  i--)
   {
       string name = ObjectName (i);
      
       if ( StringSubstr (name, 0 , StringLen (indId)) == indId)
         ObjectDelete (name);
   }
}
 
string   PriceToStr( double p)
   {
     string pFrc = DoubleToStr(p, Digits );       
     if (Digitspips== 0 ) 
       return (pFrc);
     string pPip = DoubleToStr(p, Digits - 1 );
     if (pPip+ "0" == pFrc)       
       return (pPip);           
       return (pFrc);          
   }
//---------------------------------------------------------------------------------------------  
double Price( double Old, double New, int result) //1 return larger value, 2 return smaller value
   { 
   double value= 0 ;
   if (result== 1 )
   value= MathMax (Old,New);
   if (result== 2 )
   value= MathMin (Old,New);
   return (value);
   }
//---------------------------------------------------------------------------------------------   
Arquivos anexados:
 

Eu peço desculpas se tiveHijack de outros fios.

Só espero que alguém possa ajudar a apontar o erro que eu cometi dentro do meu código para que eu possa corrigir meu problema de nível de exibição duplicado.

Muito obrigado.

 
wccmcd:

Estou tentando passar de MQL4 para MQL5, mas preso no primeiro passo. para a função iCCI, por que não há mais nenhum parâmetro de "turno"?

Por favor, edite seu post e

usar o botão de código (Alt+S) ao colar o código

Esta seção é MQL4.

MQL5 você cria uma alça no OnInit e acessa os valores do buffer no código principal.

Eu sugiro que você leia a documentação da MQL5

 
Keith Watford:

Por favor, edite seu post e

usar o botão de código (Alt+S) ao colar o código

Esta seção é MQL4.

MQL5 você cria uma alça no OnInit e acessa os valores do buffer no código principal.

Eu sugiro que você leia a documentação da MQL5

Desculpe por isso. Acabei de perceber que estou postando no lugar errado. Obrigado por sua resposta até o fim. Acabei de apagá-la.
 
Olá,
Sou apenas um principiante em aprender o mql4. Estou tentando criar um indicador básico de supertendência.
Preciso da ajuda de um especialista em código de alertas.


Código de Alerta atual:
Alerta(Símbolo() + " (" + Período() + "M) --> " + LSinal + CPri);

Saída vindo assim:
Nome do Símbolo (15M) --> Comprar em 524,55

Mas, eu preciso de stoploss e alvos também no alerta baseado em seguir cálculos simples.

Assumir nossa entrada de compra a 524,55.

Stoploss : Entrada - 1,5% do preço de entrada do estoque (524,55 - 7,85 = 516,70)
Meta 1 : Entrada + 2,5% do preço de entrada em estoque (524,55 + 13,10 = 537,65)
Meta 2 : Entrada + 5% do preço do estoque (524,55 + 26,20 = 550,75)

(Nota: O tamanho do tick é 0,05. Portanto, se o número de stoploss ou o cálculo do alvo for um número ímpar, será necessário arredondar para o tamanho do tick mais próximo. E se o LSignal for um sinal de venda, é preciso fazer o cálculo inverso.


Finalmente, preciso seguir a saída:
Nome do Símbolo (15M) --> Comprar em 524,55, SL: 516,70, Alvo 1: 537,65, Alvo 2: 550,75


Alguém pode, por favor, reescrever o código para minha necessidade?

TY em avanço.