[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 457

 
Cari esperti, per favore aiutatemi.
Non riesco a superare il problema del salvataggio automatico del modello.
Non inserisce il nome del file nella finestra di salvataggio.
Ecco il codice.
// Функция выгрузки файл шаблона с текущего графика
     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);  //нажимаем на кнопку

}
Grazie in anticipo.
 
vasili:
Cari esperti, per favore aiutatemi.
Non riesco a far fronte a un problema di salvataggio automatico del modello.
Non inserisce un nome di file nella finestra di salvataggio.
Ecco il codice.

Libreria con funzioni di controllo MT4 out-of-the-box.

//===========================================================================================
// 4.4. Funzioni per impostare il modello del grafico.
//===========================================================================================
// 4.4.1 La funzione imposta il modello specificato sul grafico specificato dal suo nome nella lista dei modelli.
void ServiceSetTemplateByName(int hwndChart, // descrittore di sistema della finestra del grafico, dove viene caricato il modello.
string sNameTemplate); // Nome del template nella lista dei template.
//===========================================================================================
// 4.4.2 La funzione imposta il modello specificato sul grafico specificato in base al suo numero nella lista dei modelli. Se ha successo, la funzione restituisce TRUE, altrimenti restituisce FALSE.
bool ServiceSetTemplateByNumber(int hwndChart, // descrittore di sistema della finestra del grafico, dove viene caricato il modello.
int nTemplate); // Numero del template nella lista dei template. I modelli sono ordinati nella lista per nome. Il numero di modelli è limitato a 64.

L'ho provato di recente. Funziona.

 
7777877:
Fare clic destro sulla faccia sorridente (nell'angolo in alto a destra della finestra del terminale client) -> Consulenti -> Rimuovi

E come farlo programmaticamente, con l'aiuto del codice. L'Expert Advisor ha svolto la sua funzione ed è sceso?
 
Elektronik:

Come si fa a farlo programmaticamente, con l'aiuto del codice? L'Expert Advisor ha svolto la sua funzione e poi è sceso?
https://www.mql5.com/ru/forum/110207
PostMessageA(WindowHandle(Symbol(),Period()), WM_COMMAND, 33050, 0);
 
Elektronik:

E come farlo programmaticamente, usando il codice. L'Expert Advisor esegue la sua funzione e poi si spegne?

Stessa libreria con funzioni di controllo pronte per MT4.

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// 7. FUNZIONI DI GESTIONE DEL PROGRAMMA MQL4.
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// 7.1. La funzione elimina un Expert Advisor dal grafico specificato. Se ha successo, la funzione restituisce TRUE, altrimenti FALSE.
bool ServiceDeleteExpert(int hwndChart); // descrittore di sistema della finestra del grafico, che viene cancellata da Expert Advisor.
//======================================================================================
// 7.2. FUNCTION rimuove gli indicatori per nome dalla lista degli indicatori caricati.
void ServiceDeleteIndicatorsByName(int hwndChart, // descrittore di sistema della finestra, dove l'indicatore è collegato.
int nWindow, // Numero di sottofinestra per cancellare gli indicatori. Se -1, gli indicatori di tutte le sottofinestre vengono rimossi.
string &asIndicatorName[], // array unidimensionale con i nomi degli indicatori da cancellare.
int nNumeroNome); // Numero di nomi di indicatori nell'array.
//======================================================================================
// 7.3. La funzione rimuove lo script dal grafico specificato. Se ha successo, la funzione restituisce TRUE, altrimenti restituisce FALSE.
bool ServiceDeleteScript(int hwndChart); // descrittore di sistema della finestra del grafico, lo script da cancellare.
//======================================================================================
// 7.4. La funzione controlla la finestra di dialogo di spegnimento dello script e restituisce il descrittore di sistema della finestra di dialogo di spegnimento dello script, se la finestra esiste,
// altrimenti - NULL. Lo script funziona solo con le localizzazioni russa e inglese.
int ServiceDialogScript(int bInstruction); // Comando per la finestra di dialogo di spegnimento dello script: TRUE - per spegnere lo script, FALSE - per non spegnere lo script.
//======================================================================================
// 7.5. La funzione ottiene i nomi degli indicatori dalla lista degli indicatori caricati.
// Se ha successo, la funzione restituisce il numero di indicatori nelle sottofinestre specificate usando il parametro "nWindow", altrimenti restituisce zero.
int ServiceGetNamesIndicators(int hwndChart, // descrittore di sistema della finestra a cui è collegato l'indicatore.
int nWindow, // Numero del sottografo. Se -1, leggiamo i nomi degli indicatori da tutte le sottofinestre.
string &asIndicatorName[], // array di stringhe unidimensionale per i nomi degli indicatori.
// L'array deve essere inizializzato con valori diversi in ogni cella!
Questa è // una peculiarità dell'inizializzazione degli array di stringhe in MQL4.
int nNumeroNome); // Array di dimensioni "asIndicatorName[]" per ricevere i nomi degli indicatori.
//======================================================================================
// 7.6. La funzione chiama la finestra dell'elenco degli indicatori.
bool ServiceListIndicators(int hwndChart); // descrittore di sistema della finestra del grafico, su cui viene chiamata la finestra della lista degli indicatori.
//======================================================================================
// 7.7. La funzione carica un indicatore personalizzato sul grafico specificato dal suo nome.
void ServiceLoadCustomIndicator(int hwndChart, // descrittore di sistema della finestra del grafico, dove viene caricato l'indicatore.
string szNameIndicator, // Nome dell'indicatore caricato.
int bOK); // Conferma dell'avvio dell'indicatore, se è presente la finestra di dialogo delle proprietà dell'indicatore.
// TRUE - clic automatico sul pulsante "OK" permesso, FALSE - clic automatico sul pulsante "OK" disabilitato.
//======================================================================================
// 7.8. La funzione carica l'Expert Advisor sul grafico specificato dal suo nome.
void ServiceLoadExpert(int hwndChart, // descrittore di sistema della finestra del grafico, dove viene caricato l'esperto.
string szNameExpert, // Nome dell'Expert Advisor da caricare.
int bOK); // Conferma l'avvio di Expert Advisor, se la finestra di dialogo delle proprietà di Expert Advisor è disponibile.
// TRUE - il pulsante "OK" è abilitato, FALSE - il pulsante "OK" è disabilitato.
//======================================================================================
// 7.9. La funzione carica sul grafico specificato lo script con il suo nome.
void ServiceLoadScript(int hwndChart, // descrittore di sistema della finestra del grafico, dove viene caricato lo script.
string szNameScript, // Nome dello script caricato.
int bOK); // Conferma del lancio dello script, se è presente il dialogo delle proprietà dello script. Lo script potrebbe non avere un dialogo delle proprietà!
// Quando si usa la funzione per caricare lo script dallo script sul grafico corrente, il parametro non funziona a causa di
// è impossibile che due script vengano eseguiti simultaneamente su un grafico.
// TRUE - il clic automatico del pulsante "OK" è abilitato, FALSE - il clic automatico del pulsante "OK" è disabilitato.
//======================================================================================
// 7.10. La funzione carica un indicatore standard sul grafico specificato dal suo nome.
void ServiceLoadStdIndicator(int hwndChart, // descrittore di sistema della finestra del grafico, dove viene caricato l'indicatore.
string szNameIndicator, // Nome dell'indicatore caricato.
int bOK); // Conferma dell'avvio dell'indicatore, se è presente la finestra di dialogo delle proprietà dell'indicatore.
// TRUE - clic automatico sul pulsante "OK" permesso, FALSE - clic automatico sul pulsante "OK" vietato.
//======================================================================================
// 7.11. La funzione chiama il menu delle proprietà Expert. Se ha successo, la funzione restituisce TRUE, altrimenti - FALSE.
bool ServicePropertiesExpert(int hwndChart); // descrittore di sistema della finestra del grafico, su cui viene chiamato il menu delle proprietà dell'esperto.
//=======================================================================================
// 7.12. Funzione di abilitazione/disabilitazione degli Expert Advisors manipolando il pulsante Expert Advisors.
void ServiceSetExperts();

 
Elektronik:

Come si fa a farlo programmaticamente, con l'aiuto del codice? L'Expert Advisor ha eseguito la sua funzione e poi si è bloccato?

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

Non sono d'accordo. Non c'è bisogno di andare oltre mql, non c'è bisogno di rimuovere l'EA dal grafico. È sufficiente bloccare programmaticamente il trade prevedendolo nel codice dell'EA.

 
granit77:

Non sono d'accordo. Non c'è bisogno di andare oltre mql, non c'è bisogno di rimuovere l'EA dal grafico. È sufficiente bloccare programmaticamente il trading prevedendolo nel codice dell'EA.


Permettetemi di dissentire con voi (guardate fino alla fine):

 
granit77:

Non sono d'accordo. Non c'è bisogno di andare oltre mql, non c'è bisogno di rimuovere l'EA dal grafico. È sufficiente bloccare programmaticamente il trading prevedendolo nel codice dell'EA.

Sì, proprio così! L'unica eccezione è per la gestione remota.
 

Sapete, per favore consigliatemi, c'è una sezione di codice nell'advisor, è necessario sapere come si è chiusa la candela precedente su due coppie all'apertura di una nuova candela, tutto funziona bene, ma se in quel momento ci sono tick su due coppie, l'advisor è sulla coppia principale e non ci sono problemi, ma se la seconda coppia con l'inizio di una nuova candela non ha tick, i valori da essa non vengono aggiornati e riceve dati da essa, non dalla candela precedente, ma dal giorno prima.

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

Libreria con funzioni di controllo MT4 out-of-the-box.

L'ho provato di recente. Funziona.

Grazie.