Você pode desenhar níveis inclinados do outro lado?
Ou seja, desenhar linhas de suporte e resistência não a partir da parte inferior quando estiver subindo, mas, ao contrário, a partir da parte superior?
Sim, claro, não é tão difícil quanto parece.
Pessoal experiente, por favor, me digam como encontrar a máxima alta e a mínima para o número definido de barras em MQL5
Por exemplo, no mql4 é fácil fazer isso.
_High = NormalizeDouble(iHigh(Symb,PERIOD_CURRENT,iHighest(Symb,PERIOD_CURRENT,MODE_HIGH,CanalBar,0)), Digits); // calcular o preço máximo mais alto para o último CanalBar _Low = NormalizeDouble(iLow (Symb,PERIOD_CURRENT,iLowest (Symb,PERIOD_CURRENT,MODE_LOW, CanalBar,0)), Digits); // calcular o preço mínimo mais baixo para o último CanalBar
Aqui, simplesmente pegamos o que encontramos e desenhamos uma linha no gráfico.
Mas como encontrar o máximo e o mínimo para o número de barras em mql5 é um quebra-cabeça. iHighest e iLowest
Pelo que entendi, não há um entendimento simples aqui.
Ficarei grato se puder me ajudar e, se houver um código de exemplo, seria ótimo em geral.
Obrigado.
Pessoal experiente, por favor, me digam como encontrar a máxima alta e a mínima para o número definido de barras em MQL5
Por exemplo, no mql4 é fácil fazer isso.
Aqui, simplesmente pegamos o que encontramos e desenhamos uma linha no gráfico.
Mas como encontrar o máximo e o mínimo para o número de barras em mql5 é um quebra-cabeça. iHighest e iLowest
Pelo que entendi, não há um entendimento simples aqui.
Ficarei grato se puder me ajudar, e se houver um exemplo de código, seria ótimo em geral.
_High = NormalizeDouble(high[ArrayMaximum(high, 0, CanalBar)], Digits); // calcular o preço máximo mais alto para o último CanalBar
onde high é uma matriz de preços de barras altas
se for um indicador, ele virá para você em OnCalculation,
se estiver no Expert Advisor, solicite-o via CopyHigh.
Não se esqueça do ArraySetAsSeries true
Obrigado.
SPS
Pessoal experiente, por favor, me digam como encontrar a máxima alta e a mínima para o número definido de barras em MQL5
Por exemplo, no mql4 é fácil fazer isso.
Aqui, simplesmente pegamos o que encontramos e desenhamos uma linha no gráfico.
Mas como encontrar o máximo e o mínimo para o número de barras em mql5 é um quebra-cabeça. iHighest e iLowest
Pelo que entendi, não há um entendimento simples aqui.
Ficarei grato se puder me ajudar, e se houver um exemplo de código, seria ótimo em geral
Obrigado.
Você confunde comandos de consulta geral a todos os dados com comandos de consulta aos dados atuais, o que, nesse caso, é desnecessário.
//para dados atuais (o acesso aos dados atuais de qualquer EA ou indicador) será _High=NormalizeDouble(High[iHighest(Symb,_Period,MODE_HIGH,CanalBar)],_Digits); //para dados gerais (acesso de qualquer EA ou indicador a qualquer dado no banco de dados) será _High=NormalizeDouble(iHigh(Symb,PERIOD_CURRENT,iHighest(Symb,PERIOD_CURRENT,MODE_HIGH,CanalBar)),MarketInfo(Symb,MODE_DIGITS));
E agora sobre o código no mt5.
double high[]; ArrayResize(high,CanalBar); CopyHigh(Symb,PERIOD_CURRENT,0,CanalBar,high); _High=NormalizeDouble(high[ArrayMaximum(high)],SymbolInfoInteger(Symb,SYMBOL_DIGITS)); ArrayFree(high);
Nesse caso, o acesso a qualquer dado no banco de dados para qualquer símbolo de qualquer indicador ou EA é fornecido.
não há necessidade de se preocupar com a direção da indexação, pois precisamos apenas do máximo, não importa onde ele esteja localizado.
o comando ArrayMaximum() (de acordo com a ajuda) retorna o valor necessário levando em conta a direção da indexação da matriz.
c/u.
P.S. Eu não normalizaria o preço, pois isso é desnecessário, a menos, é claro, que você esteja criando um pipsmith que capture 1 ponto de uma negociação.
Primeiramente, no seu código, eu o simplificaria com base no fato de que você solicita a máxima no gráfico atual. Darei um exemplo para os topos; para as baixas, tudo é quase igual.
Você confunde comandos de solicitação geral de todos os dados com comandos de solicitação dos dados atuais, o que, nesse caso, é desnecessário.
e agora sobre o código no mt5.
Nesse caso, o acesso a qualquer dado no banco de dados para qualquer símbolo de qualquer indicador ou EA é fornecido.
não há necessidade de se preocupar com a direção da indexação, pois precisamos apenas do máximo, não importa onde ele esteja localizado.
O comando ArrayMaximum() (de acordo com a ajuda) retorna o valor necessário levando em conta a direção da indexação da matriz.
c/u.
P.S. Eu não normalizaria o preço, isso é desnecessário, a menos que você esteja criando um pipsmith que capture 1 ponto de uma negociação.
Ótimo, está tudo resolvido
Agora temos outra pergunta
A implementação é a seguinte
input int CanalBar = 200; // Número de barras a serem calculadas //+------------------------------------------------------------------+ //| Função de tique de especialista| //+------------------------------------------------------------------+ void OnTick() { double high[]; ArrayResize(high,CanalBar); CopyHigh(_Symbol,PERIOD_CURRENT,0,CanalBar,high); double _High=NormalizeDouble(high[ArrayMaximum(high)],SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)); ArrayFree(high); HLineCreate(0,"HIGH",0,_High,"",clrBlue,1,1); // Desenhe uma linha no gráfico. } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Cria uma linha horizontal| //+------------------------------------------------------------------+ //| Baseado em:| //| Guia de Referência MQL5 / Constantes padrão, enums e estruturas| //| / Constantes de objeto / Tipos de objeto / OBJ_HLINE | //+------------------------------------------------------------------+ bool HLineCreate(const long chart_ID=0, // ID do gráfico const string name="HLine", // nome da linha const int sub_window=0, // número da subjanela double price=0, // preço da linha const string toolTip="\n", // texto da dica de ferramenta const color clr=clrRed, // cor da linha const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo de linha const int line_width=1, // espessura da linha const bool back=false, // em segundo plano const bool selection=true, // selecione para mover const bool hidden=true, // oculto na lista de objetos const long z_order=0, // prioridade de clique do mouse const int timeFrames=OBJ_ALL_PERIODS)//exibe o objeto em diferentes períodos { //--- redefinir o valor do erro ResetLastError(); //--- criar uma linha horizontal if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price)) { Print(LINE_NUMBER,__FUNCTION__, ": failed to create a horizontal line! Error code = ",GetLastError()); return(false); } //--- definir o texto da dica de ferramenta ObSetString(chart_ID,name,OBJPROP_TOOLTIP,toolTip); //--- definir a cor da linha ObSetIntegerColor(chart_ID,name,OBJPROP_COLOR,clr); //--- definir o estilo de exibição da linha ObSetIntegerLineStyle(chart_ID,name,style); //--- definir a espessura da linha ObSetIntegerInt(chart_ID,name,OBJPROP_WIDTH,line_width); //--- exibição em primeiro plano (falso) ou em segundo plano (verdadeiro) ObSetIntegerBool(chart_ID,name,OBJPROP_BACK,back); //--- ativar (true) ou desativar (false) o modo de movimento da linha do mouse //--- ao criar um objeto gráfico com a função ObjectCreate, por padrão o objeto //--- não pode ser selecionado e movido. Dentro desse método, o parâmetro de seleção //--- o padrão é true, o que permite selecionar e mover esse objeto ObSetIntegerBool(chart_ID,name,OBJPROP_SELECTABLE,selection); ObSetIntegerBool(chart_ID,name,OBJPROP_SELECTED,selection); //--- ocultar (true) ou exibir (false) o nome do objeto gráfico na lista de objetos ObSetIntegerBool(chart_ID,name,OBJPROP_HIDDEN,hidden); //--- definir a prioridade para receber o evento de clique do mouse no gráfico ObSetIntegerLong(chart_ID,name,OBJPROP_ZORDER,z_order); //--- definição da visibilidade do objeto em diferentes períodos de tempo ObSetIntegerInt(chart_ID,name,OBJPROP_TIMEFRAMES,timeFrames); //--- execução bem-sucedida return(true); }
Ao iniciar o teste visual, a linha no gráfico é desenhada, mas fica parada, a linha não altera seus valores no decorrer do teste. No mql5, é necessário dar aos cálculos um chute adicional no traseiro de alguma forma?
Muito bem, já está tudo resolvido.
Agora, aqui está outra pergunta
A implementação é a seguinte
Quando você inicia o teste visual, a linha no gráfico é desenhada, mas fica parada, sua linha de valores não muda durante o teste, no mql5 você precisa adicionalmente, de alguma forma, dar um chute no traseiro dos cálculos?
Tente isso:
void HLineCreate(const long chart_ID=0, // ID do gráfico const string name="HLine", // nome da linha const int sub_window=0, // número da subjanela double price=0, // preço da linha const string toolTip="\n", // texto da dica de ferramenta const color clr=clrRed, // cor da linha const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo de linha const int line_width=1, // espessura da linha const bool back=false, // em segundo plano const bool selection=true, // selecione para mover const bool hidden=true, // oculto na lista de objetos const long z_order=0, // prioridade de clique do mouse const int timeFrames=OBJ_ALL_PERIODS)//exibe o objeto em diferentes períodos { if(ObjectFind(chart_ID, name)<0) { //--- criar uma linha horizontal ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price); //--- definir o texto da dica de ferramenta ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,toolTip); //--- definir a cor da linha ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- definir o estilo de exibição da linha ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); //--- definir a espessura da linha ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width); //--- exibição em primeiro plano (falso) ou em segundo plano (verdadeiro) ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); //--- ativar (true) ou desativar (false) o modo de movimento da linha do mouse //--- ao criar um objeto gráfico com a função ObjectCreate, por padrão o objeto //--- não pode ser selecionado e movido. Dentro desse método, o parâmetro de seleção //--- o padrão é true, o que permite selecionar e mover esse objeto ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); //--- ocultar (true) ou exibir (false) o nome do objeto gráfico na lista de objetos ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); //--- definir a prioridade para receber o evento de clique do mouse no gráfico ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); //--- definição da visibilidade do objeto em diferentes períodos de tempo ObjectSetInteger(chart_ID,name,OBJPROP_TIMEFRAMES,timeFrames); } //--- definir o método de vinculação ObjectSetDouble(chart_ID,name,OBJPROP_PRICE,price); }
Tudo bem, isso já foi resolvido.
Agora, aqui está outra pergunta
A implementação é a seguinte
Quando você inicia o teste visual, a linha no gráfico é desenhada, mas fica parada, sua linha de valores não muda durante o teste, no mql5 isso precisa adicionalmente, de alguma forma, dar aos cálculos um chute no traseiro?
if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price))se já houver um objeto com esse nome não está implementado, como consequência, seu preço na linha existente não será alterado.
como lhe foi dito corretamente, isso deve ser feito por comando.
ObjectSetDouble(chart_ID,name,OBJPROP_PRICE,price);E mais uma observação, tente não se envolver em classes e outras sabedorias, se houver a possibilidade de escrever de forma mais simples, usando comandos de acesso direto.
aplique apenas os comandos que forem necessários, não é preciso passar por todos os parâmetros da linha a cada acesso, pois você precisa alterar apenas o preço da linha.
com todo o respeito.
Obrigado, pessoal, já está tudo resolvido.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Exemplo de indicador que constrói uma linha de suporte e resistência foi publicado:
O artigo mostra a implementação de um indicador para construção de linhas de suporte e de resistência com base em condições formais. Você não só poderá aplicar o indicador, mas também entenderá quão fácil é realizá-lo. Agora você será capaz de formular as condições para desenhar linhas alterando o código do indicador ligeiramente para atender às suas necessidades.
Quais são os critérios que aplicaremos à seleção do segundo ponto? Em primeiro lugar, podemos tomar o segundo fractal, que vai depois do nosso primeiro ponto, uma vez que isso faz com que se mostre a linha mais próxima. Mas podemos usar outras regras de seleção, por exemplo, o ponto mais alto no gráfico, a linha através da qual o preço ainda não cruzou para cima até a linha de resistência (ou o ponto mais baixo no gráfico, a linha através da qual o preço ainda não cruzou para baixo até a linha de suporte). Vocês podem definir suas regras para a seleção do segundo ponto. Nós consideramos o segundo fractal mais próximo, segundo ele construímos as linhas de suporte e resistência.
Autor: Andrey Kisselyov