[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 317

 
Zhunko:
Não há função, mas pode ser feita em MQL4 + WinAPI.

//+------------------------------------------------------------------+
//|          Function  : int GetChartScale()[1,2,4,6,13]             |
//|          Copyright © 2012, XrustSolution.  mail:xrustx@gmail.com |
//|          https://www.youtube.com/user/opmlv http://forexrust.info |
//+------------------------------------------------------------------+
//|          Description: Возвращает ширину свечи по масштабу чарта  |
//+------------------------------------------------------------------+
#import "user32.dll"
  bool GetWindowRect(int h, int& pos[4]);
#import
//+------------------------------------------------------------------+
int GetChartScale(){
        int h = WindowHandle(Symbol(), Period());
        int rect[4];
        if(h==0) return(1);
        GetWindowRect(h, rect);
        int wW  = rect[2] - rect[0]; // ширина окна
        int bpc = WindowBarsPerChart();
        if(bpc==0) return(1);
        int scale = MathFloor((wW-48)/bpc);
        switch(scale){
                case  1 :       return(0);
                case  2 :       return(1);
                case  4 :       return(2);
                case  8 :       return(3);
                case 16 :       return(6);
                case 32 :       return(13);
                default :   return(1);
        }
        return(1);
}
//+------------------------------------------------------------------+
 

Boa tarde! Você pode me dizer por que a linha indicadora não é exibida, o código parece ser elementar e nada complicado. Eu o verifiquei com Print (T_V) - ele dá o valor, mas a linha não é exibida por algum motivo?

Gostaria de acrescentar uma pergunta. Apaguei o indicador e coloquei-o novamente em um gráfico e a linha é exibida. Por que o indicador não é recalculado durante a compilação?

#property indicator_separate_window
#property indicator_minimum -3
#property indicator_maximum 3
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_level1 0.0         //горизонтальный уровень N в отдельном окне индикатора, где N от 1 до 8 
#property indicator_levelcolor Black   // цвет горизонтальных уровней индикатора е 
#property indicator_levelwidth 1       //толщина горизонтальных уровней индикатора
double T_Vol[];

int init()
  {  SetIndexBuffer (0, T_Vol); 
     SetIndexStyle  (0, DRAW_HISTOGRAM, STYLE_SOLID, 1); 
     IndicatorDigits(Digits);
   return(0); }
int start(){
   int limit;
   int сounted_bars=IndicatorCounted();
   if (сounted_bars==0) limit=Bars-1;
   if (сounted_bars>0) limit=Bars-сounted_bars-1;
   for(int i=limit;i>=0;i--){
       int T_V=0; 
       if (Volume[i]>Volume[i+1])T_V=1;
       if (Volume[i]<Volume[i+1])T_V=-1;
       T_Vol[i]=T_V;
   }
   return(0);
}
 
PapaYozh:


1.

Qual é o valor da variável "SignalBar" e o indicador é calculado sobre esta barra?

Talvez a SignalBar=0 e o indicador não calcule a 0ª barra.

2.

Sim, durante os testes visuais, os buffers indicadores não são exibidos até que o teste seja concluído ou interrompido. Mas os indicadores contam.

Obrigado por apontar isso! Mas nada ajuda até agora :(

Portanto, agora estou estudando a transferência do indicador para o Expert Advisor. Se você tiver algum conselho sábio, eu não o recusarei! :)

 

Olá a todos!

Estudei programação como amador, não programei por muito tempo, por isso tenho uma pergunta:

Por que preciso de pontos de parada na MQL4, se depois de defini-los nada acontece na compilação? Eu costumava programar muito em C#, onde havia uma pausa na execução do programa e você podia ver os valores das variáveis, quais funções eram chamadas e quais erros eram listados. Mas aqui eu aperto Compile e nada acontece. Ou você pode habilitar o Debug de alguma forma, eu simplesmente não sei como?

 

há uma função "double MathRound( valor duplo)", mas eu preciso do arredondamento para uma fração decimal maior, e se o número for inteiro ou já decimal, então deixe-o em paz.

Por exemplo: 1) 0,744 rodada a 0,8; 1,233 rodada a 1,3

2) 0,9 ou 3 ou 1,5 não tocar.



Quem pode ajudar, por favor?
 

Será que você sequer sabe que existe uma Documentação completa e detalhada do idioma?

NormalizeDuplo

 
FAQ:

Será que você sequer sabe que existe uma Documentação completa e detalhada do idioma?

NormalizeDuplo

para cima, é meio fácil para você, eh?...
 
okvseok:
para cima, é um pouco simples, não é...?

Você pode traduzir um número em uma cadeia e escrever uma função para processar os caracteres desta cadeia. Não é complicado aqui - só arredondamos para cima se o número tiver mais de um dígito após o ponto decimal.
 
drknn:

Você pode converter um número em uma cadeia e escrever uma função para processar os caracteres dessa cadeia. Não é complicado aqui - só arredondamos um número se ele tiver mais de um dígito após o ponto decimal.
OK, vou realmente tentar. Muito obrigado pela idéia!
 
okvseok:

há uma função "double MathRound( valor duplo)", mas eu preciso do arredondamento para uma fração decimal maior, e se o número for inteiro ou já decimal, então deixe-o em paz.

Por exemplo: 1) 0,744 rodada a 0,8; 1,233 rodada a 1,3

2) 0,9 ou 3 ou 1,5 não tocar.

double MathRoundDec(double dValue) 
 {
  if (dValue == NormalizeDouble(dValue, 1)) return(dValue);
  return(MathRound(10 * dValue) / 10);  
 }
Ainda não verifiquei, mas é só isso.