C++ executer function 1 fois
Résolu/Fermé
pgforex
Messages postés
5
Date d'inscription
samedi 10 octobre 2009
Statut
Membre
Dernière intervention
5 novembre 2009
-
4 nov. 2009 à 05:49
pgforex Messages postés 5 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 5 novembre 2009 - 5 nov. 2009 à 02:26
pgforex Messages postés 5 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 5 novembre 2009 - 5 nov. 2009 à 02:26
A voir également:
- C++ executer function 1 fois
- Sirène pompiers 5 fois signification ✓ - Forum Loisirs / Divertissements
- Qu'est ce qu'une femme fait 3 fois par jour et un homme une fois dans sa vie ✓ - Forum Loisirs / Divertissements
- Je suis une chose que les garçons utilisent deux fois par jour et les filles une fois toute leur vie - Forum Loisirs / Divertissements
- Site paiement plusieur fois carte nickel forum ✓ - Forum Consommation & Internet
- Signe fois ✓ - Forum Windows
4 réponses
Bonjour
Il suffit d'ajouter une autre variable qui se rappelle si tu as déja fait le traitement ou pas :
Il suffit d'ajouter une autre variable qui se rappelle si tu as déja fait le traitement ou pas :
int dejafait=0; ... if ((int a>=10) && (dejafait=0)) { dejafait=1; // comme ça on n'y reviendra plus instruction..... }
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
4 nov. 2009 à 12:07
4 nov. 2009 à 12:07
Ouai, mais si c'est au sein d'une fonction, il y a un souci. à ce moment là il faut mettre la fonction static.
Bref, si nous n'avons pas les condition de boucle et l'environnement de l'appel, il est très difficile de t'aider !
Bref, si nous n'avons pas les condition de boucle et l'environnement de l'appel, il est très difficile de t'aider !
pgforex
Messages postés
5
Date d'inscription
samedi 10 octobre 2009
Statut
Membre
Dernière intervention
5 novembre 2009
4 nov. 2009 à 15:32
4 nov. 2009 à 15:32
Merci de vos réponses. Je n'ai pas affiché le code complet car ce n'est pas vraiment du C++. C'est plutôt du mql4 https://www.mql4.com/ . C'est un langage réservé a la platform de trading MetaTrader4 https://www.metaquotes.net/ . Le problème c'est que le seul forum digne de s'appeler forum est en anglais. Je n'ais jamais codé de ma vie, donc c'est encore plus dure de comprend en anglais.
Voici mon premier code à vie. En même temps, j'ai un erreur de bracket dans la loop for (unbalanced bracket) si vous la trouvé.
Les deux chose qui doivent être exécuté 1 seule fois sont commenté avec ceci:
//---- Take Profit half position execut only once
Merci!
//+------------------------------------------------------------------+
//| |
//| Copyright © 2009, Pascal Gignac |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Pascal Gignac"
#property link ""
//---- Input Parameters
extern int TakeProfit = 20;
extern int FirstTarget = 15;
extern int FirstStop = 1;
extern int StopLoss = 20;
extern int EMA_Period1 = 5;
extern int EMA_Period2 = 10;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, total, EMA_1, EMA_2;
double CloseLots;
//----
for(cnt = 0; cnt < total; cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES==true))
if(OrderType() == OP_SELL && OrderSymbol() == Symbol())
{
CloseLots = OrderLots() / 2;
EMA_1 = iMA(Symbol(),0,EMA_Period1,0,MODE_EMA,PRICE_CLOSE,0);
EMA_2 = iMA(Symbol(),0,EMA_Period2,0,MODE_EMA,PRICE_CLOSE,0);
//---- Max Stop Loss OP_SELL
if(Bid >= (OrderOpenPrice()+(StopLoss*Point))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
return(0);
} //---- Modify when hit First Target
if(Bid <= OrderOpenPrice()-(FirstTarget*Point))
{
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() - (FirstStop*Point),0, 0, Blue);
return(0);
} //---- Take Profit half position execut only once
if(Bid <= OrderOpenPrice()-(TakeProfit*Point)
{
OrderClose(OrderTicket(),CloseLots, Bid,3,Green);
return(0);
//---- Take Profit second half position when EMA crosse
}
if(EMA_1 > EMA_2)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Lime);
return(0);
}
}
else //---- Sinon OP_BUY
//---- Max StopLoss on OP_BUY
{
if(Ask <= (OrderOpenPrice()-(StopLoss * Point)))
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
return(0);
}
//---- Modify when hit First Target
if(Ask >= OrderOpenPrice()+(FirstTarget*Point))
{
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice()+(FirstStop*Point),0,0, Blue);
return(0);
}
//---- Take Profit half position execute only once
if(Ask >= OrderOpenPrice()+(TakeProfit*Point))
{
OrderClose(OrderTicket(),CloseLots, Ask,3,Green);
return(0);
}
//---- Take Profit second half position when EMA crosse
if(EMA_1 < EMA_2)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Lime);
return(0);
}
return(0);
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
Voici mon premier code à vie. En même temps, j'ai un erreur de bracket dans la loop for (unbalanced bracket) si vous la trouvé.
Les deux chose qui doivent être exécuté 1 seule fois sont commenté avec ceci:
//---- Take Profit half position execut only once
Merci!
//+------------------------------------------------------------------+
//| |
//| Copyright © 2009, Pascal Gignac |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Pascal Gignac"
#property link ""
//---- Input Parameters
extern int TakeProfit = 20;
extern int FirstTarget = 15;
extern int FirstStop = 1;
extern int StopLoss = 20;
extern int EMA_Period1 = 5;
extern int EMA_Period2 = 10;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, total, EMA_1, EMA_2;
double CloseLots;
//----
for(cnt = 0; cnt < total; cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES==true))
if(OrderType() == OP_SELL && OrderSymbol() == Symbol())
{
CloseLots = OrderLots() / 2;
EMA_1 = iMA(Symbol(),0,EMA_Period1,0,MODE_EMA,PRICE_CLOSE,0);
EMA_2 = iMA(Symbol(),0,EMA_Period2,0,MODE_EMA,PRICE_CLOSE,0);
//---- Max Stop Loss OP_SELL
if(Bid >= (OrderOpenPrice()+(StopLoss*Point))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
return(0);
} //---- Modify when hit First Target
if(Bid <= OrderOpenPrice()-(FirstTarget*Point))
{
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() - (FirstStop*Point),0, 0, Blue);
return(0);
} //---- Take Profit half position execut only once
if(Bid <= OrderOpenPrice()-(TakeProfit*Point)
{
OrderClose(OrderTicket(),CloseLots, Bid,3,Green);
return(0);
//---- Take Profit second half position when EMA crosse
}
if(EMA_1 > EMA_2)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Lime);
return(0);
}
}
else //---- Sinon OP_BUY
//---- Max StopLoss on OP_BUY
{
if(Ask <= (OrderOpenPrice()-(StopLoss * Point)))
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
return(0);
}
//---- Modify when hit First Target
if(Ask >= OrderOpenPrice()+(FirstTarget*Point))
{
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice()+(FirstStop*Point),0,0, Blue);
return(0);
}
//---- Take Profit half position execute only once
if(Ask >= OrderOpenPrice()+(TakeProfit*Point))
{
OrderClose(OrderTicket(),CloseLots, Ask,3,Green);
return(0);
}
//---- Take Profit second half position when EMA crosse
if(EMA_1 < EMA_2)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Lime);
return(0);
}
return(0);
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
>
pgforex
Messages postés
5
Date d'inscription
samedi 10 octobre 2009
Statut
Membre
Dernière intervention
5 novembre 2009
4 nov. 2009 à 16:35
4 nov. 2009 à 16:35
comme on a dit, mais une fonction de flag. selon que tu veux que la première fois soit absolue, il faut mettre une variable global, si tu veux que ça soit la première fois à chaque appel de la fonction start(), il faut mettre la variable dans la fonction start. (sans static).
Pour les problèmes d'accolades et de parenthèses, il y a deux solutions :
indenter correctement ton code, comme ça tu verras visuellement où il manque une accolade.
Et encore plus simple, avoir un éditeur qui repère les paires. La plupart des éditeurs de C++ le fond (des fois il faut l'activer dans les options). En plaçant ton curseur sur l'accolade, l'accolade correspondante doit être surligner.
Pour les problèmes d'accolades et de parenthèses, il y a deux solutions :
indenter correctement ton code, comme ça tu verras visuellement où il manque une accolade.
Et encore plus simple, avoir un éditeur qui repère les paires. La plupart des éditeurs de C++ le fond (des fois il faut l'activer dans les options). En plaçant ton curseur sur l'accolade, l'accolade correspondante doit être surligner.
Merci de la précision, tu as tout à fait raison. Mais, sauf que c'est la variable qui doit être static :
static int dejafait=0;
(ou globale, n'ayons peur de rien)
static int dejafait=0;
(ou globale, n'ayons peur de rien)
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
4 nov. 2009 à 14:38
4 nov. 2009 à 14:38
au temps pour moi. erreur d'expression. Global c'est ce qu'il y a de plus sur !
pgforex
Messages postés
5
Date d'inscription
samedi 10 octobre 2009
Statut
Membre
Dernière intervention
5 novembre 2009
5 nov. 2009 à 02:26
5 nov. 2009 à 02:26
Excellent tout est réglé.
Merci!
pgforex
Merci!
pgforex