Page 1 sur 1

Recuperer variable

Publié : 04 sept. 2012, 12:29
par anthony
Bonjours je commence dans le trading automatique et je voudrais s'avoir comment en MQL4 peut t'ont récupéré des variable d'une stratégie d'ont nous n'avons pas le code (elle est donc en .ex4 ) mais l'ont connait juste leur nom , value 1 , 2 ,3 et 4 . Je voudrais simplement récupéré c variable pour passer ensuite un ordre d'achat a une certaine valeur merci :)

Re: Récupérer variable

Publié : 04 sept. 2012, 12:48
par atk-x
anthony a écrit :Bonjours je commence dans le trading automatique et je voudrais s'avoir comment en MQL4 peut t'ont récupéré des variable d'une stratégie d'ont nous n'avons pas le code (elle est donc en .ex4 ) mais l'ont connait juste leur nom , value 1 , 2 ,3 et 4 . Je voudrais simplement récupéré c variable pour passer ensuite un ordre d'achat a une certaine valeur merci :)
C'est impossible ...

Décompile le ex4 pour avoir le code source et modifie se que tu veux dedans ...

Re: Récupérer variable

Publié : 04 sept. 2012, 13:37
par anthony
ok merci mais alors une fois decompiller comment puis je récupéré cet variable car j'ai assaillais tout a l'heure et sa marche pas . Voila ce que je veut faire .
Je voudrais simplement passer un ordre avec la variable ordesend des que le point arrive a l'une des variable que je veut récupéré de la stratégie puis je veut acheter ou vendre , comment puis je faire cela car moi sa marche pas )= si vous voulais je peut vous passer mon code complet et vous me disais ce qu'il va pas ok ?

Re: Récupérer variable

Publié : 04 sept. 2012, 13:47
par atk-x
anthony a écrit :ok merci mais alors une fois decompiller comment puis je récupéré cet variable car j'ai assaillais tout a l'heure et sa marche pas . Voila ce que je veut faire .
Je voudrais simplement passer un ordre avec la variable ordesend des que le point arrive a l'une des variable que je veut récupéré de la stratégie puis je veut acheter ou vendre , comment puis je faire cela car moi sa marche pas )= si vous voulais je peut vous passer mon code complet et vous me disais ce qu'il va pas ok ?

Ordersend n'est pas une variable mais une fonction ...

Ensuite il te suffit de décompilé le ex4 et dans la source tu écris une fonction qui teste tes variable en fonction de tes conditions et tu fais appelle a la fonction ordersend pour envoyer ton ordre ...

Re: Recuperer variable

Publié : 04 sept. 2012, 16:33
par anthony
Le problème c que j'ai déjà essaille mais sa marche pas car la variable change a chaque tick comment faire ? un exemple ? :)

Re: Recuperer variable

Publié : 04 sept. 2012, 17:11
par atk-x
anthony a écrit :Le problème c que j'ai déjà essaille mais sa marche pas car la variable change a chaque tick comment faire ? un exemple ? :)
Quel change a chaque tick ou pas , sa ne change strictement rien au problème :-D

Je pense qu'il te manque des bases de programmation ^^

Si tes variable change a chaque tick , ta fonction qui vérifie c'est variable la, doit aussi être lue a chaque tick pour voir si une ou l'autre variable a été modifiée ...

Bon allai je suis de bonne humeur donc jvais te donner un ptit exemple lol

Admettons , tu as deux variable V1 et V2 qui sont modifiée a chaque tick

ben tu ecris une fonction qui sera lue a chaque tick (donc tu fais l'appel de ta fonction dans la fonction start() ...) ou bien tu écris directement tes instruction dans la fonction start() c'est comme tu veux ...

Exemple pour buy, V1 = true et pour sell, V2 = true

Code : Tout sélectionner

int Start()
{
   Entree();
   return(0);
}


void Entree()
{
   if(V1)
   {
      Ordersend(BUY...);
   }
   else if(V2)
   {
      Ordersend(SELL...);
   }
}
Ou alors directement dans la fonction start() ...

Code : Tout sélectionner

int Start()
{
   if(V1)
   {
      Ordersend(BUY...);
   }
   else if(V2)
   {
      Ordersend(SELL...);
   }

   return(0);
}  
As tu compris ?

Re: Recuperer variable

Publié : 04 sept. 2012, 17:48
par anthony
déjà fait est sa marche pas :D dsl

Re: Recuperer variable

Publié : 04 sept. 2012, 17:59
par atk-x
anthony a écrit :déjà fait est sa marche pas :D dsl
Le problème est autre part alors ...

Donne ton code jvais jetter un oeil ...

Re: Recuperer variable

Publié : 04 sept. 2012, 20:36
par anthony
Tien voici la parti du code qui m'enquiquine et je le rappelle je débute ^^ , je confirme aussi que il y a aucune erreur dans ma stratégie et que ce code m’affiche aucune erreur.
Les variable sont aussi tous déclare comme il faut ;)

{
while(i == 1)
{
i=1;
if(
((Hour() == heureDebut && Minute() >= minuteDebut) || Hour() > heureDebut) &&
((Hour() == heureFin && Minute() <= minuteFin) || Hour() < heureFin)
) {
if(lastTrade != iTime( NULL, PERIOD_D1, 0)) {
skipClosingTrades = false;
lastTrade = iTime( NULL, PERIOD_D1, 0);

double value2 = mavariable1 ;
double value3 = mavariable2 ;
double value4 = mavariable3 ;
double value5 = mavariable4 ;

while(trade <= 3)
{
if(value3 > Ask )
{
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,0,0,"BUY 3 ea",magicalNumber,0,Green);
if(ticket >= 0) {
if(OrderSelect(ticket, SELECT_BY_TICKET)) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderOpenPrice()+TakeProfit*Point,0,Blue)){
Print("Error modifing BUY order : ",GetLastError());
}
}
}
trade ++; }

else if(value2 < Bid)
{
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,slippage,0,0,"SELL 2 ea",magicalNumber,0,Red);
if(ticket >= 0) {
if(OrderSelect(ticket, SELECT_BY_TICKET)) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderOpenPrice()-TakeProfit*Point,0,Blue)){
Print("Error modifing SELL order : ",GetLastError());
}
}
}
trade ++;}
else if(value4 < Bid)
{
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,slippage,0,0,"sell 4 ea",magicalNumber,0,Red);
if(ticket >= 0) {
if(OrderSelect(ticket, SELECT_BY_TICKET)) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderOpenPrice()-TakeProfit*Point,0,Blue)){
Print("Error modifing SELL order : ",GetLastError());
}
}
}
trade ++;}
else if(value5 > Ask)
{
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,0,0,"buy 5 ea",magicalNumber,0,Red);
if(ticket >= 0) {
if(OrderSelect(ticket, SELECT_BY_TICKET)) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderOpenPrice()-TakeProfit*Point,0,Blue)){
Print("Error modifing SELL order : ",GetLastError());
}
}
}
trade ++;}
}

}
} else if(!skipClosingTrades){
skipClosingTrades = true;
closeAllTrades();
}
}

return(0);
}

void closeAllTrades(){
for(int cnt = OrdersTotal()-1; cnt >= 0; cnt--){
if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
Print("Error : ",GetLastError());
}
if(OrderSymbol()==Symbol() && OrderMagicNumber() == magicalNumber) {
if(OrderType() == OP_BUY){
if(!OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Green)){
Print("Error : ",GetLastError());
}
}else if(OrderType() == OP_SELL){
if(!OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Red)) {
Print("Error : ",GetLastError());
}
}
}
}
}

Re: Recuperer variable

Publié : 04 sept. 2012, 21:58
par atk-x
anthony a écrit :Tien voici la parti du code qui m'enquiquine et je le rappelle je débute ^^ , je confirme aussi que il y a aucune erreur dans ma stratégie et que ce code m’affiche aucune erreur.
Les variable sont aussi tous déclare comme il faut ;)

{
while(i == 1)
{
i=1;
if(
((Hour() == heureDebut && Minute() >= minuteDebut) || Hour() > heureDebut) &&
((Hour() == heureFin && Minute() <= minuteFin) || Hour() < heureFin)
) {
if(lastTrade != iTime( NULL, PERIOD_D1, 0)) {
skipClosingTrades = false;
lastTrade = iTime( NULL, PERIOD_D1, 0);

double value2 = mavariable1 ;
double value3 = mavariable2 ;
double value4 = mavariable3 ;
double value5 = mavariable4 ;

while(trade <= 3)
{
if(value3 > Ask )
{
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,0,0,"BUY 3 ea",magicalNumber,0,Green);
if(ticket >= 0) {
if(OrderSelect(ticket, SELECT_BY_TICKET)) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderOpenPrice()+TakeProfit*Point,0,Blue)){
Print("Error modifing BUY order : ",GetLastError());
}
}
}
trade ++; }

else if(value2 < Bid)
{
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,slippage,0,0,"SELL 2 ea",magicalNumber,0,Red);
if(ticket >= 0) {
if(OrderSelect(ticket, SELECT_BY_TICKET)) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderOpenPrice()-TakeProfit*Point,0,Blue)){
Print("Error modifing SELL order : ",GetLastError());
}
}
}
trade ++;}
else if(value4 < Bid)
{
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,slippage,0,0,"sell 4 ea",magicalNumber,0,Red);
if(ticket >= 0) {
if(OrderSelect(ticket, SELECT_BY_TICKET)) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderOpenPrice()-TakeProfit*Point,0,Blue)){
Print("Error modifing SELL order : ",GetLastError());
}
}
}
trade ++;}
else if(value5 > Ask)
{
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,0,0,"buy 5 ea",magicalNumber,0,Red);
if(ticket >= 0) {
if(OrderSelect(ticket, SELECT_BY_TICKET)) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderOpenPrice()-TakeProfit*Point,0,Blue)){
Print("Error modifing SELL order : ",GetLastError());
}
}
}
trade ++;}
}

}
} else if(!skipClosingTrades){
skipClosingTrades = true;
closeAllTrades();
}
}

return(0);
}

void closeAllTrades(){
for(int cnt = OrdersTotal()-1; cnt >= 0; cnt--){
if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
Print("Error : ",GetLastError());
}
if(OrderSymbol()==Symbol() && OrderMagicNumber() == magicalNumber) {
if(OrderType() == OP_BUY){
if(!OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Green)){
Print("Error : ",GetLastError());
}
}else if(OrderType() == OP_SELL){
if(!OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Red)) {
Print("Error : ",GetLastError());
}
}
}
}
}
Avant d'aller plus loin , c'est quoi cette boucle infinie ??? while(i == 1) pourquoi fais tu ça ?

Re: Recuperer variable

Publié : 05 sept. 2012, 10:33
par anthony
a oui c juste pour essailer de toute façon sa change rien au problème

Re: Recuperer variable

Publié : 05 sept. 2012, 11:37
par atk-x
anthony a écrit :a oui c juste pour essailer de toute façon sa change rien au problème
Bien sur que si LOL si tu fais une boucle infinie dans ta fonction start ton robot ne saurais jamais fonctionner ... j'essayerai ton code cette apres midi , je te tiens au jus ...

Re: Recuperer variable

Publié : 05 sept. 2012, 11:40
par anthony
ok thx mais je t'assure que la boucle ne change rien du tout )=

Re: Recuperer variable

Publié : 05 sept. 2012, 12:23
par atk-x
anthony a écrit :ok thx mais je t'assure que la boucle ne change rien du tout )=
Si elle est dans ta fonction start avec cette boucle SA NE SAURAIS JAMAIS FONCTIONNER !!!

Allai réfléchit deux secondes :-D la fonction start est lue a chaque tick si tu fais une boucle infinie la dedans elle ne sera lue qu'une seul fois , donc RIEN ne fonctionnera .

Re: Recuperer variable

Publié : 05 sept. 2012, 14:07
par anthony
Tien un autre code que j'ai fait t'alleur mais toujours la même sa marche pas alors que moi je voit pas d'erreur )=


#property copyright "anthony"

extern int heureDebut = 8;
extern int minuteDebut = 0;
extern int heureFin = 23;
extern int minuteFin = 0;

extern int TakeProfit = 50;
extern int StopLoss = 25;
extern double Lots = 0.01;
extern int slippage = 3;

int magicalNumber,ticket,trade;
datetime lastTrade = EMPTY_VALUE;
bool skipClosingTrades = true;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
magicalNumber = 98765;


//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----

if(
((Hour() == heureDebut && Minute() >= minuteDebut) || Hour() > heureDebut) &&
((Hour() == heureFin && Minute() <= minuteFin) || Hour() < heureFin)
) {
if(lastTrade != iTime( NULL, PERIOD_D1, 0)) {
skipClosingTrades = false;
lastTrade = iTime( NULL, PERIOD_D1, 0);

double value2 = iCustom(NULL,0,"test",2,4,0,8,6,1,0);
double value3 = iCustom(NULL,0,"test",2,4,0,8,6,3,0);
double value4 = iCustom(NULL,0,"test",2,4,0,8,6,2,0);
double value5 = iCustom(NULL,0,"test",2,4,0,8,6,4,0);

if(Ask < value3 && Ask > value5){
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,0,0,"BUY EA 3",magicalNumber,0,Green);
if(ticket >= 0) {
if(OrderSelect(ticket, SELECT_BY_TICKET)) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderOpenPrice()+TakeProfit*Point,0,Blue)){
Print("Error modifing BUY order : ",GetLastError());
}
}
}
} else if(Bid > value2 && Bid < value4){
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,slippage,0,0,"SELL EA 2",magicalNumber,0,Red);
if(ticket >= 0) {
if(OrderSelect(ticket, SELECT_BY_TICKET)) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderOpenPrice()-TakeProfit*Point,0,Blue)){
Print("Error modifing SELL order : ",GetLastError());
}
}
}
}
else if(Bid > value4){
ticket = OrderSend(Symbol(),OP_SELL,0.02,Bid,slippage,0,0,"SELL EA 4",magicalNumber,0,Red);
if(ticket >= 0) {
if(OrderSelect(ticket, SELECT_BY_TICKET)) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderOpenPrice()-TakeProfit*Point,0,Blue)){
Print("Error modifing SELL order : ",GetLastError());
}
}
}
}

else if(Ask < value5){
ticket = OrderSend(Symbol(),OP_BUY,0.02,Ask,slippage,0,0,"BUY EA 5",magicalNumber,0,Green);
if(ticket >= 0) {
if(OrderSelect(ticket, SELECT_BY_TICKET)) {
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderOpenPrice()+TakeProfit*Point,0,Blue)){
Print("Error modifing BUY order : ",GetLastError());
}
}
}
}




}
} else if(!skipClosingTrades){
skipClosingTrades = true;
closeAllTrades();
}
//----
return(0);
}
//+------------------------------------------------------------------+

void closeAllTrades(){
for(int cnt = OrdersTotal()-1; cnt >= 0; cnt--){
if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
Print("Error : ",GetLastError());
}
if(OrderSymbol()==Symbol() && OrderMagicNumber() == magicalNumber) {
if(OrderType() == OP_BUY){
if(!OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Green)){
Print("Error : ",GetLastError());
}
}else if(OrderType() == OP_SELL){
if(!OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Red)) {
Print("Error : ",GetLastError());
}
}
}
}
}



Voila l'ordre est passer mais pas au bonne endroit alors que les comparaison son bonne non ?
car peut importe la courbe il m’achète toujours le 1er "buy ea 3" .

Re: Recuperer variable

Publié : 05 sept. 2012, 15:31
par atk-x
Je peux aussi avoir ton indicateur que tu appelle avec Icustom ? pour voir se qu'il retourne ...

Re: Recuperer variable

Publié : 05 sept. 2012, 19:17
par anthony
non pas besoin de l'indicateur ...
Juste par rapport au code la tu peut me dire si il a des erreur .

Re: Recuperer variable

Publié : 05 sept. 2012, 21:53
par AUTOFOREX
es-tu certain que ton indi que tu appeles avec ton iCustom te permet d'avoir des valeurs comparables au prix ?

le journal ne contient pas d'erreur ?

Re: Recuperer variable

Publié : 05 sept. 2012, 23:19
par atk-x
anthony a écrit :non pas besoin de l'indicateur ...
Juste par rapport au code la tu peut me dire si il a des erreur .
Tu crois que jvais te piquer ta stratégie ou quoi !? Se que dit autoforex n'est pas faux du tout !

C'est pour cela que j'aimerai bien voir se qu'il retourne ...

Mais vu que tu veux pas, débrouille toi tout seul alors ...

Re: Recuperer variable

Publié : 06 sept. 2012, 19:08
par anthony
AUTOFOREX oui je suis certain ;)
je demande juste si dans mon code la il y a une erreur car la console n’affiche rien .

Re: Recuperer variable

Publié : 06 sept. 2012, 21:13
par anthony
C bon j'ai trouver l'erreur ouf!!!!!!!!! merci comme même

Re: Recuperer variable

Publié : 07 sept. 2012, 14:04
par AUTOFOREX
anthony a écrit :C bon j'ai trouver l'erreur ouf!!!!!!!!! merci comme même
Un petit effort pour la culture populaire, c'était donc quoi cette erreur ? :)

Re: Recuperer variable

Publié : 07 sept. 2012, 18:14
par anthony
Metre la fonction le tout de la fonction start dans une boucle while qui se repete que si le X et =1 et donc a chaque passage d'un trade j’incrémente de 1 la variable X et sa marche ... :?