Come codificare? - pagina 115

 
matrixebiz:
Non sto facendo la stessa cosa facendo questo?

if (Hour() 17) TradeHour = false;

Cioè, se l'ora è tra 12 e 17 TradeHour=true, giusto?

(Aggiungendo && TradeHour nella mia dichiarazione di acquisto/vendita)

Negando la seguente affermazione:

if(Hour()>=12 && Hour()<17)

TradingEnabled=true;

[/CODE]

is

[CODE]

if(Hour()=17)

TradingEnabled=false;

 

Un'altra cosa come faccio ad aggiungere un ritardo di rientro al codice in modo che se un trade è stato appena aperto e chiuso, aspettare tipo 60 minuti, poi controllare di nuovo se le condizioni del trade sono ancora soddisfatte.

Grazie per l'aiuto

 
matrixebiz:
Un'altra cosa come faccio ad aggiungere un ritardo di rientro al codice in modo che se un trade è stato appena aperto e chiuso, aspettare tipo 60 minuti, poi controllare di nuovo se le condizioni del trade sono ancora soddisfatte. Grazie per l'aiuto

Non è chiaro quale sia la tua richiesta.

Vuoi aspettare 60 minuti tra un controllo delle condizioni di scambio e il successivo?

Se questa è la tua richiesta, forse questo dovrebbe funzionare:

// Global variable

bool TradingEnabled = true; // flag to enable/disabled trading logic

bool TradingCheckDone = false; // flag to know if a a check was just done

datetime LastCheckTime = 0; // Time when the last check was done

.... somewhere in EA start() function ....

if( !TradingCheckDone )

{

// Default: We assume that trading logic must run ...

TradingEnabled = true;

// ... but only between 12:00:00 and 16:59:59

if(Hour()=17)

TradingEnabled=false;

// We must remember a check was just done

TradingCheckDone = true;

// We must even know when it was done

LastCheckTime = TimeCurrent();

} else

{

// if a hour has passed since the last check, it's time to retry

if( TimeCurrent() - LastCheckTime >= 3600 )

{

TradingCheckDone = false;

}

}

 
gorgoroth:
Non è chiaro quale sia la tua richiesta.

Volete aspettare 60 minuti tra un controllo delle condizioni di scambio e il successivo?

Se questa è la tua richiesta, forse questo dovrebbe funzionare:

// Global variable

bool TradingEnabled = true; // flag to enable/disabled trading logic

bool TradingCheckDone = false; // flag to know if a a check was just done

datetime LastCheckTime = 0; // Time when the last check was done

.... somewhere in EA start() function ....

if( !TradingCheckDone )

{

// Default: We assume that trading logic must run ...

TradingEnabled = true;

// ... but only between 12:00:00 and 16:59:59

if(Hour()=17)

TradingEnabled=false;

// We must remember a check was just done

TradingCheckDone = true;

// We must even know when it was done

LastCheckTime = TimeCurrent();

} else

{

// if a hour has passed since the last check, it's time to retry

if( TimeCurrent() - LastCheckTime >= 3600 )

{

TradingCheckDone = false;

}

}

No, solo se un trade è appena avvenuto e chiuso allora voglio che l'EA aspetti un'ora e poi controlli se le condizioni del trade sono ancora soddisfatte, se lo sono, allora ok, trade di nuovo ma se non lo sono, così sia. Questo codice farà ciò che voglio allora? Questo funzionerà nel tester a causa del controllo TimeCurrent?

EDIT: non ogni ora, fare il controllo subito dopo la chiusura di un trade, poi aspettare un'ora per il controllo delle condizioni e basta. Poi se in un giorno viene generato e chiuso un altro trade allora aspetta di nuovo un'ora e se non c'è nessun segnale allora è così, niente più controlli in attesa fino al prossimo trade aperto e chiuso.

Grazie

In allegato c'è un piccolo EA se puoi modificarlo con le giuste impostazioni che ho menzionato. Grazie

File:
ozfx_method.mq4  11 kb
 

Comprare_Limite e Comprare_Stop

Qual è la differenza tra un ordine Limit e un ordine Stop?

Grazie

 
gorgoroth:
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?

Nessuno ha problemi a restituire stringhe dalle DLL?

 

Ho bisogno di aiuto...

Qualcuno può mostrarmi un codice da allegare al mio EA...

Un ordine per segnale... perché a volte ho 3 segnali a causa di diversi TF... voglio che tutti i segnali si aprano...

o un codice che prenderebbe un ordine per barra, ma ogni Timeframe allegare a un EA... non voglio aprire un sacco di grafico ...

 

Cosa c'è che non va nel mio BuyStop?

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Distance*Point,Slippage,Bid-Distance-StopLoss*Point,Ask+Distance+TakeProfit*Point,"",MagicNumber,0,Blue);

 
matrixebiz:
Cosa c'è di sbagliato nel mio BuyStop?

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Distance*Point,Slippage,Bid-Distance-StopLoss*Point,Ask+Distance+TakeProfit*Point,"",MagicNumber,0,Blue);

il tuo Stop lose e Take profit..

dovresti anche aggiungere *punto alla tua distanza prima di aggiungerla..

O

Bid-((Distance-StopLoss)*Point),Ask+((Distance+TakeProfit)*Point)