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
Come posso impostare le ore di trading a tempo in un EA?
Stavo provando questo;
int TradeHour;
if(Hour()17) TradeHour = false;
ma non sembra obbedire alla regola, fa solo trading ogni volta che e ho && TradeHour nelle mie dichiarazioni di acquisto/vendita.
GrazieHai provato a definire TradeHour come un booleano invece di un intero?
bool TradeHour;
if ((Hour()17)){ TradeHour = false;}Inoltre potresti aver bisogno delle parentesi aggiuntive.
Come posso impostare le ore di trading a tempo in un EA?
Stavo provando questo;
int TradeHour;
if(Hour()17) TradeHour = false;
ma non sembra obbedire alla regola, fa solo trading ogni volta e ho && TradeHour nelle mie dichiarazioni di acquisto/vendita.
GrazieCome può Hour() essere minore di 9 E maggiore di 17? Volevi dire Or (||)?
Lux
Come può Ora() essere minore di 9 E maggiore di 17? Volevi dire Or (||)? Lux
Buon punto luxinterior! Questo è un problema definitivo. Mi era sfuggito.
Scusa, volevo dire ||
e stavo provando questo a;
//+---------Variabili dell'ora di trading------------------
// se (Hour() < StartHour) TradeHourS = false;
//se (Hour() > EndHour) TradeHourE = false;
Quindi se StartHour=5 e EndHour=17 dovrebbe scambiare solo in quelle ore, giusto?
Ma scambia comunque in qualsiasi momento? E' un problema usando lo Strategy Tester?
Perché non usare l'esempio direttamente dal file di aiuto?
bool is_siesta=false;
if(Hour()>=12 || Hour()<17)
is_siesta=true;
Lux
Restituzione di una stringa da una DLL c/c++ con funzioni esportate
Ciao a tutti,
Ho sviluppato una serie di funzioni per gestire le impostazioni di configurazione da un EA.
Queste funzioni sono esportate da una DLL c++ e ogni funzione esportata ha la convezione di chiamata __stdcall richiesta dal mio MQL4.
Il mio problema sorge quando una funzione deve restituire una stringa all'EA.
Naturalmente la funzione non può
- restituire un puntatore a una variabile locale (la variabile va fuori portata)
- restituire un puntatore a una variabile globale della dll (problemi con l'accesso concorrente)
- restituire un puntatore a una stringa allocata nell'heap (servono funzioni per liberare la memoria per essere chiamate dall'EA: questo approccio non mi piace)
Così ho risolto di passare una stringa e la dimensione della stringa dall'EA. Es:
string buffer;
GetString( buffer, 30 );
[/CODE]
and from the c++ dll, something like this
void __stdcall GetString( LPTSTR buffer, int BufSize )
{
// Read a string from a some source
....
// -1 to take into account the terminating null character
StringCchCopy( buffer, BufSize-1, ReadStringFromASource );
}
[/CODE]
Here starts the weird behaviour of MQL managing strings returned from a DLL.
using the following code:
string buffer;
GetString( buffer, 30 );
the first time buffer contains the right string. A first question arises: buffer is not initialized but after calling GetString it contains the string returned. I have to suppose that MQL allocates space for a string variable when it's declared.
Next time GetString() is called the string returned seems to be truncated to the length-1 of the previous string length and not resetted as expected because of the 'string buffer;' statement.
Tried even:
[CODE]
string buffer = " "; // 'allocate' 30 blank characters
GetString( buffer, StringLen(buffer) );
but after the first time, when the execution returns to this code, the assignment of buffer does not work any more and buffer still contains the previous read string, and it seems it can only contains the number of characters of his content.
At first I have thought that the null character is not handled very well by MQL and modified the c++ code like this ...
[CODE]
CopyMemory( buffer, ReadStringFromASource, min(BufferSize,ReadStringFromASourceLength) );
e non aggiungendo il carattere nullo finale.
Ma quando viene chiamato da MQL, non ritorna nessuna stringa.
Qualcuno ha una risposta?
Perché non usare semplicemente l'esempio direttamente dal file di aiuto?
bool is_siesta=false;
if(Hour()>=12 || Hour()<17)
is_siesta=true;
Sì, ho provato anche questo;
bool TradeHour=false;
if(Hour()>=12 || Hour()<17) TradeHour=true
ma la linea OR non funziona perché se l'ora è 22 allora soddisfa la prima parte "if(Hour()>=12" e fa ancora trading quando vuole e ho aggiunto && TradeHour alle dichiarazioni di acquisto/vendita. Il secondo esempio che ho dato dovrebbe funzionare, ma non lo capisco.
Perché non usare semplicemente l'esempio direttamente dal file di aiuto?
bool is_siesta=false;
if(Hour()>=12 || Hour()<17)
is_siesta=true;
[/code]
LuxPenso che se il vostro obiettivo è fare trading tra le 12:00 e le 17:00 dovete semplicemente fare quanto segue:
[codice]
bool TradingEnabled=false; // variabile globale
...
...
TradingEnabled=false; // Azzeramento ad ogni esecuzione del tic
if(Hour()>=12 && Hour()<17)
TradingEnabled=true;
...
...
if( TradingEnabled )
{
// Logica di trading qui
}
...
...
Penso che se il tuo obiettivo è quello di negoziare tra le 12:00 e le 17:00 devi semplicemente fare quanto segue:
bool TradingEnabled=false; // Global variable
...
...
TradingEnabled=false; // Reset every tic run
if(Hour()>=12 && Hour()<17)
TradingEnabled=true;
...
...
if( TradingEnabled )
{
// Trading logic here
}
...
...
Non sto facendo la stessa cosa facendo così?
if (Hour() 17) TradeHour = false;
Cioè, se l'ora è tra 12 e 17 TradeHour=true, giusto?
(Aggiungendo && TradeHour nella mia dichiarazione di acquisto/vendita)
Come può Hour() essere minore di 9 E maggiore di 17? Volevi dire Or (||)? Lux
Oh, e volevo dire && perché hai ragione, l'ora non può essere minore di 9 E maggiore di 17, il che rende l'affermazione falsa, ma se l'ora è 10 allora non è minore di 9 E non maggiore di 17, quindi l'affermazione diventa vera.
Forse farlo in questo modo confonde MT4, comunque questo modo funziona;
int TradeHour;
TradeHour = ((Hour()>=StartHour) && (Hour()<EndHour));
Grazie