Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1269

 
Kira27:

Tentei tudo o que sugeriu, torcido e virado, mas ainda pinta linhas de uma cor em MT5. E em MT4 pinta linhas normalmente, e sem qualquer atraso.

Acho que ainda não experimentei tudo.

Alexey Viktorov:

É muito provável que após renomear um objecto ainda não esteja disponível para referência a ele. Pode tentar colocar ChartRedraw depois de renomear. Se isso não ajudar, teremos de construir a sequência de outra forma.

ps; Outra opção: primeiro repintar com o nome sparam e depois dar-lhe um novo nome.

Por alguma razão, o evento CHARTEVENT_OBJECT_CREATE conta imediatamente após o rato tocar no gráfico, e não após terminar a criação do objecto. E os preços das diferentes pontas do rastilho acabam por ser os mesmos. Por isso, é necessário repintar depois de o objecto ser criado.

E mais uma observação: pinta níveis ou a linha principal do pavio?

Aqui estão três variantes:

Um.

bool endCreate;
string newName;
/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
  if(endCreate)
   {
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
    endCreate = false;
   }
 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  if(id == CHARTEVENT_OBJECT_CREATE)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
    endCreate = true;
   }
 }/******************************************************************/

Segundo.

/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {

 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  string newName;  
  if(id == CHARTEVENT_OBJECT_CREATE)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
   }
  if(id == CHARTEVENT_OBJECT_DRAG)
   {
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
   }
 }/******************************************************************/

Três.

/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  if(id == CHARTEVENT_OBJECT_DRAG)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    string newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
   ChartRedraw(); 
  }
 }/******************************************************************/


 
SanAlex:

como organizar um algoritmo num indicador para tomar pontos e transferi-los para outro amortecedor.

- Para traçar as linhas de tendência. (como na fotografia)

-----------------------------------------

Tentei tudo com intuição, eles são desenhados mas em lugares estranhos.

-----------------------------------------------------------------------------------------------------

Anexei o indicador, ele funciona, mas não consigo ajustar estas linhas.

Não o posso fazer. Talvez alguém me possa orientar para os artigos sobre os pontos de ligação da linha de tendência.

-- Não posso desenhá-los, não é claro em que pontos.

EURUSDH4

---------------------------------------------------------

algo do género, talvez?

//--- найдем максимальное и минимальное значение графика
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования линии
   int d1=InpDate1*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
//--- количество видимых баров в окне графика
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- размер массива price
   int accuracy=1000;
//--- массивы для хранения значений дат и цен, которые будут использованы
//--- для установки и изменения координат точек привязки линии
   datetime date[];
   double   price[];
//--- выделение памяти
   ArrayResize(date,bars);
   ArrayResize(price,accuracy);
//--- заполним массив дат
   ResetLastError();
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
     {
      Print("Не удалось скопировать значения времени! Код ошибки = ",GetLastError());
      return;
     }
//--- заполним массив цен
//--- найдем максимальное и минимальное значение графика
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования линии
   int d1=InpDate1*(bars-1)/100;
   int d2=InpDate2*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
   int p2=InpPrice2*(accuracy-1)/100;
//--- создадим линию тренда
   if(!TrendCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,InpStyle,
      InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
     {
      return;
     }



-------------------

estou no caminho certo ????

Arquivos anexados:
2.mq5  82 kb
 
SanAlex:

Talvez alguém me possa orientar para artigos sobre pontos de linha de tendência.

-- tudo o que posso fazer agora é desenhá-los, não é claro em que pontos.

---------------------------------------------------------

algo do género, talvez?

-------------------

estou no caminho certo ????

As linhas de tendência são desenhadas em 2 pontos, ou são os dados de preço ou os dados de outro indicador, o exemplo do desenho por fractais, que, a propósito, já conhece)

https://www.mql5.com/ru/code/29210

Line through two fractals
Line through two fractals
  • www.mql5.com
cm BASKET Советник управляющий счетом. Показывает какие пары инструментов сейчас торгуются на данном счете. Показывает прибыль полученную по каждой паре за определенное время. Помогает переключаться между множества открытых окон... Virtual Trailing Stop 2
 
VVT:

Aslinhas de tendência são desenhadas em 2 pontos, ou são dados de preços ou dados de outro indicador, um exemplo de desenho por fractais, que, a propósito, lhe é familiar)

https://www.mql5.com/ru/code/29210

Eu queria fazê-lo com um indicador, mas não funcionou.

- Tive de o fazer com dois indicadores.

Foi o que eu fiz.

GBPUSDM30 GOTOV

---------------------------

Esqueci-me de dizer obrigado! - Obrigado!!!

 
SanAlex:

Eu queria fazê-lo num Indicador, mas não funcionou, mas fi-lo neste, que sugeriu.

- por isso, tive de o fazer com dois Indicadores.

Foi assim que funcionou.

---------------------------

Esqueci-me de dizer obrigado! - Obrigado!!!

Combinando-os bem, é possível criar muitos objectos diferentes num único indicador)

 
Alexey Viktorov:

Aparentemente ainda não tentei tudo.

Por alguma razão, o evento CHARTEVENT_OBJECT_CREATE conta imediatamente após o rato tocar no gráfico, e não após o objecto ser criado. E os preços das diferentes pontas do rastilho acabam por ser os mesmos. Por isso, temos de a repintar depois do objecto ser criado.


Como determinou isto? Logicamente?

E outra observação: pinta níveis ou a linha principal da fibra?


Tentei repintar linhas de tendência em diferentes variantes))))

Aqui estão três variantes:

Um.

Segundo.

A Terceira.


Muito obrigado por isso!!! Posso aprender a pensar de forma lógica, com base nos vossos exemplos))))

Está envolvido na codificação, ou no comércio? quer dizer, há quanto tempo está a negociar? há 12 anos))))

 
Kira27:

Muito obrigado pelas opções!!! Vou usar os vossos exemplos e aprender a pensar logicamente))))

Há 12 anos que o faço).

Nem sempre sou tão "gentil". Nem sempre sou tão "gentil", apenas durante os ataques... Por isso, não há muito a aprender com os meus exemplos. Estou no comércio quase há tanto tempo.

 
Alexey Viktorov:

Nem sempre sou tão "gentil". Só durante os ataques... Por isso, não há muito a aprender com os meus exemplos. O mesmo se passa com o comércio.

Não sei, estou a aprender melhor os métodos e técnicas de programação através de exemplos. Quem me dera que a MQL5 tivesse um tutorial como o MQL4 onde o robô fosse explicado passo a passo usando ficheiros incluídos.

 
Alexey Viktorov:

Estou no comércio há quase tanto tempo.

Então já conhece a essência das flutuações do mercado? Parece-me que já aprendi)))) Só preciso de o perguntar, porque posso trabalhar com ele durante um certo tempo, e depois parto e crio uma)))))) Mas agora compreendo qualquer bem)))) Gosto especialmente da S&P, é técnica e dinâmica))

 
VVT:

Bem, combinando-os, é possível criar muitos objectos diferentes num único indicador)

Queria fazê-lo dessa forma. Há uma semana que o tento fazer, mas não iria funcionar.

- Parece ser melhor no segundo indicador - não se pode ver pontos passados e as próprias linhas, existem apenas os pontos e níveis que são utilizados para determinar as entradas no mercado.

----------------

estes dois indicadores são um (este é o meu esboço - não mudei os nomes de 4 indicadores no mesmo)