Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 50
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Tu pourrais faire ça...
...
Merci, je ne connais pas ce système, mais je vais y réfléchir, je vais devoir convertir le mien.
Vous pouvez le faire tenir en 3 lignes, vous n'avez pas besoin d'écrire un code aussi long qu'une boîte de conserve pour une conception aussi simple.
void OnTick()
{
if(BBars!=Bars)
{BBars=Bars;
// код....
}
}
Merci, je ne connais pas ce disque, mais je vais me renseigner, je dois modifier le mien.
L'entrée P est assez simple, la classe CNevBar écrite avec une méthode new_bar. La méthode new_bar crée un nouvel événement bar, à un caractère et une période donnés. Si l'événement new bar se produit, la méthode new_bar renvoie true, sinon false.
{
private:
datetime curbar;
datetime lastbar;
public:
CNevBar();
~CNevBar();
bool new_bar(string symbol,ENUM_TIMEFRAMES period);
};
//+------------------------------------------------------------------+
void CNevBar::CNevBar()
{
}
//+------------------------------------------------------------------+
void CNevBar::~CNevBar(void)
{
}
//+------------------------------------------------------------------+
bool CNevBar:: new_bar(string symbol,ENUM_TIMEFRAMES period)
{
curbar=(datetime) SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar==0)lastbar=(datetime)SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar!=curbar)
{
lastbar=curbar;
return(true);
}
return(false);
}
Vient ensuite la déclaration de la classe
La prochaine étape consiste à utiliser une méthode de la classe dans votre code.
Voici un exemple d'utilisation de cette classe sur différents symboles et périodes
//| test03.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CNevBar
{
private:
datetime curbar;
datetime lastbar;
public:
CNevBar();
~CNevBar();
bool new_bar(string symbol,ENUM_TIMEFRAMES period);
};
//+------------------------------------------------------------------+
void CNevBar::CNevBar()
{
}
//+------------------------------------------------------------------+
void CNevBar::~CNevBar(void)
{
}
//+------------------------------------------------------------------+
bool CNevBar:: new_bar(string symbol,ENUM_TIMEFRAMES period)
{
curbar=(datetime) SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar==0)lastbar=(datetime)SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar!=curbar)
{
lastbar=curbar;
return(true);
}
return(false);
}
CNevBar nb_1;
CNevBar nb_2;
CNevBar nb_3;
CNevBar nb_4;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(nb_1.new_bar("EURUSD",PERIOD_M5))Alert("Новый бар на EURUSD M5");
if(nb_2.new_bar("GBPUSD",PERIOD_M15))Alert("Новый бар на GBPUSD M15");
if(nb_3.new_bar("USDJPY",PERIOD_M30))Alert("Новый бар на USDJPY M30");
if(nb_4.new_bar("AUDCAD",PERIOD_H1))Alert("Новый бар на AUDCAD H1");
}
//+------------------------------------------------------------------+
Le résultat du travail de cette classe
2016.12.27 20:00:01.663 test03 EURUSD,M1: Alert: Новый бар на AUDCAD H1
2016.12.27 20:00:01.663 test03 EURUSD,M1: Alert: Новый бар на GBPUSD M15
2016.12.27 20:00:01.663 test03 EURUSD,M1: Alert: Новый бар на EURUSD M5
2016.12.27 19:55:01.999 test03 EURUSD,M1: Alert: Новый бар на EURUSD M5
Vous pouvez le faire tenir en 3 lignes. Vous n'avez pas besoin d'écrire un code aussi long qu'un footlocker pour une conception aussi simple.
void OnTick()
{
if(BBars!=Bars)
{BBars=Bars;
// код....
}
}
Je ne comprends pas pourquoi les classes ont besoin d'être traînées ici.
les classes sont plus pratiques à programmer, si vous n'utilisez que le symbole et la période en cours, vous n'avez pas besoin de classe, vous pouvez vous en sortir avec une fonction définie par l'utilisateur.
//| test03.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
datetime curbar;
datetime lastbar;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(new_bar(_Symbol,PERIOD_CURRENT))Alert("Новый бар");
}
//+------------------------------------------------------------------+
bool new_bar(string symbol,ENUM_TIMEFRAMES period)
{
curbar=(datetime) SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar==0)lastbar=(datetime)SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar!=curbar)
{
lastbar=curbar;
return(true);
}
return(false);
}
//+------------------------------------------------------------------+
il est plus facile de programmer avec des classes
Bonjour.
Je voudrais calculer la racine carrée de la valeur des minutes de la période ( timeframe ), dans laquelle le graphique est placé, pour une utilisation ultérieure dans les calculs.
J'ai trouvé Period(), mais comment faire des opérations mathématiques avec ?
S'il vous plaît, donnez-moi un conseil.
Bonjour.
Je voudrais calculer la racine carrée de la valeur des minutes de la période ( timeframe ), dans laquelle le graphique est placé, pour une utilisation ultérieure dans les calculs.
J'ai trouvé Period(), mais comment faire des opérations mathématiques avec ?
S'il vous plaît, donnez-moi un conseil.
Je ne comprends pas pourquoi on a besoin de traîner des classes ici.
C'est-à-dire qu'en gros,OnTick vérifiera chaque tick et engloutira des ressources, par exemple, 60-90 paires comme avant ?
Que diable sont les ressources, voici un code de vérification pour le traitement de 49 caractères dans mon terminal qui prend en gros moins de 200 millisecondes.
//| test03.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CNevBar
{
private:
datetime curbar;
datetime lastbar;
public:
CNevBar();
~CNevBar();
bool new_bar(string symbol,ENUM_TIMEFRAMES period);
};
//+------------------------------------------------------------------+
void CNevBar::CNevBar()
{
}
//+------------------------------------------------------------------+
void CNevBar::~CNevBar(void)
{
}
//+------------------------------------------------------------------+
bool CNevBar:: new_bar(string symbol,ENUM_TIMEFRAMES period)
{
curbar=(datetime) SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar==0)lastbar=(datetime)SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
if(lastbar!=curbar)
{
lastbar=curbar;
return(true);
}
return(false);
}
CNevBar *nb[];
int SymbolTotal=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
SymbolTotal=SymbolsTotal(false);
ArrayResize(nb,SymbolTotal);
for(int i=0;i<SymbolTotal;i++)
{
nb[i]=new CNevBar();
//Print("Экземпляр класса = ",nb[i]);
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
for(int i=0;i<SymbolTotal;i++)delete(nb[i]);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
ulong Start=0;
Start=GetMicrosecondCount();
for(int i=0;i<SymbolTotal;i++)
{
string symbol=SymbolName(i,false);
if(nb[i].new_bar(symbol,PERIOD_M1))Print("Новый бар на ",symbol," M1");
}
Print("На обработку всех символов в терминале ушло: ",GetMicrosecondCount()-Start," миллисекунд");
}
//+------------------------------------------------------------------+
Résultat
2016.12.27 22:24:05.046 test03 EURUSD,M1: initialized
2016.12.27 22:24:39.497 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 66522 миллисекунд
2016.12.27 22:24:42.819 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 181 миллисекунд
2016.12.27 22:24:47.743 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 181 миллисекунд
2016.12.27 22:24:48.658 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 172 миллисекунд
2016.12.27 22:25:03.367 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 173 миллисекунд
2016.12.27 22:25:10.051 test03 EURUSD,M1: Новый бар на EURUSD M1
2016.12.27 22:25:10.051 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 183 миллисекунд
2016.12.27 22:25:17.232 test03 EURUSD,M1: Новый бар на USDJPY M1
2016.12.27 22:25:17.232 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 191 миллисекунд
2016.12.27 22:25:19.668 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 162 миллисекунд
2016.12.27 22:25:19.788 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 130 миллисекунд
2016.12.27 22:25:23.064 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 160 миллисекунд
2016.12.27 22:25:25.579 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 132 миллисекунд
2016.12.27 22:25:57.800 test03 EURUSD,M1: Новый бар на GBPUSD M1
2016.12.27 22:25:57.800 test03 EURUSD,M1: Новый бар на USDCHF M1
2016.12.27 22:25:57.800 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 154 миллисекунд
2016.12.27 22:25:58.510 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 129 миллисекунд
2016.12.27 22:25:58.610 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 176 миллисекунд
2016.12.27 22:25:58.850 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 173 миллисекунд
2016.12.27 22:25:58.892 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 136 миллисекунд
2016.12.27 22:25:59.043 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 138 миллисекунд
2016.12.27 22:26:00.252 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 147 миллисекунд
2016.12.27 22:26:19.801 test03 EURUSD,M1: Новый бар на EURUSD M1
2016.12.27 22:26:19.801 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 156 миллисекунд
2016.12.27 22:26:26.219 test03 EURUSD,M1: Новый бар на GBPUSD M1
2016.12.27 22:26:26.219 test03 EURUSD,M1: Новый бар на USDCHF M1
2016.12.27 22:26:26.219 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 170 миллисекунд
2016.12.27 22:26:35.065 test03 EURUSD,M1: Новый бар на USDJPY M1
2016.12.27 22:26:35.065 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 204 миллисекунд
2016.12.27 22:26:41.118 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 135 миллисекунд
2016.12.27 22:26:49.655 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 239 миллисекунд
2016.12.27 22:26:49.745 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 129 миллисекунд
2016.12.27 22:26:56.357 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 133 миллисекунд
2016.12.27 22:26:56.467 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 132 миллисекунд
2016.12.27 22:27:01.395 test03 EURUSD,M1: Новый бар на EURUSD M1
2016.12.27 22:27:01.395 test03 EURUSD,M1: Новый бар на USDCHF M1
2016.12.27 22:27:01.395 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 148 миллисекунд
2016.12.27 22:27:02.204 test03 EURUSD,M1: Новый бар на USDJPY M1
2016.12.27 22:27:02.204 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 148 миллисекунд
2016.12.27 22:27:02.304 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 129 миллисекунд
2016.12.27 22:27:02.464 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 132 миллисекунд
2016.12.27 22:27:03.143 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 134 миллисекунд
2016.12.27 22:28:33.018 test03 EURUSD,M1: Новый бар на EURUSD M1
2016.12.27 22:28:33.018 test03 EURUSD,M1: Новый бар на GBPUSD M1
2016.12.27 22:28:33.018 test03 EURUSD,M1: Новый бар на USDJPY M1
2016.12.27 22:28:33.018 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 174 миллисекунд
2016.12.27 22:28:33.308 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 133 миллисекунд
2016.12.27 22:28:33.509 test03 EURUSD,M1: Новый бар на USDCHF M1
2016.12.27 22:28:33.509 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 154 миллисекунд
2016.12.27 22:28:44.137 test03 EURUSD,M1: На обработку 49 символов в терминале ушло: 132 миллисекунд
2016.12.27 22:28:45.088 test03 EURUSD,M1: uninit reason 1
2016.12.27 22:28:45.158 Expert test03 EURUSD,M1: removed