Questions de base ... - page 8

 

Regardez ce fil de discussion : https://www.mql5.com/en/forum/178677

 
newdigital:
Regardez ce fil : https://www.mql5.com/en/forum/178677

Merci beaucoup pour les instructions d'ouverture du fichier et le lien de téléchargement.

 

10points3

S'IL VOUS PLAÎT, PROGRAMMEURS !

Nous avons besoin dans 10points3 EA, que lorsque le troisième trade s'ouvre, le premier se ferme, j'essaie mais il ferme toujours toutes les positions.

En fait, nous avons :

if (PreviousOpenOrders>OpenOrders)

{

for(cnt=OrdersTotal();cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;

mode=OrderType() ;

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

{

if (mode==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(),slippage,Blue) ; }

si (mode==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(),slippage,Red) ; }

return(0) ;

}

Je pensais faire ceci

1. changer le numéro magique pour le premier trade lorsque le second s'ouvre, par exemple magicnumber+1

2. lorsque le troisième trade s'ouvre, fermer le premier, avec le magicnumber+1 assigné.

Ai-je raison ?

ou quelle autre façon puis-je identifier le premier trade ouvert pour le fermer plus tard ?

Si vous pouvez me guider ou faire les changements, c'est mieux parce que je ne suis pas un programmeur, je suis juste en train d'apprendre.

Ce changement serait le début du Saint Graal!!!

 

10points3

Désolé, l'EA.

Et c'est dans ce fil :

https://www.mql5.com/en/forum/174975

Merci !

Dossiers :
10p3v0.03_1.mq4  12 kb
 

aide à la programmation - opérateur de retour

Bonjour

je suis débutant en programmation mt4 et maintenant j'essaie souvent de trouver une solution pour engager les variables d'une fonction void au programme principal "start()".

ci-dessous vous pouvez voir un exemple et la question est , comment puis-je commettre la valeur de variable "CountOpenSell", "CountOpenBuy", "ProfitSell " et "ProfitBuy" au start() - mainprogram.........

J'ai ajouté ma suggestion (les retours sont en caractères gras) mais je ne sais pas si elle est correcte et quel est le bon code pour le programme principal "start()" ???

Désolé pour mon mauvais anglais et pour toute aide

merci beaucoup

salutations

forex2006

void CallBuySellProfit()

{ ProfitBuy=0 ;

ProfitSell=0 ;

CountOpenSell=0 ;

CountOpenBuy=0 ;

for (i=OrdersTotal()-1;i>=0;i--)

{if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if (OrderType()==OP_SELL) {ProfitSell = ProfitSell + OrderProfit();CountOpenSell++;}

si (OrderType()==OP_BUY) {ProfitBuy = ProfitBuy + OrderProfit();CountOpenBuy++;}

}

else Print( "Erreur lors de la sélection de l'ordre ", GetLastError()) ;

}

return(CountOpenSell) ;

return(CountOpenBuy) ;

return(ProfitSell) ;

return(ProfitBuy) ;

}

 

aide à la programmation forex2006 - opérateur de retour

Salut forex2006,

Si vous voulez vraiment apprendre le mql, je vous suggère d'essayer les tutoriels de codersguru, c'est là que j'ai commencé. Pour répondre à votre question, une fonction void ne peut pas retourner une valeur, si vous voulez obtenir des valeurs à partir de fonctions void, vous devez utiliser des variables globales. La meilleure façon d'obtenir les valeurs est d'utiliser une fonction qui renvoie une valeur utilisée avec des paramètres pour indiquer les valeurs que vous voulez. Vous trouverez un exemple simple ci-dessous. Essayez d'éviter d'utiliser des variables globales dans les fonctions, car cela pourrait vous rendre la tâche difficile par la suite.

J'espère que cela vous aidera

int start()

{

double ProfitBuy = CallBuySellProfit(OP_BUY,false) ;

double ProfitSell = CallBuySellProfit(OP_SELL,false) ;

int CountOpenBuy = CallBuySellProfit(OP_BUY,true) ;

int CountOpenSell = CallBuySellProfit(OP_SELL,true) ;

Comment( "ProfitBuy : "+DoubleToStr(ProfitBuy,2) +"\n "+

"ProfitSell : "+DoubleToStr(ProfitSell,2) +"\n "+

"CountOpenBuy : "+DoubleToStr(CountOpenBuy,2)+"\n "+

"CountOpenSell : "+DoubleToStr(CountOpenSell,2)+"\n "+

"") ;

retour ;

}

double CallBuySellProfit(int iOrderType, bool bCount)

{

double dProfit = 0 ;

int iCount = 0 ;

for (int i=OrdersTotal()-1;i>=0;i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

si(OrderType()==iOrderType))

{

dProfit = dProfit + OrderProfit() ;

iCount++ ;

}

}

sinon

{

Print( "Erreur lors de la sélection de la commande ", GetLastError()) ;

}

}//fin pour

if(bCount)return(iCount) ;

sinon return(dProfit) ;

}//end CallBuySellProfit

 

Arrêter les transactions de l'EA sur la même barre

Bonjour, est-il possible de mettre un code pour que l'EA vérifie si des transactions ont déjà été effectuées sur cette barre puis de ne plus effectuer de transactions jusqu'à une nouvelle barre ?

Merci

 

matrixebiz, avez-vous envisagé la possibilité qu'un trade s'ouvre et se ferme dans la même bougie avant que celle-ci ne soit fermée ? vous devriez probablement vérifier la liste des historiques également.

J'ai toujours porté cette petite fonction que j'ai écrite à tous mes EAs, peut-être la trouverez-vous utile aussi.

bool DecideToOpenTrade()

{

int total = OrdersTotal();

if (total > 0)

{

for(int cnt=0;cnt<total;cnt++)

{

if(OrderSelect(cnt,SELECT_BY_POS))

{

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

{

return (false);

}

}

}

}

// in case trades has already opened and closed within the candle

int histotal = OrdersHistoryTotal();

if (histotal > 0)

{

for(cnt=0;cnt<histotal;cnt++)

{

if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))

{

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

{

if (Time[0] <= OrderOpenTime()) // don't open a new position if we're still on the same candle

{

return (false);

}

}

}

}

}

return (true);

}

int start()

{

// some time check codes first.. blah blah

// ...

// ...

// ...

// check signals

if (Should_Buy())

{

if (DecideToOpenTrade())

{

//... trade opening codes here

}

}

if (Should_Sell())

{

if (DecideToOpenTrade())

{

//... trade opening codes here

}

}

}

note : cette fonction suppose que vous avez défini une valeur unique à EA_MAGIC_NUM. De cette façon, la vérification ne regardera pas les transactions ouvertes par d'autres EAs.

Should_Buy() et Should_Sell() sont des fonctions que je crée dans tous mes EAs pour déterminer si un signal d'achat ou de vente s'est produit.

J'espère que cela vous aidera. Envoyez-moi un message si vous avez besoin d'autres éclaircissements.

Salutations,

Zen

 

poste mis à jour ci-dessous...

 

Cela semble fonctionner pour moi Merci.

void DesideToOpen()

//----------------------------------------------------------------+

//----------------------------------------------------------------+

{

int total = OrdersTotal();

if (total > 0)

{

for(int cnt=0;cnt<total;cnt++)

{

if(OrderSelect(cnt,SELECT_BY_POS))

{

if(OrderComment() == EA_Name + MagicNumber) DecideToOpenTrade = false;

}

}

}

// in case trades has already opened and closed within the candle

int histotal = OrdersHistoryTotal();

if (histotal > 0)

{

for(cnt=0;cnt<histotal;cnt++)

{

if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))

{

if(OrderComment() == EA_Name + MagicNumber)

{

if (Time[0] <= OrderOpenTime()) DecideToOpenTrade = false; // don't open a new position if we're still on the same candle

}

}

}

}

}

Raison: