Há uma necessidade de esconder objetos de acordo com um critério. Como posso esconder objetos em um gráfico (principalmente linhas)? Os objetos podem ser selecionados por prefixo.
Seric29: Há uma necessidade de esconder objetos por um critério. Como posso esconder objetos em um gráfico (principalmente linhas)? Os objetos podem ser selecionados por prefixo.
OBJPROP_TIMEFRAMES ajuda a fazer isso. Mas não tudo em um grupo, mas em um loop, um a um.
1. var.- se você escrever funções universais. Neste caso, o número de verificações aumenta, mas a quantidade de código diminui, porque no final há menos funções, menos variáveis inicializadas, mas há uma desvantagem mencionada anteriormente.
A 2ª variante é se escrevermos mais funções que realizarão cálculos menos complexos. Neste caso, a quantidade de código aumenta, mais variáveis são inicializadas e o compilador terá que executar o código ociosamente muitas vezes para encontrar a função correta, mas há uma vantagem, o número de verificações diminui.
1. var.- se você escrever funções universais. Neste caso, o número de verificações aumenta, mas a quantidade de código diminui, porque no final há menos funções, menos variáveis inicializadas, mas há uma desvantagem mencionada anteriormente.
A 2ª variante é se escrevermos mais funções que realizarão cálculos menos complexos. Neste caso, a quantidade de código aumenta, mais variáveis são inicializadas e o compilador terá que executar o código ociosamente muitas vezes para encontrar a função correta, mas há uma vantagem, o número de verificações diminui.
Quem pensa sobre isso?
Opção 2, muitas funções pequenas, mas você está 2 meses no escuro sobre a diferença entre compilador e intérprete, o compilador não executa código ociosamente, ele cria tabelas de links para funções, variáveis, constantes... e depois usa essas tabelas para saltar em tempo de execução
Делиться с ближним своим для нас, божьих тварей, это очень характерно, считается добродетелью, и вообще, как утверждает первоисточник, положительно отражается на карме. Однако в мире, созданном архитекторами микропроцессоров, такое поведение не всегда приводит к хорошим результатам, особенно если это касается разделения памяти между потоками...
É simplesmente incrível. Como você pode ler a documentação para ver DRAW_HISTOGRAM2 e não ver DRAW_COLOR_HISTOGRAM2
Ah, e há buffers extras declarados.
Boa noite. Tentei por muito tempo e em vão. O histograma desenha corretamente, mas a coloração em cores diferentes (acima e abaixo do nível 50) não venceu. Por favor, me diga onde eu fiz asneira. Texto abaixo, o arquivo está vinculado.
//+------------------------------------------------------------------+//| Stoch_HISTOGRAM_MQL5_4.mq5 |//| Copyright 2009-2017, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"2009-2017, MetaQuotes Software Corp."#property link"http://www.mql5.com"//--- indicator settings#property indicator_separate_window#property indicator_buffers8#property indicator_plots3#property indicator_type1DRAW_LINE// основная#property indicator_color1clrLightSeaGreen#property indicator_style1STYLE_SOLID#property indicator_type2DRAW_LINE// сигнальная#property indicator_color2clrYellow#property indicator_style2STYLE_SOLID#property indicator_type3DRAW_COLOR_HISTOGRAM2#property indicator_color3clrGreen,clrRed#property indicator_style3STYLE_SOLID#property indicator_width13#property indicator_width22#property indicator_width31//--- input parametersinputint InpKPeriod=5; // K periodinputint InpDPeriod=3; // D periodinputint InpSlowing=3; // Slowing//--- indicator buffersdouble ExtMainBuffer[];
double ExtSignalBuffer[];
double ColorHistogram_2Buffer1[];
double ColorHistogram_2Buffer2[];
double ExtHighesBuffer[];
double ExtLowesBuffer[];
double ColorHistogram_2Colors[];
color colors[]={clrRed,clrGreen};
int cl;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+voidOnInit()
{
//--- indicator buffers mappingSetIndexBuffer(0,ExtMainBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ExtSignalBuffer,INDICATOR_DATA);
SetIndexBuffer(2,ColorHistogram_2Buffer1,INDICATOR_DATA);
SetIndexBuffer(3,ColorHistogram_2Buffer2,INDICATOR_DATA);
SetIndexBuffer(4,ExtHighesBuffer,INDICATOR_CALCULATIONS);
SetIndexBuffer(5,ExtLowesBuffer,INDICATOR_CALCULATIONS);
SetIndexBuffer(6,ColorHistogram_2Colors,INDICATOR_COLOR_INDEX);
PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);
//--- set accuracyIndicatorSetInteger(INDICATOR_DIGITS,2);
//--- set levelsIndicatorSetInteger(INDICATOR_LEVELS,3);
IndicatorSetDouble(INDICATOR_LEVELVALUE,0,20);
IndicatorSetDouble(INDICATOR_LEVELVALUE,1,50);
IndicatorSetDouble(INDICATOR_LEVELVALUE,2,80);
////--- установим пустое значение для HISTOGRAM2// PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0); //--- set maximum and minimum for subwindow IndicatorSetDouble(INDICATOR_MINIMUM,0);
IndicatorSetDouble(INDICATOR_MAXIMUM,100);
//--- name for DataWindow and indicator subwindow labelIndicatorSetString(INDICATOR_SHORTNAME,"Stoch_HISTOGRAM("+(string)InpKPeriod+","+(string)InpDPeriod+","+(string)InpSlowing+")");
//PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);PlotIndexSetString(0,PLOT_LABEL,"Main");
PlotIndexSetString(1,PLOT_LABEL,"Signal");
PlotIndexSetString(2,PLOT_LABEL,"UP");
PlotIndexSetString(3,PLOT_LABEL,"LOW");
//--- sets first bar from what index will be drawnPlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpKPeriod+InpSlowing-2);
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpKPeriod+InpDPeriod);
PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,InpKPeriod+InpSlowing-2);
PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,InpKPeriod+InpSlowing-2);
//--- initialization done
}
//+------------------------------------------------------------------+//| Stochastic Oscillator |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
int i,k,start;
//PlotIndexSetInteger(2,PLOT_LINE_COLOR,0);//--- check for bars countif(rates_total<=InpKPeriod+InpDPeriod+InpSlowing)
return(0);
//---
start=InpKPeriod-1;
if(start+1<prev_calculated) start=prev_calculated-2;
else
{
for(i=0;i<start;i++)
{
ExtLowesBuffer[i]=0.0;
ExtHighesBuffer[i]=0.0;
}
}
//--- calculate HighesBuffer[] and ExtHighesBuffer[]for(i=start;i<rates_total && !IsStopped();i++)
{
double dmin=1000000.0;
double dmax=-1000000.0;
for(k=i-InpKPeriod+1;k<=i;k++)
{
if(dmin>low[k]) dmin=low[k];
if(dmax<high[k]) dmax=high[k];
}
ExtLowesBuffer[i]=dmin;
ExtHighesBuffer[i]=dmax;
}
//--- %K
start=InpKPeriod-1+InpSlowing-1;
if(start+1<prev_calculated) start=prev_calculated-2;
else
{
for(i=0;i<start;i++) ExtMainBuffer[i]=0.0;
}
//--- main cyclefor(i=start;i<rates_total && !IsStopped();i++)
{
double sumlow=0.0;
double sumhigh=0.0;
for(k=(i-InpSlowing+1);k<=i;k++)
{
sumlow +=(close[k]-ExtLowesBuffer[k]);
sumhigh+=(ExtHighesBuffer[k]-ExtLowesBuffer[k]);
}
if(sumhigh==0.0) ExtMainBuffer[i]=100.0;
else ExtMainBuffer[i]=sumlow/sumhigh*100;
if(ExtMainBuffer[i]>50){
cl=0;
ColorHistogram_2Buffer1[i]=50;
ColorHistogram_2Buffer2[i]=ExtMainBuffer[i];
ColorHistogram_2Colors[i]=colors[cl];
}
if(ExtMainBuffer[i]<50){
cl=1;
ColorHistogram_2Buffer1[i]=ExtMainBuffer[i];
ColorHistogram_2Buffer2[i]=50;
ColorHistogram_2Colors[i]=colors[cl];
}
}
//--- signal
start=InpDPeriod-1;
if(start+1<prev_calculated) start=prev_calculated-2;
else
{
for(i=0;i<start;i++) ExtSignalBuffer[i]=0.0;
}
for(i=start;i<rates_total && !IsStopped();i++)
{
double sum=0.0;
for(k=0;k<InpDPeriod;k++) sum+=ExtMainBuffer[i-k];
ExtSignalBuffer[i]=sum/InpDPeriod;
}
//--- OnCalculate done. Return new prev_calculated.return(rates_total);
}
//+------------------------------------------------------------------+
Boa noite. Tentei por muito tempo e em vão. O histograma desenha corretamente, mas a coloração em cores diferentes (acima e abaixo do nível 50) não venceu. Por favor, me diga onde eu fiz asneira. Texto abaixo, o arquivo está vinculado.
No modo de depuração, eu estava olhando através dos valores passo a passo:
ExtMainBuffer[i]
cl
ColorHistogram_2Buffer1[i]
ColorHistogram_2Buffer2[i]
ColorHistogram_2Colors[i]
Parece que tudo está certo, mas os gráficos de barra são apenas verdes, aqueles abaixo de 50 não são coloridos de vermelho.
Индикатор Normalized Volume - индикатор нормализованного объёма. Отображает средний объём в диапазоне баров в виде цветной гистограммы с пороговым уровнем. Имеет два настраиваемых параметра:
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Há uma necessidade de esconder objetos por um critério. Como posso esconder objetos em um gráfico (principalmente linhas)? Os objetos podem ser selecionados por prefixo.
OBJPROP_TIMEFRAMES ajuda a fazer isso. Mas não tudo em um grupo, mas em um loop, um a um.
OBJPROP_TIMEFRAMES ajudaria com isso. Mas não tudo de uma só vez, mas um de cada vez.
Fá-lo-ei, quero um mapeamento período a período e experimentarei, obrigado pelo conselho.
Como o programa será executado mais rapidamente?
1. var.- se você escrever funções universais. Neste caso, o número de verificações aumenta, mas a quantidade de código diminui, porque no final há menos funções, menos variáveis inicializadas, mas há uma desvantagem mencionada anteriormente.
A 2ª variante é se escrevermos mais funções que realizarão cálculos menos complexos. Neste caso, a quantidade de código aumenta, mais variáveis são inicializadas e o compilador terá que executar o código ociosamente muitas vezes para encontrar a função correta, mas há uma vantagem, o número de verificações diminui.
Quem pensa sobre isso?
Como o programa será executado mais rapidamente?
1. var.- se você escrever funções universais. Neste caso, o número de verificações aumenta, mas a quantidade de código diminui, porque no final há menos funções, menos variáveis inicializadas, mas há uma desvantagem mencionada anteriormente.
A 2ª variante é se escrevermos mais funções que realizarão cálculos menos complexos. Neste caso, a quantidade de código aumenta, mais variáveis são inicializadas e o compilador terá que executar o código ociosamente muitas vezes para encontrar a função correta, mas há uma vantagem, o número de verificações diminui.
Quem pensa sobre isso?
Opção 2, muitas funções pequenas, mas você está 2 meses no escuro sobre a diferença entre compilador e intérprete, o compilador não executa código ociosamente, ele cria tabelas de links para funções, variáveis, constantes... e depois usa essas tabelas para saltar em tempo de execução
leia aquihttps://habr.com/ru/company/intel/blog/143446/
os desenvolvedores escreveram a mesma coisa aqui, em algum lugar, pesquisar a linhahttps://www.mql5.com/ru/forum/304239/page36#comment_11049194
SZZ: veja como funciona o compiladorhttps://habr.com/ru/sandbox/114988/
É simplesmente incrível. Como você pode ler a documentação para ver DRAW_HISTOGRAM2 e não ver DRAW_COLOR_HISTOGRAM2
Ah, e há buffers extras declarados.Boa noite. Tentei por muito tempo e em vão. O histograma desenha corretamente, mas a coloração em cores diferentes (acima e abaixo do nível 50) não venceu. Por favor, me diga onde eu fiz asneira. Texto abaixo, o arquivo está vinculado.
Boa noite. Tentei por muito tempo e em vão. O histograma desenha corretamente, mas a coloração em cores diferentes (acima e abaixo do nível 50) não venceu. Por favor, me diga onde eu fiz asneira. Texto abaixo, o arquivo está vinculado.
No modo de depuração, eu estava olhando através dos valores passo a passo:
- ExtMainBuffer[i]
- cl
- ColorHistogram_2Buffer1[i]
- ColorHistogram_2Buffer2[i]
- ColorHistogram_2Colors[i]
Parece que tudo está certo, mas os gráficos de barra são apenas verdes, aqueles abaixo de 50 não são coloridos de vermelho.No modo de depuração, examinou os valores passo a passo:
- ExtMainBuffer[i]
- cl
- ColorHistogram_2Buffer1[i]
- ColorHistogram_2Buffer2[i]
- ColorHistogram_2Colors[i]
Parece contar corretamente, mas os histogramas são apenas verdes, aqueles abaixo de 50 não são coloridos de vermelho.No modo de depuração, examinou os valores passo a passo:
- ExtMainBuffer[i]
- cl
- ColorHistogram_2Buffer1[i]
- ColorHistogram_2Buffer2[i]
- ColorHistogram_2Colors[i]
Parece que tudo está certo, mas o histograma é apenas verde, os que estão abaixo de 50 não são coloridos em vermelho.mas você está na ponta ...
Bem, é compreensível que eu tenha chamado o programa de compilador figurativamente, mas em geral, em que caso seria melhor?