Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1042

 
Vladimir Karputov:

Non esiste una funzione MQL5 che dia le coordinate del mouse. Ma puoi usare la seguente soluzione: in base al file allegato - aggiungi il salvataggio delle ultime coordinate del mouse a OnChartEvent e poi, quando clicchi, emetti queste coordinate.

Capito, grazie

 

C'è anche qualche problema di confusione con gli ebjects.

C'è una classe che crea un marcatore e un rettangolo in base a parametri di input.

C'è uno stato - on/off per colore del rettangolo.

//+------------------------------------------------------------------+
//|                                                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;
   }
   
};

Poi creo questi oggetti, faccio un evento sulla pressione di un tasto, che commuta lo stato.
Le prime due volte funziona - e poi semplicemente ignora la pressione dei tasti, cosa sto facendo di sbagliato?


//+------------------------------------------------------------------+
//|                                                       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;
      }
   }
}

Qui ho visto che funziona ogni tanto, come faccio a farlo funzionare chiaramente per ogni clic del toggle?

 
Vladimir Karputov:

Non esiste una funzione MQL5 che dia le coordinate del mouse. Ma puoi usare la seguente soluzione: in base al file allegato, aggiungi a OnChartEvent salvando le ultime coordinate del mouse e poi, quando fai clic sul pulsante, emetti queste coordinate.

E così

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

   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 già disponibile la storia dei tick per il tester in MT-5, ma le candele alte contano ancora al prezzo dell'offerta. Sarebbe un buon vantaggio per MT-4 avere il conteggio alto al prezzo di domanda e disegnare le candele in quel modo. Anche su 5 min. lo spread è circa 1 APR, o anche 1,5! E che dolore aggiungere uno spread a tutti i picchi nel codice di Expert Advisor! Questo è un suggerimento per migliorarlo, ma ecco una domanda: c'è una variabile alta nella struttura MqlRates. A che prezzo viene riempito. Mi sembra che non sia al prezzo massimo come è scritto nel manuale. Forse qualcuno lo sa, sono troppo pigro per scrivere un EA per la ricerca.
 

Cari signori, cos'è questo e dove cercare l'errore?

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
Può essere collegato aTesterStop()? Anche se no, l'errore è dopo il passaggio...
 

Salve.
Potete per favore consigliare se è possibile scrivere un indicatore MQL5 con notifiche a Telegram (bot) senza usare servizi di terze parti, ma solo MQL5+Apipe Telegram?

O devo scrivere un Expert Advisor per questo? Faccio questa domanda, ho provato a scrivere un tale EA per MT4, ed è risultato in qualche modo solo con un Expert Advisor.


E la seconda domanda.
Quanto è difficile scrivere un indicatore/advisor che segnali un certo modello di cui ho bisogno?
Per esempio, due candele ribassiste seguite da tre rialziste?

Lo capisco così (approssimativamente):
Prezzo di chiusura < prezzo di apertura = candela ribassista
Prezzo di chiusura>prezzo di apertura = una candela rialzista

Se non posso farlo da solo, probabilmente lo ordinerò per soldi))

Grazie per l'attenzione!

 

È possibile compilare il codice inex da un programma di terzi?

Sto creando una specie di costruttore di robot in Java, e vorrei che l'utente ottenesse il codice compilato invece di accedere al codice sorgente.

 
Roman Sharanov:

È possibile compilare il codice inex da un programma di terzi?

Sto creando una specie di costruttore di robot in Java, e vorrei che l'utente ottenesse il codice compilato invece di accedere al codice sorgente.

Sì, vedere l'aiuto di MetaEditor: Benvenuto in Algoritmo / Integrazione con altri IDE / Compilazione di programmi MQL in altri IDE
 

Qualcuno lo sa? Sto lavorando al trasferimento dei dati dai fogli di calcolo Excel agli script MQL5. Tutto sembra a posto, ma EXcel ha dati decimali con una virgola invece di un punto.

Domanda: c'è un meccanismo in MQL per lo script per prendere i dati da Excel e cambiarli in punto decimale, o meglio per cambiarli in punto decimale in Excel stesso?

Come ottenere dati da Excel dalle celle di cui ho bisogno, perché ho bisogno di allinearle in una colonna, scrivere macro, ecc. Tra i dati ci sono sia date che interi e decimali. Questo Excel è così scomodo, o semplicemente non ci sono ancora abituato...

Sarei felice di qualsiasi consiglio...

 
Vladimir M.:

Qualcuno lo sa? Sto lavorando al trasferimento dei dati dai fogli di calcolo Excel agli script MQL5. Tutto sembra a posto, ma EXcel ha dati decimali con una virgola invece di un punto.

Domanda: c'è un meccanismo in MQL per lo script per prendere i dati da Excel e cambiarli in punto decimale, o meglio per cambiarli in punto decimale in Excel stesso?

Come ottenere dati da Excel dalle celle di cui ho bisogno, perché ho bisogno di allinearle in una colonna, scrivere macro, ecc. Tra i dati ci sono sia date che interi e decimali. Questo Excel è così scomodo, o semplicemente non ci sono ancora abituato...

Sarei felice di qualsiasi consiglio...

MQL ha una funzione di sostituzione dei caratteri in una stringa. Leggere come stringa

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

e convertirlo nel tipo doppio

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