Page 1 sur 1

IDENTIFIER LE SENS DU 1ER ORDRE PASSE DANS UNE BOUCLE FOR

Publié : 26 janv. 2017, 00:12
par Elykia34
Bonjour, je suis débutant en MQL4 mais je m'intéresse fortement au développement d'un EA. J'ai entrepris de travailler sur un EA qui passe des ordres en Pyramide tous les 100 pips. Je veux qu'au bout de x Ordres passés à l'achat, l'EA inverse les ordres suivants en les passant à la Vente. Pour cela, et pour d'autres raisons, j'ai besoin d'identifier le sens du 1er ordre de la boucle que j'ai créé pour ensuite y faire référence dans le code.
Merci pour votre aide.

for(i= OrdersTotal()-1; i>= 0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if (OrderSymbol()==Symbol())
{
if((count==1 && OrderMagicNumber()==0) || (count==(OrderMagicNumber()+1)))
{
if (OrderType()==0 && OrdersTotal() <=NbOrders)
{
last=OrderOpenPrice();
next=OrderOpenPrice()-dif;
if(OrderOpenPrice()-Ask>dif)
{
od= OrderSend(Symbol(),OP_BUY,lot*(count+LotStep),Ask,3,0,bTakeProfit,"BUY #"+mgc+" @ M"+Period(),(count),0,Blue); Sleep(1000);
}
}
else if(OrderType()==0 && OrdersTotal()>=NbOrders)
{
last=OrderOpenPrice();
next=OrderOpenPrice()-dif;
if(OrderOpenPrice()-Bid>dif )
{
odRet= OrderSend(Symbol(), OP_SELL, lot2*(count+LotStep),Bid,3,0,sTakeProfit,"SELL #"+mgc+" @ M"+Period(),(count),0,DeepPink); Sleep(1000);
}
}
...

Re: IDENTIFIER LE SENS DU 1ER ORDRE PASSÉ DANS UNE BOUCLE FO

Publié : 26 janv. 2017, 07:35
par Jeff719
On aiderait bien, mais... quelle est la question ?

Car tu test effectivement le sens de l'ordre (on ne sait pas ce qui ne va pas) :

Code : Tout sélectionner

if (OrderType()==0
On peut écrire moins crade (mais ça ne change rien):

Code : Tout sélectionner

if (OrderType()==OP_BUY
A propos, pour poster du code, utilise la balise

Code : Tout sélectionner

 (entre [i]Quote[/i] et [i]List[/i] de la saisie de message). Par ailleurs, évite les titres de sujet en majuscule, d'après la netiquette cela revient à crier. :wink:

Re: IDENTIFIER LE SENS DU 1ER ORDRE PASSÉ DANS UNE BOUCLE FO

Publié : 26 janv. 2017, 10:20
par neo-13
Si tant est que j'ai compris, il te suffit pour connaitre le sens du premier d'ajouter un booleen dans ta boucle:
bool PremierOrderTrouve=0;
string sens="";

dans ta boucle et comme tu démarres par le dernier ca donne:

Code : Tout sélectionner

if(i== 0 && PremierOrderTrouve==0)
{
  if(OrderType()==OP_BUY) sens="buy";
  else                              sens="sell";
  PremierOrderTrouve=1;
}

Re: IDENTIFIER LE SENS DU 1ER ORDRE PASSÉ DANS UNE BOUCLE FO

Publié : 26 janv. 2017, 10:51
par MaPomme
De ce que je crois comprendre de la question et sans s'attarder sur le code :? si tu veux déterminer le premier ordre d'une série la seule solution fiable et d'utiliser OrderOpenTime(). Tout le reste et très sujet a caution, notamment si par exemple il y a intervention sur le compte par ailleurs.

Bon courage a toi

Re: IDENTIFIER LE SENS DU 1ER ORDRE PASSE DANS UNE BOUCLE FO

Publié : 26 janv. 2017, 16:36
par neo-13
L'heure, en effet, c'est sans doute la meilleure soluce.

Re: IDENTIFIER LE SENS DU 1ER ORDRE PASSE DANS UNE BOUCLE FO

Publié : 26 janv. 2017, 17:54
par Loverotten
C'est une sorte d'approche "arbitraire"... Ça pourrait donner quelque chose, faut voir.

Re: IDENTIFIER LE SENS DU 1ER ORDRE PASSE DANS UNE BOUCLE FO

Publié : 26 janv. 2017, 18:55
par Elykia34
Bonjour à tous et merci pour vos commentaires et conseils. En effet, je teste déjà le sens de l'ordre mais je veux connaitre celui du 1er ordre de la boucle car c'est sur lui que je vais m'appuyer pour développer le reste de la boucle.
Merci à toi neo-13 pour ta proposition qui convient parfaitement à mon cas. J'ai testé et ça marche comme je le souhaitais.
Merci encore

Re: IDENTIFIER LE SENS DU 1ER ORDRE PASSE DANS UNE BOUCLE FO

Publié : 30 janv. 2017, 14:24
par Jeff719
Arf, bravo Neo-13, j'avais pas tout capté.

Super cette file, on se croirait revenu aux grandes heures de trading automatique, lorsqu'un débutant posant une question attirait la ruée des programmeurs d'expérience pour apporter de l'aide.

Bizarre, Troll55 n'est pas venu pourrir la file. :mrgreen: