[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 131
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
o win_idx acerta?
win_ind acaba sendo correto.
ObjectCreate("max",OBJ_HLINE,win_idx,0,top); desenha na janela correta,
ObjectSet("max",OBJPROP_COLOR,Yellow); desenha na cor certa,
ObjectSet("max",OBJPROP_WIDTH,0); desenha a linha correta,
mas não define o parâmetro superior em
double top=WindowPriceMax(win_idx);
e topBuffer[] está vazio.
O código
#janela_indicadora de propriedade_separarate_window
#property indicator_buffers 3
#indicador de propriedade_color1 Lime
#indicador de propriedade_color2 Vermelho
//--- amortecedores
duplo ExtMapBuffer1[];
duplo ExtMapBuffer2[];
double topBuffer[];
bool initFinished=false; // adicionar uma variável que lembrará o estado de inicialização.
// falso - a inicialização ainda não aconteceu.
// verdadeiro - foi inicializada
//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado |
//+------------------------------------------------------------------+
int init()
{
//---- indicadores
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_NONE);
SetIndexBuffer(2,topBuffer);
IndicatorDigits(5);
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| Função de desinicialização de indicador personalizada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| Função de iteração de indicador personalizada |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),
limite;
if(counted_bars>0)
barrinhas_contadas..;
limite=barras_contadas_combarras;
//----
for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
if(initFinished==false)
{
IndicatorShortName("MACD_max-min");
int win_idx=WindowFind("MACD_max-min");
// encontrar o número de nossa subjanela de indicadores
if(win_idx<0)
{
// se o número da subjanela for -1, há um erro
Imprimir("Janela não encontrada");
retorno(0);
}
double top=WindowPriceMax(win_idx);
//f encontrar o valor máximo da escala vertical da subjanela especificada do gráfico atual
ObjectCreate("max",OBJ_HLINE,win_idx,0,top);
// desenhar uma linha horizontal em uma subjanela de nosso indicador
ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);
WindowRedraw();
// redesenhar a janela para ver a linha
initFinished=verdadeiro;
// o desenho está terminado
}
topBuffer[i]=top;
}
//----
retorno(0);
}
//+------------------------------------------------------------------+
win_ind acaba sendo correto.
ObjectCreate("max",OBJ_HLINE,win_idx,0,top); desenha na janela correta,
ObjectSet("max",OBJPROP_COLOR,Yellow); desenha na cor correta,
ObjectSet("max",OBJPROP_WIDTH,0); desenha a linha correta,
mas não define o parâmetro superior em
double top=WindowPriceMax(win_idx);
e topBuffer[] está vazio.
Código
#janela_indicadora de propriedade_separarate_window
#property indicator_buffers 3
#indicador de propriedade_color1 Lime
#indicador de propriedade_color2 Vermelho
//--- amortecedores
duplo ExtMapBuffer1[];
duplo ExtMapBuffer2[];
double topBuffer[];
bool initFinished=false; // adicionar uma variável que lembrará o estado de inicialização.
// falso - a inicialização ainda não aconteceu.
// verdadeiro - foi inicializada
//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado |
//+------------------------------------------------------------------+
int init()
{
//---- indicadores
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_NONE);
SetIndexBuffer(2,topBuffer);
IndicatorDigits(5);
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| Função de desinicialização de indicador personalizada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| Função de iteração de indicador personalizada |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),
limite;
if(counted_bars>0)
barrinhas_contadas..;
limite=barras_contadas_combarras;
//----
for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
if(initFinished==false)
{
IndicatorShortName("MACD_max-min");
int win_idx=WindowFind("MACD_max-min");
// encontrar o número de nossa subjanela de indicadores
if(win_idx<0)
{
// se o número da subjanela for -1, há um erro
Imprimir("Janela não encontrada");
retorno(0);
}
double top=WindowPriceMax(win_idx);
//f encontrar o valor máximo da escala vertical da subjanela especificada do gráfico atual
ObjectCreate("max",OBJ_HLINE,win_idx,0,top);
// desenhar uma linha horizontal em uma subjanela de nosso indicador
ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);
WindowRedraw();
// redesenhar a janela para ver a linha
initFinished=verdadeiro;
// o desenho está terminado
}
topBuffer[i]=top;
}
//----
retorno(0);
}
//+------------------------------------------------------------------+
Desculpe a intromissão.
topBuffer[i] atrás do laço e do desenho, experimente isto:
Olá !
Por favor, aponte-me na direção certa:
São-me dadas N variáveis externas do mesmo tipo. Como escolher o valor máximo deles sem sobrecarregar o código - MathMax retorna no máximo dois valores, mas se for, digamos, 20 ?
Ou, como criar uma matriz a partir destes dados, que depois aplique o ArrayMaximum?
extern int A = 10;
extern int .......;
extern int N = 1253;
Obrigado de antemão !
https://docs.mql4.com/ru/array/ArrayMaximum
int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)Procure o elemento com o valor máximo. A função retorna a posição do elemento máximo na matriz.
Parâmetros:
matriz[] - matriz numérica, que é pesquisada.
contagem - Número de elementos a serem pesquisados.
Start - O índice inicial para a busca.
double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};
int maxValueIdx=ArrayMaximum(num_array);
Print("Max value = ", num_array[maxValueIdx]));
Mas, sob a forma de
int Max [N] = {A,.....,N};
a matriz não é criada.
Onde: A,......N são as variáveis dadas do mesmo tipo. Número de variáveis = N
Exemplo de criação de uma matriz de strings a partir de variáveis externas (script):
Exemplo de criação de uma matriz de strings a partir de variáveis externas (script):
Obrigado!
Funcionou, mas com uma correção: em vez de
int init(){sym[1]=sym1;............
faça o seguinte
int init(){sym[0]=sym1;.......
e então todos os elementos são contados.
Desculpe pela intrusão.
topBuffer[i] atrás do laço e do desenho, tente desta forma:
MUITO OBRIGADO!
Sua versão do indicador funciona!
Eu tentei resolvê-los com o tutorial MQL4 e os exemplos de indicadores, mas nada funcionou.
Se você tem o desejo, o tempo e a inclinação para me ajudar a descobrir o porquê:
1. Quando você instala a linha indicadora recebe um valor 0 (zero) e somente com a chegada do primeiro tick é que toma o valor da parte superior da variável, ou deve abrir a janela de parâmetros e fechá-la imediatamente;
2. O parâmetro top é calculado até o 4º sinal, embora haja a seguinte linha no init()
IndicadorDígitos(Dígitos+1);
e a linha
top=WindowPriceMax(win_idx);
Eu o substituí por
top=NormalizeDouble((WindowPriceMax(win_idx)),Digits+1);
Isso não ajuda! E os valores numéricos da escala da janela indicadora são de 5 dígitos.
3. Com a remoção do indicador Comentário não é removido do gráfico.
Código
--------
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],
ExtMapBuffer2[];
//--------------------------------
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min_v2");
IndicatorDigits(Digits+1);
return(0);
}
//--------------------------------
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),limit,win_idx;
double top;
if(counted_bars>0)counted_bars--;
limit=Bars-counted_bars;
win_idx=WindowFind("MACD_max-min_v2");
for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
}
// top=WindowPriceMax(win_idx);
top=NormalizeDouble((WindowPriceMax(win_idx)),Digits+1);
Comment( "\n"," top = ",top);
ObjectDelete("max");
if(ObjectFind("max")!=win_idx)
{
ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);
}
return(0);
}
//+------------------------------------------------------------------+