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

 
Vladimir Karputov:

Não há nenhuma função MQL5 que forneça coordenadas do rato. Mas pode utilizar a seguinte solução: com base no ficheiro anexado - adicionar a gravação das últimas coordenadas do rato ao OnChartEvent e depois, quando clicado, emitir essas coordenadas.

Já está, obrigado

 

Há também algum problema confuso com os ebjectos.

Há uma classe que cria uma etiqueta e um rectângulo com base em parâmetros de entrada.

Existe um estado - on/off por cor de rectângulo.

//+------------------------------------------------------------------+
//|                                                CreateLabels.mqh |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
class CreateKeyStateLabel{
private:
   string label_text;
   int x;
   int y;
   bool _state;
public:
   CreateKeyStateLabel(string label_text, int x, int y){
      this.label_text = label_text;
      this.x = x;
      this.y = y;
      _state = false;
      ObjectCreate(0,label_text+"_icon", OBJ_RECTANGLE_LABEL, 0, 1, 1);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_XDISTANCE, x);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_YDISTANCE, y);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_XSIZE, 15);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_YSIZE, 15);
      ObjectSetInteger(0,label_text+"_icon", OBJPROP_BGCOLOR, clrDarkGray);
      
      ObjectCreate(0,label_text+"_label",OBJ_LABEL,0,1,1);
      ObjectSetInteger(0,label_text+"_label", OBJPROP_XDISTANCE, x+17);
      ObjectSetInteger(0,label_text+"_label", OBJPROP_YDISTANCE, y);
      ObjectSetInteger(0,label_text+"_label", OBJPROP_COLOR, clrBlack);
      ObjectSetString(0,label_text+"_label", OBJPROP_TEXT, label_text);
   }
   
   ~CreateKeyStateLabel(){
      ObjectDelete(0,label_text+"_icon");
      ObjectDelete(0,label_text+"_label");
   }
   
   void invert(){
      if(_state){
         _state = false;
         ObjectSetInteger(0,label_text+"_icon", OBJPROP_BGCOLOR, clrDarkGray);
      }else{
         _state = true;
         ObjectSetInteger(0,label_text+"_icon", OBJPROP_BGCOLOR, clrDarkGreen);
      }
   }
   
   bool state(){
      return _state;
   }
   
};

Depois crio estes objectos, faço um evento ao premir uma tecla, o que iria alternar o estado.
As primeiras vezes funciona - e depois apenas ignora as teclas, o que estou a fazer mal?


//+------------------------------------------------------------------+
//|                                                       Events.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <CreateLabels.mqh>
#define  X_DIST 10
#define  Y_DIST 20

CreateKeyStateLabel *tilda = new CreateKeyStateLabel("Tilda",X_DIST,Y_DIST);


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   delete tilda;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long   &lparam, const double &dparam, const string &sparam){
   switch(id){
      case CHARTEVENT_KEYDOWN:{
         if(lparam == "38") tilda.invert();
         break;
      }
   }
}

Aqui vi que funciona de vez em quando, como faço para que funcione claramente a cada clique da alavanca de alternância?

 
Vladimir Karputov:

Não há nenhuma função MQL5 que forneça coordenadas do rato. Mas pode utilizar a seguinte solução: com base no ficheiro anexado, adicionar ao OnChartEvent guardar as últimas coordenadas do rato e depois, ao clicar no botão, emitir essas coordenadas.

E assim

//---------------------------------------  

   if(id==CHARTEVENT_MOUSE_MOVE)
     {
      ChartXYToTimePrice(0,int(lparam),int(dparam),window,time,price);
      Comment("price = ",DoubleToString(price,5),"   time = ",TimeToString(time,TIME_DATE|TIME_MINUTES));
     }

//---------------------------------------
 
Dano já disponível histórico de tick para testador em MT-5, mas as velas altas ainda contam ao preço de oferta. Seria uma boa vantagem para MT-4 ter a alta contagem a preço de pedido e desenhar os castiçais dessa forma. Mesmo em 5 min. o spread é de cerca de 1 RPA, ou mesmo 1,5! E que dor para acrescentar uma propagação a todas as caminhadas no código do Expert Advisor! Esta é uma sugestão para a melhorar, mas eis uma questão: há uma variável alta na estrutura MqlRates. A que preço é preenchido. Parece-me que não está ao preço máximo, como está escrito no manual. Talvez alguém saiba, sou demasiado preguiçoso para escrever um EA para investigação.
 

Caros Senhores, o que é isto e onde procurar o erro?

2019.05.12 11:01:09.743 Core 6  genetic pass (52, 487) tested with error "some error after pass finished" in 0:00:00.005
Pode ser relacionado com oTesterStop()? Embora não, o erro é após o passe.
 

Olá.
Pode informar se é possível escrever um indicador MQL5 com notificações para Telegram (bot) sem utilizar qualquer serviço de terceiros, mas apenas MQL5+Telegram API?

Ou preciso de escrever um consultor especializado para isso? Faço esta pergunta, tentei escrever uma tal EA para o MT4, e de alguma forma só o fiz com um Consultor Especialista.


E a segunda pergunta.
Quão difícil é escrever um indicador/conselheiro que assinale um certo padrão de que preciso?
Por exemplo, dois castiçais em baixa seguidos de três em alta?

Compreendo-o assim (mais ou menos):
Preço de fecho < preço de abertura = vela de baixa
Preço de fecho> preço de abertura = um castiçal em alta

Se eu próprio não o puder fazer, provavelmente encomendo-o por dinheiro))

Obrigado pela vossa atenção!

 

É possível compilar código paraex a partir de um programa de terceiros?

Estou a criar uma espécie de construtor de robôs em Java, e gostaria que o utilizador obtivesse o código compilado em vez de aceder ao código fonte.

 
Roman Sharanov:

É possível compilar código paraex a partir de um programa de terceiros?

Estou a criar uma espécie de construtor de robôs em Java, e gostaria que o utilizador obtivesse o código compilado em vez de aceder ao código fonte.

Sim, ver ajuda do MetaEditor: Bem-vindo a algotrading / Integração com outras IDEs / Compilação de programas MQL em outras IDEs
 

Alguém sabe? Estou a trabalhar na transferência de dados de folhas de cálculo Excel para scripts MQL5. Tudo parece estar bem, mas EXcel tem dados decimais com uma vírgula em vez de um ponto.

Pergunta: Existe algum mecanismo no MQL para o script pegar nos dados do Excel e alterá-los para o ponto decimal, ou melhor, para os alterar para o ponto decimal no próprio Excel?

Como obter dados do Excel a partir das células de que preciso, porque preciso de os alinhar numa coluna, escrever macros, etc.? Entre os dados estão tanto as datas como o número inteiro e decimal. Este Excel é tão inconveniente, ou simplesmente ainda não estou habituado a ele...

Ficaria satisfeito com qualquer conselho...

 
Vladimir M.:

Alguém sabe? Estou a trabalhar na transferência de dados de folhas de cálculo Excel para scripts MQL5. Tudo parece estar bem, mas EXcel tem dados decimais com uma vírgula em vez de um ponto.

Pergunta: Existe algum mecanismo no MQL para o script pegar nos dados do Excel e alterá-los para o ponto decimal, ou melhor, para os alterar para o ponto decimal no próprio Excel?

Como obter dados do Excel a partir das células de que preciso, porque preciso de os alinhar numa coluna, escrever macros, etc.? Entre os dados estão tanto as datas como o número inteiro e decimal. Este Excel é tão inconveniente, ou simplesmente ainda não estou habituado a ele...

Ficaria satisfeito com qualquer conselho...

O MQL tem uma função de substituição de caracteres numa cadeia. Ler como cordel

int  StringReplace(
   string&         str,              // строка, в которой будет осуществляться замена
   const string    find,             // искомая подстрока НАЙТИ ЗАПЯТУЮ ","
   const string    replacement       // подстрока, которая будет вставлена в найденные места ЗАМЕНИТЬ НА ТОЧКУ "."
   );

e convertê-lo para o tipo duplo

Документация по MQL5: Строковые функции / StringReplace
Документация по MQL5: Строковые функции / StringReplace
  • www.mql5.com
Строковые функции / StringReplace - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5