Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 353
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Questo (sotto) non funziona, ho digitato F_Path in explorer, ho cliccato invio, il file si apre... Le informazioni di WinApi hanno questo aspetto?
Chi impedisce l'uso del flag FILE_COMMON in scrittura e lettura? Il file sarà disponibile per tutti i terminali installati sul sistema. Sarà nella cartella condivisa di tutti i terminali.
In ME File --> Aprire la cartella dei dati condivisi
Chi impedisce l'uso del flag FILE_COMMON in scrittura e lettura? Il file sarà disponibile per tutti i terminali installati sul sistema. Si troverà nella cartella condivisa di tutti i terminali.
In ME File --> Aprire la cartella dei dati condivisi
Ciao, qualcuno ha riscontrato questo problema quando si crea una richiesta di compravendita con dei parametri:
se metto i seguenti parametri:
mrequest.action=TRADE_ACTION_DEAL;mrequest.type_filling=ORDER_FILLING_FOK;
mrequest.type=ORDER_TYPE_BUY;
il terminale annuncia che ho specificato un metodo non valido mrequest.type_filling(politica di esecuzione dell'ordine); se specifico mrequest.type_filling=ORDER_FILLING_RETURN, l'ordine viene aperto ma non posso chiuderlo programmaticamente perché il terminale segnala che viene utilizzato un metodo non valido. Sto eseguendo l'Expert Advisor su un server forex e tutto funziona bene su altri server. Qualcuno può scrivere una politica di esecuzione degli ordini che può essere utilizzata quando si sviluppano robot di trading per questo broker? Grazie.C'è un indicatore mq4 con funzione Alert.
Per esempio:
Come fare in modo che nell'angolo in alto a sinistra della sottofinestra (dove di solito vengono visualizzati il nome e i parametri dell'indicatore), o in qualche altro modo, venga indicato se il segnale è attivo(extern bool AlertMode=true;) o disattivo?C'è un indicatore mq4 con funzione Alert.
Per esempio:
Come fare o nell'angolo in alto a sinistra della sottofinestra (dove di solito vengono visualizzati il nome e i parametri dell'indicatore), o in qualche altro modo, per indicare se il segnale è abilitato(extern bool AlertMode=true;) o disabilitato?La documentazione dice che:
При тестировании в эксперте можно обрабатывать пользовательские события с помощью функции OnChartEvent(), но в индикаторах эта функция в тестере не вызывается. Даже если индикатор имеет обработчик OnChartEvent() и этот индикатор используется в тестируемом эксперте, то сам индикатор не будет получать никаких пользовательских событий.
Al momento questa affermazione non è rilevante - negli indicatori questa funzione è chiamata nel tester, almeno un indicatore può ricevere eventi generati da un altro indicatore nel tester.
Il problema è che una volta che l'indicatore riceve la chiamata di questa funzione, non ha accesso ai dati memorizzati nelle variabili dichiarate a livello globale, e viceversa - tutte le modifiche fatte in questa funzione non sono memorizzate nelle variabili di livello di accesso globale.
Esempi:
1. l'oggetto è dichiarato globalmente e inizializzato nella funzione OnInit. Si può accedere dalla funzione OnCalculate, ma otteniamo un messaggio di errore nella funzione OnChartEvent - puntatore non valido
2. c'è una funzione che emette il contenuto di una variabile nel giornale (la variabile è dichiarata globalmente). Quando si chiama questa funzione da OnCalculate si ottiene il valore atteso, quando si chiama la stessa funzione da OnChartEvent si ottiene un nonsenso.
Buona giornata!
Ho affrontato un problema quando uso gli eventi, in particolare la funzione OnChartEvent() in un indicatore. Quando lo si usa in un Expert Advisor, non ci sono problemi, ma nell'indicatore non funziona correttamente. Cioè l'evento si verifica ma non c'è modo di cambiare i campi esistenti. Esempio:
//----------------------------------------------------------------------------------------------
int k;
int OnInit()
{
k = 0;
ihandleDE = iCustom(_Symbol, _Period, "DrawExtremums");
//< ... >
return(INIT_SUCCEED);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
Print("OnCalculate(): k =", k);
//< ... >
return(rates_total)
}
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
string nameEv = "EXTR_UP";
if (sparam == nameEv)
{
Print("OnChartEvent(): k = ", k);
k++;
}
}
//----------------------------------------------------------------------------------------------
Come risultato otteniamo:
"OnCalculate(): k = 0" - sempre.
"OnChartEvent(): k = 0,...,123332" - conta da 0 a ...
Come può essere e perché? C'è un modo per risolvere il problema? Se qualcuno capisce, una risposta sarebbe molto apprezzata.
P.S.: Questa ingiustizia si verifica solo in strategy tester, in tempo reale tutto funziona correttamente.
Buona giornata!
Ho affrontato un problema quando uso gli eventi, in particolare la funzione OnChartEvent() in un indicatore. Quando lo si usa in un Expert Advisor, non ci sono problemi, ma nell'indicatore non funziona correttamente. Cioè l'evento si verifica ma non c'è modo di cambiare i campi esistenti. Esempio:
//----------------------------------------------------------------------------------------------
int k;
int OnInit()
{
k = 0;
ihandleDE = iCustom(_Symbol, _Period, "DrawExtremums");
//< ... >
return(INIT_SUCCEED);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
Print("OnCalculate(): k =", k);
//< ... >
return(rates_total);
}
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
string nameEv = "EXTR_UP";
if (sparam == nameEv)
{
Print("OnChartEvent(): k = ", k);
k++;
}
}
//----------------------------------------------------------------------------------------------
Come risultato otteniamo:
"OnCalculate(): k = 0" - sempre.
"OnChartEvent(): k = 0,...,123332" - conta da 0 a ...
Come può essere e perché? C'è un modo per risolvere questo problema? Se qualcuno capisce, una risposta sarebbe molto apprezzata.
P.S.: Questa ingiustizia si verifica solo in strategy tester, in tempo reale tutto funziona correttamente.
Buona sera. A suo tempo, il Service Desk ha dato una risposta abbastanza precisa su questo argomento: il terminale e il tester di strategie sono due programmi diversi, e il lavoro degli Expert Advisors/indicatori nel tester e nel terminale può differire significativamente. Ciò che spesso funziona nel terminale client non funziona nello Strategy Tester. Per favore, scrivi al Service Desk e fornisci loro le prove e lascia che risolvano il problema.