J'ai toutes sortes d'absurdités comme des paramètres d'indicateurs etc. comme paramètres dans ma classe. En général, les choses qui seront statiques et identiques. Alors pourquoi devrais-je passer ces valeurs à chaque fois que je crée un objet?
Est-ce plus court ? bool barup=... WindowRedraw() ; s'exécutera toujours - tiré de if
il peut aussi être plus court ... voir mon dossier
Merci. Comment définir correctement l'intervalle auquel les niveaux de Fibo sont tracés ? S'il est (heure) 9h00, il devrait tirer des niveaux de 8h00 à 8h59 sur М1.
Un peu comme l'énoncé de la question est clair, n'est-ce pas. Le but est d'initialiser la même chose.
Comment allez-vous initialiser quelque chose qui n'existe pas encore ? Une fois l'objet créé, il commence à exister, et c'est à ce moment-là qu'il peut être initialisé.
Je vous l'ai dit tout de suite - faites d'un objet un constructeur paramétrique, et passez-lui les paramètres requis, qui seront utilisés pour initialiser l'objet nouvellement créé.
Vous pouvez passer des paramètres par le biais d'une structure, que vous remplissez avec les données requises (constantes pour tous ces objets) dans OnInit() du programme. Ensuite, dans OnTick(), par exemple, ou dans tout autre handler standard, vous créez vos objets, mais lors de la création, vous écrivez ce qui suit : CMyObject object = new CMyObject(a_here_structure_with_set_parameters) ;
Ou, si les données de l'objet ne changent pas d'un programme à l'autre et ont toujours les mêmes valeurs, alors il faut les initialiser explicitement avec les paramètres requis dans le constructeur par le biais de la liste d'initialisation, comme Igor l'a dit plus haut :
Comment allez-vous initialiser quelque chose qui n'existe pas encore ? Une fois l'objet créé, il commence à exister, et c'est à ce moment-là qu'il peut être initialisé.
Je vous l'ai dit tout de suite - faites d'un objet un constructeur paramétrique, et passez-lui les paramètres requis, qui seront utilisés pour initialiser l'objet nouvellement créé.
Vous pouvez passer des paramètres à travers une structure, que vous remplirez avec les données requises (constantes pour tous ces objets) dans OnInit() du programme. Ensuite, dans OnTick(), par exemple, ou dans tout autre handler standard, vous créez vos objets, mais à la création vous écrivez ce qui suit : CMyObject object = new CMyObject(a_here_structure_with_set_parameters) ;
Oui, je vois. Merci. J'ai pensé qu'il existait une solution pour que, lorsqu'un objet est créé, il dispose immédiatement de paramètres prédéfinis sans avoir à les passer au constructeur ou autre. Par le biais d'une classe de parents ou autre.
Juer: Dans ma classe, j'ai toutes sortes de choses comme des paramètres d'indicateurs etc. comme paramètres. En général, les choses qui seront statiques et identiques. Alors pourquoi devrais-je passer ces valeurs à chaque fois que je crée un objet?
Alors ne le transmettez pas. Initialiser dans la liste d'initialisation, comme je l'ai montré. Au moment de créer une instance de la classe, le constructeur de la classe sera automatiquement appelé, ce qui initialisera tous les membres de la classe, spécifiés dans la liste d'initialisation. Placez la fonction Print dans la méthode CCandle et vous verrez comment le constructeur est appelé sans aucune référence à celui-ci.
Oui, je vois. Merci. J'ai pensé qu'il existait une solution pour que, lorsqu'un objet est créé, il ait immédiatement des paramètres prédéfinis sans avoir à les passer au constructeur ou autre. Via une classe parentale ou autre.
Encore une fois. Vous pouvez le faire sans transférer les données au constructeur.
Alors ne le transmettez pas. Initialiser dans la liste d'initialisation, comme je l'ai montré. Au moment de créer une instance de la classe, le constructeur de la classe sera automatiquement appelé, ce qui initialisera tous les membres de la classe, spécifiés dans la liste d'initialisation. Placez la fonction Print dans la méthode CCandle et vous verrez comment le constructeur est appelé sans aucune référence à celui-ci.
Je ne comprends pas, quelle différence cela fait-il de les passer par le constructeur ou par la fonction d'initialisation ?
Alors ne le transmettez pas. Initialiser dans la liste d'initialisation, comme je l'ai montré. Au moment de créer une instance de la classe, le constructeur de la classe sera automatiquement appelé, ce qui initialisera tous les membres de la classe, spécifiés dans la liste d'initialisation. Placez la fonction Print dans la méthode CCandle et voyez comment le constructeur est appelé sans aucune référence à cette fonction.
Avec quoi seront-ils initialisés ? Avec quelles valeurs ? Je ne comprends pas.
Supposons que j'ai des valeurs initiales dans les paramètres d'entrée de l'Expert Advisor. Je dois donc les passer à chaque objet de la classe. Mais pas pour les passer à chaque objet nouvellement créé.
comment se fait-il que dans ce cycle mon ordre limite ne soit supprimé que si après avoir placé un ordre limite sur la barre suivante, un autre ordre limite n'a pas été placé, c'est-à-dire qu'un ordre limite n'est supprimé que s'il est placé puis suivi de deux barres sans ordre limite.
int i;
for(i=0;i<=OrderTicket();i++)
{
takelimit=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
if(iBarShift(Symbol(),0,OrderOpenTime())==2)//здесь нужно что бы на 2-ом баре если есть ордер его удалить, но удаляется он только если после его установки небыло на след баре еще лимитника
{
deletelimit=OrderDelete(ticket);
if(!deletelimit)
{
Comment(GetLastError());
}
}
}
if(условие для байлимита)
{ордерсенд}
elseif(условие для селлимита)
{ордерсенд}
Avec quoi seront-ils initialisés ? Avec quelles valeurs ? Pas clair
Ceux que vous écrivez dans la liste d'initialisation.
Supposons que j'ai initialisé des valeurs dans les paramètres d'entrée du conseiller expert. Donc, je dois les passer à chaque objet de cette classe. Mais pas pour les passer à chaque objet nouvellement créé.
C'est ici :
inputint i_nA = 10;
inputdouble i_fB = 20.0;
inputdatetime i_dtC = D'2018.03.08 10:12:14';
class CCandle
{
int m_nA;
double m_fB;
datetime m_dtC;
public:
CCandle(void);
};
CCandle::CCandle(void)
: m_nA(i_nA)
, m_fB(i_fB)
, m_dtC(i_dtC)
{
Print("Создан объект со значениями: A = ", m_nA, ", B = ", m_fB, ", C = ", m_dtC);
}
intOnInit()
{
CCandle arrclass[10];
return(INIT_SUCCEEDED);
}
Si on l'exécute, on obtient :
022:09:36.706 Test EURUSD,M1 inputs: i_nA=10; i_fB=20.0; i_dtC=1520503934;
022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: initialized
022:09:36.995 Test EURUSD,M1: uninit reason 0022:09:37.062 Script Test EURUSD,M1: removed
Est-ce plus court ? bool barup=... WindowRedraw() ; s'exécutera toujours - tiré de if
il peut aussi être plus court ... voir mon dossier
Un peu comme l'énoncé de la question est clair, n'est-ce pas. Le but est d'initialiser la même chose.
Comment allez-vous initialiser quelque chose qui n'existe pas encore ? Une fois l'objet créé, il commence à exister, et c'est à ce moment-là qu'il peut être initialisé.
Je vous l'ai dit tout de suite - faites d'un objet un constructeur paramétrique, et passez-lui les paramètres requis, qui seront utilisés pour initialiser l'objet nouvellement créé.
Vous pouvez passer des paramètres par le biais d'une structure, que vous remplissez avec les données requises (constantes pour tous ces objets) dans OnInit() du programme. Ensuite, dans OnTick(), par exemple, ou dans tout autre handler standard, vous créez vos objets, mais lors de la création, vous écrivez ce qui suit :
CMyObject object = new CMyObject(a_here_structure_with_set_parameters) ;
Ou, si les données de l'objet ne changent pas d'un programme à l'autre et ont toujours les mêmes valeurs, alors il faut les initialiser explicitement avec les paramètres requis dans le constructeur par le biais de la liste d'initialisation, comme Igor l'a dit plus haut :
Forum sur le trading, les systèmes de trading automatisé et les tests de stratégie
Toutes les questions des débutants sur MQL4, aide et discussion sur les algorithmes et les codes
Ihor Herasko, 2018.03.28 17:31
Cela se fait dans la liste d'initialisation, qui se trouve dans le constructeur de la classe :
Comment allez-vous initialiser quelque chose qui n'existe pas encore ? Une fois l'objet créé, il commence à exister, et c'est à ce moment-là qu'il peut être initialisé.
Je vous l'ai dit tout de suite - faites d'un objet un constructeur paramétrique, et passez-lui les paramètres requis, qui seront utilisés pour initialiser l'objet nouvellement créé.
Vous pouvez passer des paramètres à travers une structure, que vous remplirez avec les données requises (constantes pour tous ces objets) dans OnInit() du programme. Ensuite, dans OnTick(), par exemple, ou dans tout autre handler standard, vous créez vos objets, mais à la création vous écrivez ce qui suit :
CMyObject object = new CMyObject(a_here_structure_with_set_parameters) ;
Oui, je vois. Merci. J'ai pensé qu'il existait une solution pour que, lorsqu'un objet est créé, il dispose immédiatement de paramètres prédéfinis sans avoir à les passer au constructeur ou autre. Par le biais d'une classe de parents ou autre.
Dans ma classe, j'ai toutes sortes de choses comme des paramètres d'indicateurs etc. comme paramètres. En général, les choses qui seront statiques et identiques. Alors pourquoi devrais-je passer ces valeurs à chaque fois que je crée un objet?
Alors ne le transmettez pas. Initialiser dans la liste d'initialisation, comme je l'ai montré. Au moment de créer une instance de la classe, le constructeur de la classe sera automatiquement appelé, ce qui initialisera tous les membres de la classe, spécifiés dans la liste d'initialisation. Placez la fonction Print dans la méthode CCandle et vous verrez comment le constructeur est appelé sans aucune référence à celui-ci.
Oui, je vois. Merci. J'ai pensé qu'il existait une solution pour que, lorsqu'un objet est créé, il ait immédiatement des paramètres prédéfinis sans avoir à les passer au constructeur ou autre. Via une classe parentale ou autre.
Encore une fois. Vous pouvez le faire sans transférer les données au constructeur.
Alors ne le transmettez pas. Initialiser dans la liste d'initialisation, comme je l'ai montré. Au moment de créer une instance de la classe, le constructeur de la classe sera automatiquement appelé, ce qui initialisera tous les membres de la classe, spécifiés dans la liste d'initialisation. Placez la fonction Print dans la méthode CCandle et vous verrez comment le constructeur est appelé sans aucune référence à celui-ci.
Je ne comprends pas, quelle différence cela fait-il de les passer par le constructeur ou par la fonction d'initialisation ?
Alors ne le transmettez pas. Initialiser dans la liste d'initialisation, comme je l'ai montré. Au moment de créer une instance de la classe, le constructeur de la classe sera automatiquement appelé, ce qui initialisera tous les membres de la classe, spécifiés dans la liste d'initialisation. Placez la fonction Print dans la méthode CCandle et voyez comment le constructeur est appelé sans aucune référence à cette fonction.
Avec quoi seront-ils initialisés ? Avec quelles valeurs ? Je ne comprends pas.
Supposons que j'ai des valeurs initiales dans les paramètres d'entrée de l'Expert Advisor. Je dois donc les passer à chaque objet de la classe. Mais pas pour les passer à chaque objet nouvellement créé.
comment se fait-il que dans ce cycle mon ordre limite ne soit supprimé que si après avoir placé un ordre limite sur la barre suivante, un autre ordre limite n'a pas été placé, c'est-à-dire qu'un ordre limite n'est supprimé que s'il est placé puis suivi de deux barres sans ordre limite.
Avec quoi seront-ils initialisés ? Avec quelles valeurs ? Pas clair
Ceux que vous écrivez dans la liste d'initialisation.
Supposons que j'ai initialisé des valeurs dans les paramètres d'entrée du conseiller expert. Donc, je dois les passer à chaque objet de cette classe. Mais pas pour les passer à chaque objet nouvellement créé.
C'est ici :
Si on l'exécute, on obtient :