Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1080

 
Artyom Trishkin:

A melhor recomendação aqui é ler a ajuda com mais freqüência.

Especifica as propriedades que podem ser recuperadas/estabelecidas para o gráfico.

Em particular - rolando o gráfico com o botão esquerdo do mouse.

Este é o lugar na documentação que eu li.

Quando CHART_EVENT_MOUSE_MOVE = 1, o gráfico recebe mensagens de movimento do mouse, mas quando CHART_EVENT_MOUSE_MOVE = 0, ele não recebe. Isto é compreensível.
Mas não é relevante para a minha pergunta... Não importa o valor definido para CHART_EVENT_MOUSE_MOVE, eu sempre tenho a possibilidade de "mover" o gráfico com o AUTOSCROLL desligado
"deslocar" o gráfico na janela para o passado (em termos de tempo) simplesmente pressionando o botão esquerdo do mouse e sem soltar o botão deslocar o mouse para a direita.
Isto desloca o gráfico na janela SEMPRE.
Entretanto, se eu pressionar Ctrl+F (para chamar o Crosshair) - então quando eu apertar o botão esquerdo do mouse, mantê-lo pressionado e mover o gráfico, eu verei o feixe
a ponta da ferramenta mostrará dados sobre o movimento do mouse e o preço do nível em que o ponteiro do mouse está localizado.
E o mais importante - o gráfico em si naquele momento não se moverá na janela.

É assim que se consegue este efeito sem habilitar o Crosshair, é o que eu peço...

P.S. Eu posso pegar um vídeo da tela e mostrar como ela fica.

 
Maksims Ignatovs:

Eu li este lugar na documentação.

Quando CHART_EVENT_MOUSE_MOVE = 1, o gráfico recebe mensagens sobre o movimento do mouse, mas se CHART_EVENT_MOUSE_MOVE = 0, não recebe. Isto é compreensível.
Mas não é relevante para a minha pergunta... Não importa o valor definido para CHART_EVENT_MOUSE_MOVE, eu sempre tenho a possibilidade de "mover" o gráfico com o AUTOSCROLL desligado
"deslocar" o gráfico na janela para o passado (em termos de tempo) simplesmente pressionando o botão esquerdo do mouse e sem soltar o botão deslocar o mouse para a direita.
Isto desloca o gráfico na janela SEMPRE.
Entretanto, se eu pressionar Ctrl+F (para chamar o Crosshair) - então quando eu apertar o botão esquerdo do mouse, mantê-lo pressionado e mover o gráfico, eu verei o feixe
a ponta da ferramenta mostrará dados sobre o movimento do mouse e o preço do nível em que o ponteiro do mouse está localizado.
E o mais importante - o gráfico em si naquele momento não se moverá na janela.

É assim que se consegue este efeito sem ligar o Crosshair, é o que eu peço...

P.S. Eu posso pegar um vídeo da tela e mostrar como ela é.

Não respondi a isso?
Se você deslocar algo na carta com o mouse, você proíbe deslocar a carta neste ponto. Assim que você solta o botão do mouse, você permite que o gráfico mude.

 

Os campos de uma estrutura podem ser acessados usando indexação, ou seja, como uma matriz unidimensional? É possível criar um conjunto de campos de estrutura?

Portanto, a idéia é esta. Há uma estrutura

struct MyStruct {int qw;double qe;}; MyStruct qr; 
//пример по сложнее
struct MyStruct1{int qw[5];double qe[5];}; MyStruct1 qr1;

Então, ao passar qualquer estrutura para uma função, temos que tratar cada elemento pelo nome separadamente.

qr.qw qr.q51e, etc. Naturalmente, você não poderá colocá-lo em um loop e processá-lo com um único fio. Quero criar um conjunto de campos que irão armazenar esses itens da seguinte forma

Massiv[2];
//Massiv[0] отвечает за эту запись qr.qw
//Massiv[1] отвечает за эту запись qr.qе

Como resultado, podemos abordar estes itens através de indexação e, é claro, a segunda estrutura pode ser colocada em um loop e tratar qw qe através do loop.

É possível fazer isso, já vi tais entradas na Internet há algum tempo, mas talvez eu tenha entendido mal alguma coisa porque perdi o site? Talvez as macros sindicais da typedef enum possam ajudar neste assunto?

 
Artyom Trishkin:
Não respondi a isso?
Se você move algo no gráfico com o mouse, você desativa o deslocamento do gráfico naquele momento. Assim que você solta o botão do mouse, você permite que o gráfico mude.

Eu não movo nada na tabela. Se eu definirCHART_EVENT_MOUSE_MOVE = 0 não ajuda - o gráfico ainda pode ser movido.
Eu não seicomo desativar o processamento de ChartNavigate para o gráfico. Eu também não o encontrei na documentação.
Ao mesmo tempo, a "mira", de alguma forma, lida com este caso. É por isso que estou perguntando - como?
Você me responde - basta definir o valor correto paraCHART_EVENT_MOUSE_MOVE. Eu tentei - não ajuda.
Com qualquer valor de
CHART_EVENT_MOUSE_MOVE, você ainda pode mover o gráfico com o mouse para frente e para trás no tempo, simplesmente segurando o botão esquerdo do mouse sobre o gráfico e movendo o mouse.
Ao mesmo tempo, dependendo da direção do movimento horizontal do mouse, o gráfico mudará na janela Se eu mover o mouse para a direita, o gráfico mudará para a esquerda (para o histórico passado),
e se eu mover o mouse para a esquerda, o gráfico mudará para o futuro até que a barra atual apareça. Depois disso, uma tentativa de movê-lo para a esquerda com o mouse não vai funcionar. Mas isto é compreensível.
Se eu
mover o gráfico na janela para alguma data no passado usando ChartNavigate, o que devo fazer para garantir que sob nenhuma circunstância (sem manipulações com cliques e movimentos do mouse no gráfico), a parte do gráfico que eu vejo não será deslocada? O que eu tenho que fazer?


 
Maksims Ignatovs:

Eu não movo nada na tabela. Se eu definir CHART_EVENT_MOUSE_MOVE = 0 não ajuda - o gráfico ainda pode ser movido.
Eu não sei como desativar o processamento de ChartNavigate para o gráfico. Eu também não o encontrei na documentação.


ChartSetInteger(0, CHART_MOUSE_SCROLL, 0); // Выключим прокрутку графика
 
Boa tarde, por favor conserte o indicador, você precisa exibir o tempo do servidor através do botão, desde que o botão em sua posição original deva mostrar
Isto é o que eu NÃO consegui:
#property copyright "Copyright 2014, ForexDE"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window

string s1="";

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{

   PutButton("B",50,50,"KNOPKA");
   
   if(DayOfWeek()==1)
      s1="Понедельник  /  ";
   if(DayOfWeek()==2)
      s1="Вторник  /  ";
   if(DayOfWeek()==3)
      s1="Среда  /  ";
   if(DayOfWeek()==4)
      s1="Четверг  /  ";
   if(DayOfWeek()==5)
      s1="Пятница  /  ";
   if(DayOfWeek()==6)
      s1="Суббота  /  ";
   if(DayOfWeek()==0)
      s1="Воскресенье  /  ";

   ObjectCreate("WeekDay1",OBJ_LABEL,0,0,0);          
   ObjectSet("WeekDay1",OBJPROP_CORNER,CORNER_RIGHT_LOWER);
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,5);
   ObjectSet("WeekDay1",OBJPROP_YDISTANCE,2);
   ObjectSet("WeekDay1",OBJPROP_SELECTABLE,false);
   ObjectSet("WeekDay1",OBJPROP_HIDDEN,true);
   ObjectSet("WeekDay1",OBJPROP_ANCHOR,ANCHOR_RIGHT_LOWER);
   ObjectSet("WeekDay1",OBJPROP_COLOR,Black);
   ObjectSet("WeekDay1",OBJPROP_SELECTABLE,false);
   ObjectSet("WeekDay1",OBJPROP_SELECTED,false);
   ObjectSetText("WeekDay1",s1+TimeToString(CurTime(),TIME_DATE)+"  -  " +TimeToString(CurTime(),TIME_SECONDS),13,"Arial",Red);
   
   return(INIT_SUCCEEDED);
}
/****************Custom indicator iteration function*****************/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
 {
 
   if(DayOfWeek()==1)
      s1="Понедельник  /  ";
   if(DayOfWeek()==2)
      s1="Вторник  /  ";
   if(DayOfWeek()==3)
      s1="Среда  /  ";
   if(DayOfWeek()==4)
      s1="Четверг  /  ";
   if(DayOfWeek()==5)
      s1="Пятница  /  ";
   if(DayOfWeek()==6)
      s1="Суббота  /  ";
   if(DayOfWeek()==0)
      s1="Воскресенье  /  ";
 
   ObjectSetText("WeekDay1",s1+TimeToString(CurTime(),TIME_DATE)+"  -  " +TimeToString(CurTime(),TIME_SECONDS),13,"Arial",Red);

  return(rates_total);
 }/*******************************************************************/

/********************************************************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {

  if(id == CHARTEVENT_CLICK)
   {
   
         if(!ObjectGetInteger(0,"B",OBJPROP_STATE,false))
           {
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,7000); // скрываю 
           }
         else
           {
   ObjectSet("WeekDay1",OBJPROP_XDISTANCE,5);    // показываю обратно
           }
   


   }
   
 }
/*******************************************************************/
void PutButton(string name,int x,int y,string text)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,2);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
  }
 

vebster005:
Добрый день, исправьте пожалуйста индикатор, нужно вывести серверное время через кнопку, при условии что кнопка в исходном положении должна показывать
Вот что у меня НЕ получилось:

O que exatamente você não conseguiu fazer? ou seja, em suas próprias palavras, o que você queria fazer...

um botão é feito, quando você pressiona, ele sai da tela (se não for largo)

por que você não está satisfeito com o resultado?

 
Maxim Kuznetsov:

O que exatamente você não conseguiu fazer? ou seja, em suas próprias palavras, o que você queria fazer...

um botão é feito, quando você pressiona, ele sai da tela (se não for largo)

O que há de errado com o resultado?

o resultado é que quando você clicou no botão o tempo foi escondido e depois reapareceu porque é atualizado por causa do fato de que na calculadora

 
Maxim Kuznetsov:

o que exatamente não funcionou ? ou seja, em suas próprias palavras o que você queria fazer...

um botão é feito, quando você pressiona, ele sai da tela (se não for largo)

por que você não está satisfeito com o resultado?

Você poderia fazê-lo funcionar por segundos e tudo mais, como no terminal, e você pode desativar o botão
porque quando eu desativo o botão (removê-lo da tela), o tempo reaparece

 
vebster005:

Você poderia obter o resultado de que segundos e tudo mais funciona, como no terminal, e você pode desativar o botão
porque quando eu desativo o botão (removê-lo da tela), o tempo reaparece

Há muitas pessoas aqui que podem alcançar quase todos os resultados.

É importante que você mesmo tente alcançá-los, em vez de pedir aos outros que o façam por você. Eles estão sempre dispostos a ajudar, mas a ajudar, não a fazer isso por você.