[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 457

 
Liebe Experten, bitte helfen Sie.
Ich kann das Problem der automatischen Speicherung der Vorlage nicht lösen.
Der Dateiname wird nicht in das Speicherfenster eingefügt.
Hier ist der 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);  //нажимаем на кнопку

}
Vielen Dank im Voraus.
 
vasili:
Liebe Experten, bitte helfen Sie.
Ich komme mit dem Problem des automatischen Speicherns der Vorlage nicht zurecht.
Es wird kein Dateiname in das Speicherfenster eingefügt.
Hier ist der Code.

Bibliothek mit sofort einsatzbereiten MT4-Steuerungsfunktionen.

//===========================================================================================
// 4.4. Funktionen zur Einstellung des Diagrammmusters.
//===========================================================================================
// 4.4.1 Die Funktion setzt die angegebene Vorlage auf das angegebene Diagramm anhand ihres Namens in der Liste der Vorlagen.
void ServiceSetTemplateByName(int hwndChart, // Systemdeskriptor des Fensters des Diagramms, in das die Vorlage geladen wird.
string sNameTemplate); // Name der Vorlage in der Liste der Vorlagen.
//===========================================================================================
// 4.4.2 Die Funktion setzt die angegebene Vorlage auf das angegebene Diagramm entsprechend ihrer Nummer in der Liste der Vorlagen. Bei Erfolg gibt die Funktion TRUE zurück, andernfalls FALSE.
bool ServiceSetTemplateByNumber(int hwndChart, // Systemdeskriptor des Diagrammfensters, in das die Vorlage geladen wird.
int nTemplate); // Nummer der Vorlage in der Liste der Vorlagen. Die Vorlagen sind in der Liste nach Namen sortiert. Die Anzahl der Vorlagen ist auf 64 begrenzt.

Ich habe es kürzlich getestet. Es funktioniert.

 
7777877:
Klicken Sie mit der rechten Maustaste auf das lächelnde Gesicht (in der oberen rechten Ecke des Client-Terminalfensters) -> Berater -> Entfernen

Und wie man es programmatisch, mit Hilfe von Code, macht. Hat der Expert Advisor seine Funktion erfüllt und ist er abgestürzt?
 
Elektronik:

Wie lässt sich dies programmatisch, mit Hilfe von Code, bewerkstelligen? Hat der Expert Advisor seine Funktion erfüllt und ist dann abgestürzt?
https://www.mql5.com/ru/forum/110207
PostMessageA(WindowHandle(Symbol(),Period()), WM_COMMAND, 33050, 0);
 
Elektronik:

Und wie man es programmatisch macht, indem man den Code benutzt. Der Expert Advisor führt seine Funktion aus und schaltet sich dann ab?

Dieselbe Bibliothek mit MT4 ready control Funktionen.

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// 7. MQL4 PROGRAMMVERWALTUNGSFUNKTIONEN.
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// 7.1. Die Funktion löscht einen Expert Advisor aus dem angegebenen Chart. Bei Erfolg gibt die Funktion TRUE zurück, andernfalls FALSE.
bool ServiceDeleteExpert(int hwndChart); // Systemdeskriptor des Diagrammfensters, das vom Expert Advisor gelöscht wird.
//======================================================================================
// 7.2. FUNCTION entfernt die Indikatoren nach Namen aus der Liste der geladenen Indikatoren.
void ServiceDeleteIndicatorsByName(int hwndChart, // Systemdeskriptor des Fensters, dem der Indikator zugeordnet ist.
int nWindow, // Anzahl der zu löschenden Teilfenster. Bei -1 werden die Indikatoren aus allen Unterfenstern entfernt.
string &asIndicatorName[], // Eindimensionales Array mit den Namen der zu löschenden Indikatoren.
int nNumberName); // Anzahl der Indikatornamen im Array.
//======================================================================================
// 7.3. Die Funktion entfernt das Skript aus dem angegebenen Diagramm. Wenn sie erfolgreich ist, gibt die Funktion TRUE zurück, andernfalls FALSE.
bool ServiceDeleteScript(int hwndChart); // Systemdeskriptor des Diagrammfensters, des zu löschenden Skripts.
//======================================================================================
// 7.4. Die Funktion steuert das Dialogfenster zum Herunterfahren des Skripts und gibt den Systemdeskriptor des Dialogfensters zum Herunterfahren des Skripts zurück, falls das Fenster existiert,
// sonst - NULL. Das Skript funktioniert nur mit russischen und englischen Lokalisierungen.
int ServiceDialogScript(int bAnweisung); // Befehl für das Dialogfenster zum Herunterfahren des Skripts: TRUE - um das Skript herunterzufahren, FALSE - um das Skript nicht herunterzufahren.
//======================================================================================
// 7.5. Die Funktion holt die Namen der Indikatoren aus der Liste der hochgeladenen Indikatoren.
// Bei Erfolg gibt die Funktion die Anzahl der Indikatoren in den angegebenen Unterfenstern über den Parameter "nWindow" zurück, andernfalls null.
int ServiceGetNamesIndicators(int hwndChart, // Systemdeskriptor des Fensters, dem der Indikator zugeordnet ist.
int nWindow, // Nummer des Untergraphen. Wenn -1, werden die Indikatornamen aus allen Unterfenstern gelesen.
string &asIndicatorName[], // Eindimensionales String-Array für Indikatornamen.
// Das Array muss mit unterschiedlichen Werten in jeder Zelle initialisiert werden!
Dies ist // eine Besonderheit der Initialisierung von String-Arrays in MQL4.
int nNumberName); // Größe des Arrays "asIndicatorName[]" zur Aufnahme von Indikatornamen.
//======================================================================================
// 7.6. Die Funktion ruft das Fenster der Indikatorliste auf.
bool ServiceListIndicators(int hwndChart); // Systemdeskriptor des Chart-Fensters, auf dem das Fenster der Indikatorenliste aufgerufen wird.
//======================================================================================
// 7.7. Die Funktion lädt einen benutzerdefinierten Indikator in das angegebene Diagramm nach dessen Namen.
void ServiceLoadCustomIndicator(int hwndChart, // Systemdeskriptor des Diagrammfensters, in das der Indikator geladen wird.
string szNameIndicator, // Name des geladenen Indikators.
int bOK); // Bestätigung des Indikatorstarts, wenn das Dialogfenster der Indikatoreigenschaften vorhanden ist.
// TRUE - automatischer Klick auf die Schaltfläche "OK" erlaubt, FALSE - automatischer Klick auf die Schaltfläche "OK" verboten.
//======================================================================================
// 7.8. Die Funktion lädt den Expert Advisor in den nach seinem Namen angegebenen Chart.
void ServiceLoadExpert(int hwndChart, // Systemdeskriptor des Diagrammfensters, in das der Experte geladen wird.
string szNameExpert, // Name des zu ladenden Expert Advisors.
int bOK); // Bestätigen Sie den Start des Expert Advisors, wenn der Dialog Expert Advisor properties verfügbar ist.
// TRUE - Schaltfläche "OK" ist aktiviert, FALSE - Schaltfläche "OK" ist deaktiviert.
//======================================================================================
// 7.9. Die Funktion lädt das Skript mit seinem Namen in das angegebene Diagramm.
void ServiceLoadScript(int hwndChart, // Systemdeskriptor des Diagrammfensters, in das das Skript geladen wird.
string szNameScript, // Name des geladenen Skripts.
int bOK); // Bestätigung des Skriptstarts, wenn der Dialog Skripteigenschaften vorhanden ist. Das Skript darf keinen Eigenschaftsdialog haben!
// Bei Verwendung der Funktion zum Laden des Skripts aus dem Skript auf dem aktuellen Diagramm funktioniert der Parameter nicht, weil
// Es ist unmöglich, dass zwei Skripte gleichzeitig auf einem Diagramm laufen.
// TRUE - automatischer Klick auf die Schaltfläche "OK" ist aktiviert, FALSE - automatischer Klick auf die Schaltfläche "OK" ist deaktiviert.
//======================================================================================
// 7.10. Die Funktion lädt einen Standardindikator in das angegebene Diagramm nach seinem Namen.
void ServiceLoadStdIndicator(int hwndChart, // Systemdeskriptor des Chartfensters, in das der Indikator geladen wird.
string szNameIndicator, // Name des geladenen Indikators.
int bOK); // Bestätigung des Starts des Indikators, wenn das Dialogfenster der Indikatoreigenschaften vorhanden ist.
// TRUE - automatischer Klick auf die Schaltfläche "OK" erlaubt, FALSE - automatischer Klick auf die Schaltfläche "OK" verboten.
//======================================================================================
// 7.11. Die Funktion ruft das Menü der Experteneigenschaften auf. Bei Erfolg gibt die Funktion TRUE zurück, andernfalls - FALSE.
bool ServicePropertiesExpert(int hwndChart); // Systemdeskriptor des Diagrammfensters, in dem das Menü der Eigenschaften des Experten aufgerufen wird.
//=======================================================================================
// 7.12. Funktion zum Aktivieren/Deaktivieren der Expert Advisors durch Betätigung der Schaltfläche Expert Advisors.
void ServiceSetExperts();

 
Elektronik:

Wie lässt sich dies programmatisch, mit Hilfe von Code, bewerkstelligen? Der Expert Advisor hat seine Funktion ausgeführt und ist dann abgestürzt?

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

Dem stimme ich nicht zu. Es ist nicht nötig, über mql hinauszugehen oder den EA aus dem Chart zu entfernen, es reicht aus, den Handel programmatisch zu blockieren, indem man dies im Code des EA vorsieht.

 
granit77:

Da bin ich anderer Meinung. Es besteht keine Notwendigkeit, über mql hinauszugehen oder den EA aus dem Chart zu entfernen, sondern es reicht aus, den Handel programmatisch zu blockieren, indem man dies im EA-Code vorsieht.


Lassen Sie mich Ihnen widersprechen (schauen Sie bis zum Ende):

 
granit77:

Da bin ich anderer Meinung. Es besteht keine Notwendigkeit, über mql hinauszugehen oder den EA aus dem Chart zu entfernen, sondern es reicht aus, den Handel programmatisch zu blockieren, indem man dies im EA-Code vorsieht.

Ja, das ist richtig! Die einzige Ausnahme ist die Fernverwaltung.
 

Wissen Sie, bitte beraten, gibt es einen Code-Abschnitt in der Berater, ist es notwendig, zu wissen, wie die vorherige Kerze auf zwei Paare bei der Eröffnung einer neuen Kerze geschlossen, alles funktioniert gut, aber wenn in diesem Moment gibt es Ticks auf zwei Paare, der Berater ist auf dem Hauptpaar und es gibt keine Probleme mit ihm, aber wenn das zweite Paar mit dem Beginn einer neuen Kerze hat keine Ticks, die Werte von ihm nicht aktualisiert werden und erhalten Daten von ihm, nicht von der vorherigen Kerze, sondern vom Vortag.

{//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:

Bibliothek mit sofort einsatzbereiten MT4-Steuerungsfunktionen.

Ich habe es kürzlich getestet. Es funktioniert.

Ich danke Ihnen.
Grund der Beschwerde: