Comment coder ? - page 63

 

Comment ouvrir un ordre au début d'une barre seulement ?

Bonjour,

Je suis en train d'implémenter un EA dans lequel je veux ouvrir un ordre seulement si un croisement d'un certain niveau par un indicateur a eu lieu entre la deuxième barre précédente et la précédente.

Par exemple, sur le graphique quotidien, s'il y a un croisement entre le 18 janvier et le 19 janvier, je veux ouvrir un ordre le 20 janvier.

J'ai fait quelque chose comme ceci :

Lorsque j'ouvre un ordre, j'enregistre l'heure d'ouverture de l'ordre.

Puis je fais le test suivant : Est-ce que (CurrentTime() - LastOrderOpenTime) < Period()? ??

Si oui, cela signifie que la barre actuelle n'est pas encore terminée, et que je ne dois pas ouvrir un nouvel ordre. Et aussi, quand cette condition devient fausse, je devrais être sur la prochaine barre du graphique, et le croisement s'est produit avant la dernière barre et aucun ordre ne devrait être ouvert jusqu'au prochain signal.

Le problème est que lorsque je l'attache à un graphique, il continue à créer de nouveaux ordres jusqu'à ce que la barre soit terminée. Quelqu'un peut-il me dire ce que j'ai fait de mal ?

 
dvarrin:
Bonjour,

Je suis en train d'implémenter un EA dans lequel je veux ouvrir un ordre seulement si un croisement d'un certain niveau par un indicateur a eu lieu entre la deuxième barre précédente et la précédente.

Par exemple, sur le graphique quotidien, s'il y a un croisement entre le 18 janvier et le 19 janvier, je veux ouvrir un ordre le 20 janvier.

J'ai fait quelque chose comme ceci :

Lorsque j'ouvre un ordre, j'enregistre l'heure d'ouverture de l'ordre.

Puis je fais le test suivant : Est-ce que (CurrentTime() - LastOrderOpenTime) < Period()? ??

Si oui, cela signifie que la barre actuelle n'est pas encore terminée, et que je ne dois pas ouvrir un nouvel ordre. Et aussi, quand cette condition devient fausse, je devrais être sur la prochaine barre du graphique, et le croisement s'est produit avant la dernière barre et aucun ordre ne devrait être ouvert jusqu'au prochain signal.

Le problème est qu'en l'attachant à un graphique, il continue à créer de nouveaux ordres jusqu'à ce que la barre soit terminée. Quelqu'un peut-il me dire ce que j'ai fait de mal ?

Je ne suis pas sûr mais voici ce que quelqu'un a noté pour moi il y a quelque temps. Il faudrait que je le cherche sur Google pour rendre hommage à l'auteur original.

Cela aide à déterminer si vous êtes sur l'ouverture d'une nouvelle barre ou non.

int newbar()

{

double g;

int m,s,k;

m=Time[0]+Period()*60-TimeCurrent();

g=m/60.0;

s=m%60;

m=(m-m%60)/60;

return(m);

}[/CODE]

And I use it like this:

[CODE]if (newbar()==Period())

J'espère que cela vous aidera.

 
dvarrin:
Salut,

Je suis en train d'implémenter un EA dans lequel je veux ouvrir un ordre seulement si un croisement d'un certain niveau par un indicateur a eu lieu entre la deuxième barre précédente et la précédente.

Par exemple, sur le graphique quotidien, s'il y a un croisement entre le 18 janvier et le 19 janvier, je veux ouvrir un ordre le 20 janvier.

J'ai fait quelque chose comme ceci :

Lorsque j'ouvre un ordre, j'enregistre l'heure d'ouverture de l'ordre.

Puis je fais le test suivant : Est-ce que (CurrentTime() - LastOrderOpenTime) < Period()? ??

Si oui, cela signifie que la barre actuelle n'est pas encore terminée, et que je ne dois pas ouvrir un nouvel ordre. Et aussi, quand cette condition devient fausse, je devrais être sur la prochaine barre du graphique, et le cross s'est produit avant la dernière barre et aucun ordre ne devrait être ouvert jusqu'au prochain signal.

Le problème est qu'en l'attachant à un graphique, il continue à créer de nouveaux ordres jusqu'à ce que la barre soit terminée. Quelqu'un peut-il me dire ce que j'ai fait de mal ?

Ensuite, je fais le test suivant : Is (CurrentTime() - LastOrderOpenTime) < Period()? ?

vous pouvez ajouter // return (0) ;

OU

ceci pourrait vous aider... ajoutez le code...

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break ;

if(OrderSymbol()== Symbol () && OrderMagicNumber()== MN)

{

if( OrderOpenTime() >= iTime(0, PERIOD_D1, 0) mêmebar++ ;

}

}

vous pouvez choisir entre les 2..

if ( samebar > 0 ) return (0) ;

OU

if (samebar < 1) {vos codes de commande;}

Je ne suis pas bon en codage donc quelqu'un pourrait essayer de vérifier si je place les bons codes...

 
dvarrin:
Bonjour,

Je suis en train d'implémenter un EA dans lequel je veux ouvrir un ordre seulement si un croisement d'un certain niveau par un indicateur a eu lieu entre la deuxième barre précédente et la précédente.

Par exemple, sur le graphique quotidien, s'il y a un croisement entre le 18 janvier et le 19 janvier, je veux ouvrir un ordre le 20 janvier.

J'ai fait quelque chose comme ceci :

Lorsque j'ouvre un ordre, j'enregistre l'heure d'ouverture de l'ordre.

Puis je fais le test suivant : Est-ce que (CurrentTime() - LastOrderOpenTime) < Period()? ??

Si oui, cela signifie que la barre actuelle n'est pas encore terminée, et que je ne dois pas ouvrir un nouvel ordre. Et aussi, quand cette condition devient fausse, je devrais être sur la prochaine barre du graphique, et le croisement s'est produit avant la dernière barre et aucun ordre ne devrait être ouvert jusqu'au prochain signal.

Le problème est qu'en l'attachant à un graphique, il continue à créer de nouveaux ordres jusqu'à ce que la barre soit terminée. Quelqu'un peut-il me dire ce que j'ai fait de mal ?

Ummm...

if(iOpen(Symbol(),0,0)==iClose(Symbol(),0,0)&&iLow(Symbol(),0,0)==iHigh(Symbol(),0,0))

{

//A new bar has happend.

}
 

Comment puis-je connaître le bénéfice de la transaction précédente ? Et les lots, et le côté ?

 
Dan7974:
Comment puis-je connaître le bénéfice de la transaction précédente ? Et les lots, et le côté ?

Utilisez OrdersHistoryTotal() au lieu de OrdersTotal(). Utilisez ensuite OrderProfit(), OrderLots() etc. Vous devez cependant vous assurer que les cotations historiques pour la période qui vous intéresse sont chargées, et je pense que vous ne pouvez le faire que manuellement - cliquez avec le bouton droit de la souris sur l'onglet 'Orders History' et sélectionnez 'All History'.

J'aurais dû ajouter que vous devez utiliser 'MODE_HISTORY' avec OrderSelect()...

 
omelette:
Utilisez OrdersHistoryTotal() au lieu de OrdersTotal(). Puis utilisez OrderProfit(), OrderLots() etc. Vous devez cependant vous assurer que les cotations historiques pour la période qui vous intéresse sont chargées, et je pense que vous ne pouvez le faire que manuellement - clic droit sur l'onglet 'Orders History' et sélectionner 'All History'. J'aurais dû ajouter que vous devez utiliser 'MODE_HISTORY' avec OrderSelect()...

Salut Omelette,

Savez-vous que BT a un problème de recherche dans l'historique : il regarde l'historique réel, pas celui de BT. J'ai demandé à Metaquote il y a quelques mois à propos de ce bug mais ils n'ont pas eu de réponse..... Peut-être que maintenant c'est corrigé...

 

Bonjour

Comment codez-vous un cycle de resserrement des taux d'intérêt sur une devise et un cycle de réduction des taux d'intérêt sur une autre devise ?

Est-ce que l'EA peut regarder les taux actuels de swaps et les taux historiques de swaps ?

OILFXPRO

 
Dossiers :
Raison: