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

 
ANDREY:

Obrigado pelas valiosas informações.

Por favor, informe, como armazenar em uma variável qual expressão é verdadeira? Para ser mais preciso - qual é o mínimo calculado na função em relação a uma vela de que prazo? Como salvar o identificador deste período de tempo em uma variável?
Obrigado

Basta declarar variáveis bool

bool variant_H4 = Bid-iLow( NULL ,PERIOD_H4,1) >= 0.0030,
     variant_H1 = Bid-iLow(NULL ,PERIOD_H1,1) >= 0.0030,
     variant_M30 = Bid-iLow(NULL ,PERIOD_M30,1) >= 0.0030;
if (variant_H4 || variant_H1 || variant_M30)
 
Alexey Viktorov:

Basta declarar variáveis bool

Obrigado pela informação útil.

Você poderia me dizer como salvar um valor de 5 dígitos em uma variável amarela se o teste for feito em um gráfico de minutos?

double LoU;
void OnTick()
{
if (Bid - iLow( NULL ,PERIOD_H4,1)>=0.0030||Bid - iLow( NULL ,PERIOD_H1,1)>=0.0030||Bid - iLow( NULL ,PERIOD_M30,1)>=0.0030)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
LoU = (ЛОУ из выражения, которое оказалось истинным);
}
}

Obrigado.

 
Boa tarde! Você pode me dizer como ligar o texto a uma linha em mql4, de modo que quando esta última é movida, a inscrição também é deslocada, como nas capturas de tela. Sei que há duas maneiras de amarrar um objeto: em pixels no canto da tela e em coordenadas de tempo/preço. No primeiro caso, recebo um texto estático e, no segundo caso, não é bem o que eu quero. Com a coordenada de preço (encadernação vertical) é claro - eu pego o preço da linha e adiciono um par de _Ponto a ela, de modo que o texto seria um pouco mais alto do que a linha. Mas e o tempo? Não quero me prender à última barra porque o deslocamento diferente do gráfico puxará o texto para a direita - para a esquerda. Aqui eu gostaria de fazer uma ligação horizontal rígida à borda direita da tela, mas não entendo como.
 
Oleksandr Nozemtsev:
Boa tarde! Você pode me dizer como ligar o texto a uma linha em mql4, de modo que quando esta última é movida, a inscrição também é deslocada, como nas capturas de tela. Sei que há duas maneiras de amarrar um objeto : em pixels no canto da tela e em coordenadas de tempo/preço. No primeiro caso, recebo um texto estático e, no segundo, não é bem o que eu quero. Com a coordenada de preço (encadernação vertical) é claro - eu pego o preço da linha e adiciono um par de _Ponto a ela, de modo que o texto seria um pouco mais alto do que a linha. Mas e o tempo? Não quero me prender à última barra porque o deslocamento diferente do gráfico puxará o texto para a direita - para a esquerda. Aqui eu gostaria de fazer uma ligação horizontal rígida à borda direita da tela, mas não entendo como.
Você mesmo desenha as linhas ou o indicador?
 
MakarFX:
Você mesmo desenha as linhas ou o indicador?

A linha é criada pelo indicador quando é carregada. O texto é necessário para mostrar informações sobre este nível diretamente acima da linha, em vez de exibi-las em Alerta (Alert works).

 
Oleksandr Nozemtsev:

A linha é criada pelo indicador quando é carregada. O texto é necessário para mostrar informações sobre este nível diretamente acima da linha, em vez de mostrá-las em Alerta (Alert works).

Afixar o código de criação da linha
 
MakarFX:
Afixar o código de criação da linha

int OnInit()

{

//Criar linha "name_line" se ela ainda não existir

if(ObjectFind(0, name_line) == -1)

{

// Se o preço não for especificado, defina-o com o preço atual de pedido

if(!price_line)

price_line = SymbolInfoDouble(Symbol(), SYMBOL_ASK);

//valor do erro de reset

ResetLastError();

//criar uma linha

if(!ObjectCreate(0, name_line, OBJ_HLINE, 0, 0, price_line))

Imprimir("Linha de Linha. Erro ", GetLastError());

//

ObjectSet(name_line, OBJPROP_COLOR, color_line); //Line color

ObjectSet(name_line, OBJPROP_STYLE, estilo_line); //Line style

ObjectSet(name_line, OBJPROP_WIDTH, width_line); // espessura da linha

ObjectSet(name_line, OBJPROP_BACK, back_line); //Front/back

ObjectSet(name_line, OBJPROP_SELECTABLE, selection_line);//O objeto pode ser clicado com o mouse.

ObjectSet(name_line, OBJPROP_SELECTED, selection_line); //O objeto é selecionado. O não é selecionado na criação

}

return(INIT_SUCCEED);

}

 
Oleksandr Nozemtsev:

Apanhe

//+------------------------------------------------------------------+
//|                                                    Line_Text.mq4 |
//|                                           Copyright 2020 MakarFX |
//|                            https://www.mql5.com/ru/users/makarfx |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020 MakarFX"
#property link      "https://www.mql5.com/ru/users/makarfx"
#property version   "1.00"
#property strict
#property indicator_chart_window

double buy,sell;
datetime DoTime;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   ObjectsDeleteAll(0,"My_");
   //--- indicator buffers mapping
   if(ObjectFind(0,"My_BuyLine")!=0)
     {
      HLineCreate(0,"My_BuyLine",0,Ask+50*Point,clrTeal,2,1,false,true,false);
     }
   if(ObjectFind(0,"My_SellLine")!=0)
     {
      HLineCreate(0,"My_SellLine",0,Bid-50*Point,clrCrimson,2,1,false,true,false);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,"My_");
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   DoTime = TimeCurrent()+(Period()*60*7);
   if(ObjectFind(0,"My_BuyLine")==0)
     {
      buy = NormalizeDouble(ObjectGet("My_BuyLine",OBJPROP_PRICE1),Digits);
      Create_Text(0,"My_BuyText",0,DoTime,buy+5*Point,"BuyText","Arial",10,clrTeal,0,0,false,false,false);     
     }
   if(ObjectFind(0,"My_SellLine")==0)
     {
      sell = NormalizeDouble(ObjectGet("My_SellLine",OBJPROP_PRICE1),Digits);
      Create_Text(0,"My_SellText",0,DoTime,sell-5*Point,"SellText","Arial",10,clrCrimson,0,0,false,false,false);     
     }
   if(buy!=ObjectGet("My_BuyLine",OBJPROP_PRICE1)||sell!=ObjectGet("My_SellLine",OBJPROP_PRICE1))
     {
      ObjectMove(0,"My_BuyText",0,DoTime,buy+5*Point);
      ObjectMove(0,"My_SellText",0,DoTime,sell-5*Point);
     }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+--------------------------------------------------------------------------------------------------------------------+
//| Создает горизонтальную линию                                                                                       | 
//+--------------------------------------------------------------------------------------------------------------------+
bool HLineCreate(const long            chart_ID=0,        // ID графика 
                 const string          name="HLine",      // имя линии 
                 const int             sub_window=0,      // номер подокна 
                 double                price=0,           // цена линии 
                 const color           clr=clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии 
                 const int             width=1,           // толщина линии 
                 const bool            back=false,        // на заднем плане 
                 const bool            selection=true,    // выделить для перемещений 
                 const bool            hidden=true,       // скрыт в списке объектов 
                 const long            z_order=0)         // приоритет на нажатие мышью 
   { 
   //--- сбросим значение ошибки 
   ResetLastError(); 
   //--- создадим горизонтальную линию 
   if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price)) 
      { 
      Print(__FUNCTION__, ": не удалось создать горизонтальную линию! Код ошибки = ",GetLastError()); return(false); 
      } 
   //--- установим свойства линии 
   ObjectSetInteger (chart_ID, name, OBJPROP_COLOR, clr);
   ObjectSetInteger (chart_ID, name, OBJPROP_STYLE, style);
   ObjectSetInteger (chart_ID, name, OBJPROP_WIDTH, width);
   ObjectSetInteger (chart_ID, name, OBJPROP_BACK, back);
   ObjectSetInteger (chart_ID, name, OBJPROP_SELECTABLE, selection);
   ObjectSetInteger (chart_ID, name, OBJPROP_SELECTED, selection);
   ObjectSetInteger (chart_ID, name, OBJPROP_HIDDEN, hidden);
   ObjectSetInteger (chart_ID, name, OBJPROP_ZORDER, z_order);
   //--- успешное выполнение 
   return(true); 
   } 
//+--------------------------------------------------------------------------------------------------------------------+
//| Создает объект "Текст"                                                                                             | 
//+--------------------------------------------------------------------------------------------------------------------+
bool Create_Text(const long              chart_ID=0,               // ID графика 
                 const string            name="Text",              // имя объекта 
                 const int               sub_window=0,             // номер подокна 
                 datetime                time=0,                   // время точки привязки 
                 double                  price=0,                  // цена точки привязки 
                 const string            text="Text",              // сам текст 
                 const string            font="Arial",             // шрифт 
                 const int               font_size=10,             // размер шрифта 
                 const color             clr=clrRed,               // цвет 
                 const double            angle=0.0,                // наклон текста 
                 const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки 
                 const bool              back=false,               // на заднем плане 
                 const bool              selection=false,          // выделить для перемещений 
                 const bool              hidden=true,              // скрыт в списке объектов 
                 const long              z_order=0)                // приоритет на нажатие мышью 
   { 
   //--- сбросим значение ошибки 
   ResetLastError(); 
   //--- создадим объект "Текст" 
   if(!ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price)) 
      { 
      Print(__FUNCTION__,": не удалось создать объект \"Текст\"! Код ошибки = ",GetLastError()); return(false); 
      } 
   //--- установим свойства объектa "Текст" 
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
   //--- успешное выполнение 
   return(true); 
   } 
//+------------------------------------------------------------------+
 
MakarFX:

Apanhe

Uau, isso é muito! Pensei que eram apenas algumas linhas de código. Obrigado! (risos)

 
Alexey Viktorov:

Basta declarar variáveis bool

Você poderia também me dizer como salvar um valor de 5 dígitos de azul na variável amarela se o teste for feito em um gráfico de 1 minuto?

double LoU;
void OnTick()
{
if (Bid - iLow( NULL ,PERIOD_H4,1)>=0.0030||Bid - iLow( NULL ,PERIOD_H1,1)>=0.0030||Bid - iLow( NULL ,PERIOD_M30,1)>=0.0030)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
LoU = (ЛОУ из выражения, которое оказалось истинным);
}
}
Obrigado