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 - индикатор нормализованного объёма. Отображает средний объём в диапазоне баров в виде цветной гистограммы с пороговым уровнем. Имеет два настраиваемых параметра:
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:
No modo de depuração, examinou os valores passo a passo:
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?