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

 
Алексей КоКоКо:

Você pode me dizer como entender a documentação em geral? Estou realmente preocupado que nos exemplos de um simples objeto gráfico como texto, eles jogam na sua cara uma amostra com um monte de código e em nenhum lugar eles escrevem quais parâmetros são obrigatórios e quais não são. Então, para apenas escrever algum texto ou definir uma tendência ou mesmo entender os buffers para um indicador você não entende quais parâmetros mínimos devem ser inseridos e você tem que copiar e colar seu código

Olá, os parâmetros necessários para o texto são índice de janela, referência de coordenadas e o próprio texto, os outros são opcionais.

É preciso ter em mente que existem dois tipos de objetos, OBJ_LABEL e OBJ_TEXT. O primeiro objeto está vinculado aos pixels da janela e o segundo ao tempo e preço no gráfico.

Digamos que precisamos de uma etiqueta de texto ligada a pixels, então façamos isto:

   ObjectCreate(0,name,OBJ_LABEL,0,0,0); // создаём объект в текущем (нулевом окне)
   ObjectSetString(0,name,OBJPROP_TEXT,text); // указываем какой текст должен в нём отображаться
   ObjectSetString(0,name,OBJPROP_FONT,fontname); // назначаем шрифт например Verdana или Tahoma
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,fontsize); // назначаем размер шрифта
   ObjectSetInteger(0,name,OBJPROP_COLOR, text_color); // назначаем цвет шрифта
   ObjectSetInteger(0,name,OBJPROP_CORNER,text_corner); // указываем от какого угла окна отсчитывать пиксели
   ObjectSetInteger(0,name,OBJPROP_ANCHOR,text_anchor); // указываем как должен быть выровнен текст по центру или какому-то краю
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,XOFFSET); // указываем координату по горизонтали
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,YOFFSET); // указываем координату по вертикали
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false); // указываем можно ли выделять и двигать метку мышкой или нельзя

este é quase um código mínimo que desenha o rótulo de texto

o mesmo para o objeto OBJ_TEXT, mas você também precisa especificar o preço e as propriedades de tempo:

   ObjectSetDouble(0,name,OBJPROP_PRICE,0,price);
   ObjectSetInteger(0,name,OBJPROP_TIME,0,time);



text_corner deve ser um dos valores constantes:

ID

Descrição

CANTO_ESQUERDA_ACIMA

Centro de coordenadas no canto superior esquerdo do gráfico

CANTO_ESQUERDA_BAIXO

Centro de coordenadas no canto inferior esquerdo do gráfico

CANTO_DIREITA_BAIXO

Centro de coordenadas no canto inferior direito do gráfico

CORNER_RIGHT_UPPER

Centro de coordenadas no canto superior direito do gráfico


mais detalhes aqui: https://www.mql5.com/ru/docs/constants/objectconstants/enum_basecorner#enum_base_corner




text_corner deve ser um dos valores constantes:

Identificador

Descrição

ÂNCORA_ESQUERDA_ACIMA

Ponto de ancoragem no canto superior esquerdo

ANCHOR_LEFT

Âncora aponta para a esquerda no centro

ANCHOR_LEFT_LOWER

Ponto de ancoragem no canto inferior esquerdo

ANCHOR_LOWER

Ponto de ancoragem abaixo do centro

ANCHOR_RIGHT_LOWER

Ponto de ancoragem no canto inferior direito

ANCHOR_RIGHT

Âncora aponta para a direita no centro

ANCHOR_RIGHT_UPPER

Ponto de ancoragem no canto superior direito

ANCHOR_UPPER

Ponto de ancoragem no centro superior

ANCHOR_CENTER

Ponto de ancoragem exatamente no centro do objeto


mais detalhes aqui:https://www.mql5.com/ru/docs/constants/objectconstants/enum_basecorner



você também pode conectar a biblioteca padrão #include <ChartObjects\ChartObject.mqh> e usar suas classes, mas isso só complica sua vida na minha opinião

 
transcendreamer:

Saudações, parâmetros obrigatórios para o texto são índice de janela, vinculação de coordenadas e o próprio texto, outros são opcionais.

Tenha em mente que existem dois tipos de objetos: OBJ_LABEL e OBJ_TEXT. O primeiro está vinculado aos pixels da janela e o segundo ao tempo e preço no gráfico.

Digamos que precisamos de uma etiqueta de texto ligada a pixels, então façamos isto:

este é quase um código mínimo que desenha o rótulo de texto

o mesmo para o objeto OBJ_TEXT, mas você só precisa definir as propriedades de preço e tempo:


Deus o abençoe )Não é apenas o texto, mas muitas coisas, até mesmo os amortecedores indicadores. O que está no carrinho removido?)

 
Алексей КоКоКо:

Deus o abençoe )Não é apenas o texto, são muitas coisas, até mesmo os amortecedores indicadores. Por que você foi excluído do carrinho?)

Eu excluí do carrinho como de costume porque estava paranóico e os chexistas não me descobriram 😀 Não tenho idéia do que fazer com o carrinho.

 
Artyom Trishkin:

E a opção certa é, bem, muito simples...

E o que é isso? Por que você não anota isso?

 
Olá a todos, eu inseri em uma EA "starhour and stophour" para abrir pedidos em uma determinada hora, mas não considerei que o pedido que foi aberto por exemplo às 22:00 não será fechado em stophour(23:00)
Não tenho nenhum sinal indicador para fechar a posição antes e depois das 23h00 é proibido tomar qualquer decisão.

Favor aconselhar como fazer a EA para poder fechar as posições abertas após o horário de expediente (23:00).
Ou simplesmente fechar todas as posições às 23h00, de modo a não mantê-las a noite toda.


Obrigado de antemão
 
Eugen8519:
Olá a todos, eu inseri em uma EA "starhour and stophour" para abrir pedidos em uma determinada hora, mas não considerei que um pedido que foi aberto por exemplo às 22:00 não será fechado em stophour(23:00)
Não tenho nenhum sinal indicador para fechar a posição antes e depois das 23h00 é proibido tomar qualquer decisão.

Favor aconselhar como fazer a EA para poder fechar as posições abertas após o horário de expediente (23:00).
Ou simplesmente fechar todas as posições às 23h00, de modo a não mantê-las a noite toda.


Obrigado de antemão

colocar "starhour and stophour" somente em pedidos abertos

 
MakarFX:

colocar "starhour and stophour" somente em pedidos de abertura

Esse é o problema - só abre e fecha pedidos de starthour->stophour
E os pedidos abertos não são fechados após o horário de atendimento

Você não pode negociar após o estofamento



Os parâmetros globais são definidos

bool           UseTimeLimit = true;
int            startHour    = 15;
int            stopHour     = 23;
bool           YesStop=false;
input          ENUM_TIMEFRAMES Timeframe = PERIOD_CURRENT;



E no OnTick

if(UseTimeLimit)
  {
    YesStop=true;
    MqlDateTime str1;
    TimeToStruct(TimeCurrent() , str1);
    if(str1.hour > startHour && str1.hour < stopHour)
       YesStop=false;
       if (YesStop)
       return;
  }
 
Eugen8519:
Esse é o problema, ele só abre e fecha ordens de Starthour->stophour
E as ordens abertas não fecham após o horário de verão.
Mostrar função de fechamento de pedidos
 
Eugen8519:
Esse é o problema, ele só abre e fecha ordens de Starthour->stophour
E as ordens abertas não fecham após o horário de verão.

algo como isto

if(UseTimeLimit)
  {
    YesStop=true;
    MqlDateTime str1;
    TimeToStruct(TimeCurrent() , str1);
    if(str1.hour > startHour && str1.hour < stopHour)
       YesStop=false;
       if (YesStop)
       return;
  }
....
if(YesStop==false)
  {
   условие для открытия ордеров
  }
 
MakarFX:

algo como isto

É assim que o pedido é encerrado



(EMA0[m_bar_current]<WMA0[m_bar_current] && EMA0[m_bar_current+1]>WMA0[m_bar_current+1]) //Buy
     {
      if(!RefreshRates())
         return;
      TimeBar=time_0;
      CLOSEORDER("Sell");
     }
//if(color_buffer[m_bar_current+1]<color_buffer[m_bar_current]) //Sell
   if(EMA0[m_bar_current]>WMA0[m_bar_current] && EMA0[m_bar_current+1]<WMA0[m_bar_current+1]) //Sell
     {
      if(!RefreshRates())
         return;
      TimeBar=time_0;
      CLOSEORDER("Buy");
     }


void CLOSEORDER(string ord)
  {
   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY && ord=="Buy")
               m_trade.PositionClose(m_position.Ticket());  // Close Buy
            if(m_position.PositionType()==POSITION_TYPE_SELL && ord=="Sell")
               m_trade.PositionClose(m_position.Ticket()); // Close Sell
           }
  }
Razão: