[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 457

 
Chers experts, veuillez m'aider.
Je n'arrive pas à résoudre le problème de la sauvegarde automatique du modèle.
Il n'insère pas le nom du fichier dans la fenêtre d'enregistrement.
Voici le code.
// Функция выгрузки файл шаблона с текущего графика
     string slash=StringSubstr("\a",0,1);
     string path="experts\files";
     if(IsTesting()) path="tester\files";
     SaveTemplate(StringConcatenate(TerminalPath(),slash,path,slash,Symbol(),"-",TimeCurrent(),".tpl")); //загрузка шаблона с именем 
 
void SaveTemplate(string lpTemplateName)
{
    int hParent, hDlg, hEdit,hButtonSave ;
    hParent = GetAncestor(WindowHandle(Symbol(),Period()),2);
    PostMessageA(hParent,WM_COMMAND,33220,0); //вызываем окно сохранения шаблона
    Sleep(100);
    hDlg = GetLastActivePopup(hParent);//основное окно
    hEdit = GetDlgItem(hDlg,0x3E9);//поле имени файла
    SetWindowTextA(hEdit,lpTemplateName); //вводим имя шаблона
    // 0x45A
    hButtonSave = GetDlgItem(hDlg,1);             //определяем дескриптор кнопки "Сохранить"
    Print(lpTemplateName," ",hEdit," ",hDlg," ",hParent," ", hButtonSave);
    PostMessageA(hDlg,WM_COMMAND,1,hButtonSave);  //нажимаем на кнопку

}
Merci d'avance.
 
vasili:
Chers experts, aidez-moi s'il vous plaît.
Je ne peux pas faire face à un problème de sauvegarde automatique du modèle.
Il n'insère pas de nom de fichier dans la fenêtre d'enregistrement.
Voici le code.

Bibliothèque avec des fonctions de contrôle MT4 prêtes à l'emploi.

//===========================================================================================
// 4.4. Fonctions permettant de définir le modèle de graphique.
//===========================================================================================
// 4.4.1 La fonction définit le modèle spécifié sur le graphique spécifié par son nom dans la liste des modèles.
void ServiceSetTemplateByName(int hwndChart, // Descripteur système de la fenêtre du graphique, où le modèle est chargé.
string sNameTemplate) ; // Nom du modèle dans la liste des modèles.
//===========================================================================================
// 4.4.2 La fonction définit le modèle spécifié sur le graphique spécifié par son numéro dans la liste des modèles. En cas de succès, la fonction renvoie VRAI, sinon elle renvoie FAUX.
bool ServiceSetTemplateByNumber(int hwndChart, // Descripteur système de la fenêtre du graphique, où le modèle est chargé.
int nTemplate) ; // Numéro du modèle dans la liste des modèles. Les modèles sont triés dans la liste par nom. Le nombre de modèles est limité à 64.

Je l'ai testé récemment. Ça marche.

 
7777877:
Cliquez à droite sur le visage souriant (dans le coin supérieur droit de la fenêtre du terminal client) -> Conseillers -> Supprimer

Et comment le faire de manière programmatique, à l'aide de code. Le conseiller expert a-t-il rempli sa fonction et s'est-il effondré ?
 
Elektronik:

Comment faire cela de manière programmatique, à l'aide de code ? Le conseiller expert a-t-il rempli sa fonction puis s'est effondré ?
https://www.mql5.com/ru/forum/110207
PostMessageA(WindowHandle(Symbol(),Period()), WM_COMMAND, 33050, 0);
 
Elektronik:

Et comment le faire de manière programmatique, en utilisant le code. Le conseiller expert exécute sa fonction puis s'arrête ?

Même bibliothèque avec des fonctions de contrôle prêtes pour MT4.

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// 7. MQL4 FONCTIONS DE GESTION DU PROGRAMME.
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// 7.1. Cette fonction supprime un conseiller expert du graphique spécifié. En cas de succès, la fonction renvoie VRAI, sinon FAUX.
bool ServiceDeleteExpert(int hwndChart) ; // Descripteur système de la fenêtre graphique, qui est supprimée par le conseiller expert.
//======================================================================================
// 7.2. FUNCTION supprime les indicateurs par nom de la liste des indicateurs chargés.
void ServiceDeleteIndicatorsByName(int hwndChart, // Descripteur système de la fenêtre, où l'indicateur est attaché.
int nWindow, // Nombre de sous-fenêtres à supprimer les indicateurs. Si -1, les indicateurs de toutes les sous-fenêtres sont supprimés.
string &asIndicatorName[], // Tableau unidimensionnel contenant les noms des indicateurs à supprimer.
int nNumberName) ; // Nombre de noms d'indicateurs dans le tableau.
//======================================================================================
// 7.3. La fonction supprime le script du graphique spécifié. Si elle réussit, la fonction renvoie VRAI, sinon elle renvoie FAUX.
bool ServiceDeleteScript(int hwndChart) ; // Descripteur système de la fenêtre du graphique, le script à supprimer.
//======================================================================================
// 7.4. La fonction contrôle la boîte de dialogue d'arrêt du script et renvoie le descripteur système de la boîte de dialogue d'arrêt du script si la fenêtre existe,
// sinon - NULL. Le script ne fonctionne qu'avec les localisations russe et anglaise.
int ServiceDialogScript(int bInstruction) ; // Commande pour la fenêtre de dialogue d'arrêt du script : TRUE - pour arrêter le script, FALSE - pour ne pas arrêter le script.
//======================================================================================
// 7.5. La fonction récupère les noms des indicateurs à partir de la liste des indicateurs téléchargés.
// En cas de succès, la fonction renvoie le nombre d'indicateurs dans les sous-fenêtres spécifiées en utilisant le paramètre "nWindow", sinon elle renvoie zéro.
int ServiceGetNamesIndicators(int hwndChart, // Descripteur système de la fenêtre à laquelle l'indicateur est attaché.
int nWindow, // Numéro du sous-graphe. Si -1, nous lisons les noms des indicateurs de toutes les sous-fenêtres.
string &asIndicatorName[], // Tableau de chaînes unidimensionnel pour les noms d'indicateurs.
// Le tableau doit être initialisé avec des valeurs différentes dans chaque cellule !
C'est // une particularité de l'initialisation des tableaux de chaînes dans MQL4.
int nNumberName) ; // Tableau de taille "asIndicatorName[]" pour recevoir les noms des indicateurs.
//======================================================================================
// 7.6. La fonction appelle la fenêtre de la liste des indicateurs.
bool ServiceListIndicators(int hwndChart) ; // Descripteur système de la fenêtre du graphique, sur laquelle est appelée la fenêtre de la liste des indicateurs.
//======================================================================================
// 7.7. La fonction charge un indicateur personnalisé sur le graphique spécifié par son nom.
void ServiceLoadCustomIndicator(int hwndChart, // Descripteur système de la fenêtre du graphique, où l'indicateur est chargé.
string szNameIndicator, // Nom de l'indicateur chargé.
int bOK) ; // Confirmation du démarrage de l'indicateur, si la fenêtre de dialogue des propriétés de l'indicateur est présente.
// TRUE - le clic automatique sur le bouton "OK" est autorisé, FALSE - le clic automatique sur le bouton "OK" est désactivé.
//======================================================================================
// 7.8. La fonction charge l'Expert Advisor sur le graphique spécifié par son nom.
void ServiceLoadExpert(int hwndChart, // Descripteur système de la fenêtre graphique, où l'expert est chargé.
string szNameExpert, // Nom du conseiller expert à charger.
int bOK) ; // Confirme le démarrage du conseiller expert, si la boîte de dialogue des propriétés du conseiller expert est disponible.
// VRAI - le bouton "OK" est activé, FAUX - le bouton "OK" est désactivé.
//======================================================================================
// 7.9. La fonction charge dans le graphique spécifié le script de son nom.
void ServiceLoadScript(int hwndChart, // Descripteur système de la fenêtre du graphique, où le script est chargé.
string szNameScript, // Nom du script chargé.
int bOK) ; // Confirmation du lancement du script, si la boîte de dialogue des propriétés du script est présente. Le script peut ne pas avoir de dialogue de propriétés !
// Lors de l'utilisation de la fonction de chargement du script sur le graphique actuel, le paramètre ne fonctionne pas en raison de
// il est impossible que deux scripts soient exécutés simultanément sur un même graphique.
// VRAI - le clic automatique sur le bouton "OK" est activé, FAUX - le clic automatique sur le bouton "OK" est désactivé.
//======================================================================================
// 7.10. La fonction charge un indicateur standard sur le graphique spécifié par son nom.
void ServiceLoadStdIndicator(int hwndChart, // Descripteur système de la fenêtre du graphique, où l'indicateur est chargé.
string szNameIndicator, // Nom de l'indicateur chargé.
int bOK) ; // Confirmation du démarrage de l'indicateur, si la fenêtre de dialogue des propriétés de l'indicateur est présente.
// VRAI - le clic automatique sur le bouton "OK" est autorisé, FAUX - le clic automatique sur le bouton "OK" est interdit.
//======================================================================================
// 7.11. La fonction appelle le menu des propriétés de l'expert. Si elle réussit, la fonction renvoie VRAI, sinon - FAUX.
bool ServicePropertiesExpert(int hwndChart) ; // Descripteur système de la fenêtre du graphique, sur laquelle le menu des propriétés de l'expert est appelé.
//=======================================================================================
// 7.12. Fonction permettant d'activer/désactiver les Expert Advisors en manipulant le bouton Expert Advisors.
void ServiceSetExperts() ;

 
Elektronik:

Comment faire cela de manière programmatique, à l'aide de code ? Le conseiller expert a exécuté sa fonction puis s'est écrasé ?

FAQ:
h ttps://www.mql5.com/ru/forum/110207
PostMessageA(WindowHandle(Symbol(),Period()), WM_COMMAND, 33050, 0);

Je ne suis pas d'accord. Il n'est pas nécessaire d'aller au-delà de mql, ni de supprimer l'EA du graphique. Il suffit de bloquer programmatiquement le trade en le prévoyant dans le code de l'EA.

 
granit77:

Je ne suis pas d'accord. Il n'est pas nécessaire d'aller plus loin que mql, ni de supprimer l'EA du graphique. Il suffit de bloquer le trading par programmation en le prévoyant dans le code de l'EA.


Permettez-moi de ne pas être d'accord avec vous (regardez jusqu'à la fin) :

 
granit77:

Je ne suis pas d'accord. Il n'est pas nécessaire d'aller plus loin que mql, ni de supprimer l'EA du graphique. Il suffit de bloquer le trading par programmation en le prévoyant dans le code de l'EA.

Oui, c'est vrai ! La seule exception concerne la gestion à distance.
 

Savez-vous, s'il vous plaît conseiller, il ya une section de code dans le conseiller, il est nécessaire de savoir comment la bougie précédente a fermé sur deux paires à l'ouverture d'une nouvelle bougie, tout fonctionne bien, mais si à ce moment-là il ya des ticks sur deux paires, le conseiller est sur la paire principale et il n'ya pas de problèmes avec elle, mais si la deuxième paire avec le début d'une nouvelle bougie n'a pas de ticks, les valeurs de celui-ci ne sont pas mis à jour et recevoir des données de celui-ci, non pas de la bougie précédente, mais de la veille.

{//1
if (iClose(SignalSimbol,PERIOD_H1,1) > iOpen(SignalSimbol,PERIOD_H1,1)) svcolor1 = 1; // бычья свеча
if (iClose(SignalSimbol,PERIOD_H1,1) < iOpen(SignalSimbol,PERIOD_H1,1)) svcolor1 = 2; // медвежья свеча
if (iClose(SignalSimbol,PERIOD_H1,1) == iOpen(SignalSimbol,PERIOD_H1,1)) svcolor1 = 3; // додж
if (iClose(TradeSimbol,PERIOD_H1,1) > iOpen(TradeSimbol,PERIOD_H1,1)) svcolor2 = 1; // бычья свеча
if (iClose(TradeSimbol,PERIOD_H1,1) < iOpen(TradeSimbol,PERIOD_H1,1)) svcolor2 = 2; // медвежья свеча
if (iClose(TradeSimbol,PERIOD_H1,1) == iOpen(TradeSimbol,PERIOD_H1,1)) svcolor2 = 3; // додж
spread =  MarketInfo(TradeSimbol,MODE_SPREAD);
TimeBar_t = (TimeCurrent()-Time[0])/60; // время в минутах с открытия свечи
RefreshRates ();
}//1 
 
Zhunko:

Bibliothèque avec des fonctions de contrôle MT4 prêtes à l'emploi.

Je l'ai testé récemment. Ça marche.

Merci.
Raison: