Comment coder ? - page 115

 
matrixebiz:
Ne fais-je pas la même chose en faisant ceci ?

si (Hour() 17) TradeHour = false ;

Autrement dit, si l'heure est comprise entre 12 et 17, TradeHour=true, n'est-ce pas ?

(en ajoutant && TradeHour dans ma déclaration d'achat/de vente)

Négation de l'affirmation suivante :

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

TradingEnabled=true;

[/CODE]

is

[CODE]

if(Hour()=17)

TradingEnabled=false;

 

Une dernière chose comment puis-je ajouter un délai de ré-entrée dans le code de sorte que si une transaction vient d'être ouverte et fermée, il faut attendre 60 minutes, puis vérifier à nouveau si les conditions de la transaction sont toujours remplies.

Merci pour votre aide.

 
matrixebiz:
Une dernière chose : comment ajouter un délai de ré-entrée au code de sorte que si une transaction vient d'être ouverte et fermée, il faut attendre 60 minutes, puis vérifier à nouveau si les conditions de la transaction sont toujours remplies. Merci pour votre aide.

La nature de votre demande n'est pas claire.

Voulez-vous attendre 60 minutes entre la vérification d' une condition de transaction et la suivante ?

Si c'est le cas, cela devrait fonctionner :

// 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:
La nature de votre demande n'est pas claire.

Voulez-vous attendre 60 minutes entre la vérification d'une condition de transaction et la suivante ?

Si c'est votre demande, cela devrait fonctionner :

// 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;

}

}

Non, seulement si une transaction vient de se produire et de se fermer, je veux que l'EA attende une heure puis vérifie si les conditions de la transaction sont toujours remplies, si c'est le cas, alors ok, recommencez la transaction, mais sinon, tant pis. Ce code fera donc ce que je veux ? Cela fonctionnera-t-il dans le testeur à cause de la vérification de TimeCurrent ?

EDIT : pas toutes les heures, mais juste après la clôture d'une transaction, puis attendre une heure pour la vérification des conditions et c'est tout. Ensuite, si dans la journée une autre transaction est générée et fermée, attendez à nouveau une heure et si aucun signal n'est émis, c'est tout, plus de vérification jusqu'à l'ouverture et la fermeture de la prochaine transaction.

Je vous remercie.

Ci-joint un petit EA si vous pouvez le modifier avec les bons paramètres que j'ai mentionnés. Merci

Dossiers :
ozfx_method.mq4  11 kb
 

Achat_Limite et Achat_Stop

Quelle est la différence entre un ordre Limit et un ordre Stop?

Merci

 
gorgoroth:
Bonjour à tous,

J'ai développé un ensemble de fonctions pour gérer les paramètres de configuration d'un EA.

Ces fonctions sont exportées par une DLL c++ et chacune des fonctions exportées possède la convetion d'appel __stdcall demandée par mon MQL4.

Mon problème survient lorsqu'une fonction doit retourner une chaîne de caractères à l'EA.

Naturellement, la fonction ne peut pas :

- renvoyer un pointeur vers une variable locale (la variable sort de la portée)

- retourner un pointeur vers une variable globale de la dll (problèmes d'accès concurrents)

- renvoyer un pointeur vers une chaîne de caractères allouée au tas (il faut des fonctions pour libérer la mémoire et les appeler depuis l'EA : je n'aime pas cette approche).

J'ai donc décidé de passer une chaîne de caractères et sa taille à partir de l'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) );

et de ne pas ajouter le caractère nul de fin de chaîne.

Mais lorsqu'on l'appelle depuis MQL, aucune chaîne n'est renvoyée.

Quelqu'un a-t-il une réponse ?

Personne n'a de problèmes pour renvoyer des chaînes de caractères à partir de DLLs ?

 

J'ai besoin d'aide.

Quelqu'un peut-il me montrer un code ? à attacher à mon EA...

Un ordre par signal... car parfois j'ai 3 signaux à cause de différents TF... je veux que tous les signaux s'ouvrent...

ou un code qui prendrait un ordre par barre mais chaque Timeframe attaché à un EA... je ne veux pas ouvrir beaucoup de graphique...

 

Quel est le problème avec mon BuyStop ?

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

 
matrixebiz:
Quel est le problème avec mon BuyStop ?

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

votre Stop lose et Take profit...

vous devez également ajouter *point à votre distance avant de l'ajouter...

OU

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