Besoin de l'aide d'un programmeur
Modérateur : Administrateurs
- Fabien LABROUSSE
- Administrateur
- Messages : 17047
- Inscription : 17 mars 2008, 19:41
- Localisation : Paris, France
Besoin de l'aide d'un programmeur
Besoin de l'aide d'un programmeur
Bonjour,
Je voudrais créer un ea à partir de l'indicateur BreakOut ci joint (qui indique des plus hauts et plus bas selon la tranche horraire définie par le trader).
Le but de l'ea: rentré une fois que le plus haut ou plus bas de la zone définit est franchit, avec un TP et un SL paramètrable. un ea de breakout tout simple donc. (peut etre que cela existe déja, si vous en connaissez, merci de m'indiquer l'adresse )
Merci par avance.
Bonjour,
Je voudrais créer un ea à partir de l'indicateur BreakOut ci joint (qui indique des plus hauts et plus bas selon la tranche horraire définie par le trader).
Le but de l'ea: rentré une fois que le plus haut ou plus bas de la zone définit est franchit, avec un TP et un SL paramètrable. un ea de breakout tout simple donc. (peut etre que cela existe déja, si vous en connaissez, merci de m'indiquer l'adresse )
Merci par avance.
- Pièces jointes
-
- breakout.mq4
- Indicateur Breakout
- (6.83 Kio) Téléchargé 446 fois
La Structure (par VideoBourse) : Formation sur mesure et évolutive pour optimiser compréhension et résultats en trading
Informations et inscriptions : https://forms.gle/A2vnZduSwv2wPFSS7
Contact et échanges avec la communauté : Discord, mail, téléphone, LinkedIn...
Marchés en aparté : Témoignages de traders, investisseurs, analystes et économistes sur les marchés financiers
Re: Besoin de l'aide d'un programmeur
ça serait cool que quelqu'un sache faire ça
"The market is like a beautiful woman-endlessly fascinating, endlessly complex, always changing, always mystifying." The Money Game - Adam Smith
L'art d'être tantôt très audacieux et tantôt très prudent est l'art de réussir-Napoléon Bonaparte
L'art d'être tantôt très audacieux et tantôt très prudent est l'art de réussir-Napoléon Bonaparte
- ollytrader
- Membre actif
- Messages : 17
- Inscription : 09 févr. 2009, 18:11
Re: Besoin de l'aide d'un programmeur
Salut Fab,
Je voudrais bien te coder tout ce que tu veux...
des que j'ai un bout de temps...
Stephane (OllyTrader)
Je voudrais bien te coder tout ce que tu veux...
des que j'ai un bout de temps...
Stephane (OllyTrader)
Parce que la valeur n'attend point le nombre des annees...
- Fabien LABROUSSE
- Administrateur
- Messages : 17047
- Inscription : 17 mars 2008, 19:41
- Localisation : Paris, France
Re: Besoin de l'aide d'un programmeur
Merci Ollytrader pour ce très bon esprit!
En effet, je vais me répéter, mais l'union fait la force, et je pense que l'on peut vraiment avancer en s'entraidant.
De mon coté je travail sur la programmation depuis quelques mois maintenant mais je progresse doucement car j'y consacre peu de temps. Je pense que la programmation est indispensable à un trader meme manuel pour tester ses idées de stratégies sur le passé par exemple.
Tu travail dans la programmation?
En effet, je vais me répéter, mais l'union fait la force, et je pense que l'on peut vraiment avancer en s'entraidant.
De mon coté je travail sur la programmation depuis quelques mois maintenant mais je progresse doucement car j'y consacre peu de temps. Je pense que la programmation est indispensable à un trader meme manuel pour tester ses idées de stratégies sur le passé par exemple.
Tu travail dans la programmation?
La Structure (par VideoBourse) : Formation sur mesure et évolutive pour optimiser compréhension et résultats en trading
Informations et inscriptions : https://forms.gle/A2vnZduSwv2wPFSS7
Contact et échanges avec la communauté : Discord, mail, téléphone, LinkedIn...
Marchés en aparté : Témoignages de traders, investisseurs, analystes et économistes sur les marchés financiers
- Fabien LABROUSSE
- Administrateur
- Messages : 17047
- Inscription : 17 mars 2008, 19:41
- Localisation : Paris, France
Re: Besoin de l'aide d'un programmeur
Bonjour,
Avec le site http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/
J'ai tenté de créer un Expert Advisor reprenant la stratégie des croisements de moyennes mobiles dont je parle dans mes webinaires.
Cependant, quand je le lance, il ne prend pas d'ordre, et en relisant le code je ne voit pas où je me suis trompé, si quelqu'un a une idée...
(Voir l'expert en question ci-joint)
Merci par avance et bon weekend.
Avec le site http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/
J'ai tenté de créer un Expert Advisor reprenant la stratégie des croisements de moyennes mobiles dont je parle dans mes webinaires.
Cependant, quand je le lance, il ne prend pas d'ordre, et en relisant le code je ne voit pas où je me suis trompé, si quelqu'un a une idée...
(Voir l'expert en question ci-joint)
Merci par avance et bon weekend.
- Pièces jointes
-
- reve.mq4
- Reve, mon ptit expert advisor...
- (9.82 Kio) Téléchargé 415 fois
La Structure (par VideoBourse) : Formation sur mesure et évolutive pour optimiser compréhension et résultats en trading
Informations et inscriptions : https://forms.gle/A2vnZduSwv2wPFSS7
Contact et échanges avec la communauté : Discord, mail, téléphone, LinkedIn...
Marchés en aparté : Témoignages de traders, investisseurs, analystes et économistes sur les marchés financiers
Re: Besoin de l'aide d'un programmeur
HéHé j'aime bien le nom
Je vais regarder au cas où si j'ai une idée^^ bien joué en tout cas fab
ps : tu sais à quoi sert le magic number ?
Je vais regarder au cas où si j'ai une idée^^ bien joué en tout cas fab
ps : tu sais à quoi sert le magic number ?
"The market is like a beautiful woman-endlessly fascinating, endlessly complex, always changing, always mystifying." The Money Game - Adam Smith
L'art d'être tantôt très audacieux et tantôt très prudent est l'art de réussir-Napoléon Bonaparte
L'art d'être tantôt très audacieux et tantôt très prudent est l'art de réussir-Napoléon Bonaparte
-
- Membre actif
- Messages : 37
- Inscription : 17 mars 2009, 10:01
Re: Besoin de l'aide d'un programmeur
Le "magic number" est une sorte d'identifiant pour MT4. Si jamais on fait tourner simultanement plusieurs EAs sur une même plateforme, MT4 saura qu'un code spécific s'adresse à un ordre spécific en se basant sur le magic number.
Il arrive parfois que deux EAs ont le même magic number, donc conflit, il suffit de changer l'un (si c'est possible) et le problème est résolu
Cheers,
GE
Il arrive parfois que deux EAs ont le même magic number, donc conflit, il suffit de changer l'un (si c'est possible) et le problème est résolu
Cheers,
GE
Re: Besoin de l'aide d'un programmeur
Super merci GrayEminence, je me suis toujours demandé à quoi il servait ce nombre
"The market is like a beautiful woman-endlessly fascinating, endlessly complex, always changing, always mystifying." The Money Game - Adam Smith
L'art d'être tantôt très audacieux et tantôt très prudent est l'art de réussir-Napoléon Bonaparte
L'art d'être tantôt très audacieux et tantôt très prudent est l'art de réussir-Napoléon Bonaparte
Re: Besoin de l'aide d'un programmeur
Le magic number est la signature d'un EA. C'est préférable de toujours lui en assigner un. Perso je mets la date de création de l'EA en MM (les poules voleront quand je créerai deux EAs en un jour). Ex : 300509 pour l'EA d'aujourd'hui.
L'utilité c'est de pouvoir utiliser deux ou plus EAs différents sur une même paire :
1er chart EURUSD EA1 mm 10
2e chart EURUSD EA2 mm 11
3e chart EURUSD EA3 mm 10
4e chart GBPUSD EA4 mm 10
Dans ce cas l'EA2 s'occupera que de ses positions et que de ses positions. Par contre l'EA1 et l'EA3 pourraient bien se marcher sur les pieds et fermer les ordres l'une de l'autre....
Par contre vu que l'EA4 est sur une paire différente, le mm de 10 n'est pas important. Si on veut l'EA4 sur EURUSD il vaut mieux mettre un mm différent de 10 & 11.
Zou.
L'utilité c'est de pouvoir utiliser deux ou plus EAs différents sur une même paire :
1er chart EURUSD EA1 mm 10
2e chart EURUSD EA2 mm 11
3e chart EURUSD EA3 mm 10
4e chart GBPUSD EA4 mm 10
Dans ce cas l'EA2 s'occupera que de ses positions et que de ses positions. Par contre l'EA1 et l'EA3 pourraient bien se marcher sur les pieds et fermer les ordres l'une de l'autre....
Par contre vu que l'EA4 est sur une paire différente, le mm de 10 n'est pas important. Si on veut l'EA4 sur EURUSD il vaut mieux mettre un mm différent de 10 & 11.
Zou.
- Fabien LABROUSSE
- Administrateur
- Messages : 17047
- Inscription : 17 mars 2008, 19:41
- Localisation : Paris, France
Re: Besoin de l'aide d'un programmeur
Avec Expert Advisor Builder, j'ai créé un expert très simple basé sur les bandes de bollinger.
J'ai voulu ajouter un système de martingale mais il y a une erreur que je n'arrive pas à corriger:
'(' - function definition unexpected \\192.168.0.1\Partage\bb-ea-martingale.mq4 (233, 25)
Pour ajouter ce système de martingale, je me suis aidé du code proposé sur ce forum:
http://www.tradingsystemforex.com/mql-p ... ngale.html
et voici ce qu'ils préconisent de faire:
After extern parameters, add :
Code:
extern double Lots=0.01;//|----------------------lots
extern bool Martingale=false;//|-----------------martingale
extern double Multiplier=2.0;//|-----------------multiplier martingale
extern double MinProfit=50;//--------------------minimum profit to apply the martingale
After start(){, add :
Code:
if(Martingale)CalculateMartingale();Balance=AccountBalance();
At the end of the code, add :
Code:
void CalculateMartingale()
{
double InitalLots=0.01;
double MinLots=MarketInfo(Symbol(),MODE_MINLOT);
double MaxLots=MarketInfo(Symbol(),MODE_MAXLOT);
if(Balance!=0.0)
{
if(Balance>AccountBalance())Lots=Multiplier*Lots;
else if((Balance+MinProfit)<AccountBalance())Lots=InitalLots;
else if((Balance+MinProfit)>=AccountBalance())Lots=Lots;
if(Lots<MinLots)Lots=MinLots;
if(Lots>MaxLots)Lots=MaxLots;
}
return(0);
}
Ci joint mon ea. Si quelqu'un peu m'aider ce serrait cool.
J'ai voulu ajouter un système de martingale mais il y a une erreur que je n'arrive pas à corriger:
'(' - function definition unexpected \\192.168.0.1\Partage\bb-ea-martingale.mq4 (233, 25)
Pour ajouter ce système de martingale, je me suis aidé du code proposé sur ce forum:
http://www.tradingsystemforex.com/mql-p ... ngale.html
et voici ce qu'ils préconisent de faire:
After extern parameters, add :
Code:
extern double Lots=0.01;//|----------------------lots
extern bool Martingale=false;//|-----------------martingale
extern double Multiplier=2.0;//|-----------------multiplier martingale
extern double MinProfit=50;//--------------------minimum profit to apply the martingale
After start(){, add :
Code:
if(Martingale)CalculateMartingale();Balance=AccountBalance();
At the end of the code, add :
Code:
void CalculateMartingale()
{
double InitalLots=0.01;
double MinLots=MarketInfo(Symbol(),MODE_MINLOT);
double MaxLots=MarketInfo(Symbol(),MODE_MAXLOT);
if(Balance!=0.0)
{
if(Balance>AccountBalance())Lots=Multiplier*Lots;
else if((Balance+MinProfit)<AccountBalance())Lots=InitalLots;
else if((Balance+MinProfit)>=AccountBalance())Lots=Lots;
if(Lots<MinLots)Lots=MinLots;
if(Lots>MaxLots)Lots=MaxLots;
}
return(0);
}
Ci joint mon ea. Si quelqu'un peu m'aider ce serrait cool.
- Pièces jointes
-
- bb-ea-martingale.mq4
- (10.25 Kio) Téléchargé 411 fois
La Structure (par VideoBourse) : Formation sur mesure et évolutive pour optimiser compréhension et résultats en trading
Informations et inscriptions : https://forms.gle/A2vnZduSwv2wPFSS7
Contact et échanges avec la communauté : Discord, mail, téléphone, LinkedIn...
Marchés en aparté : Témoignages de traders, investisseurs, analystes et économistes sur les marchés financiers
- Fabien LABROUSSE
- Administrateur
- Messages : 17047
- Inscription : 17 mars 2008, 19:41
- Localisation : Paris, France
Re: Besoin de l'aide d'un programmeur
Donc y'a vraiment personne qui pourrait me filer un coup de main sur ce coup?
Perso j'ai recherché des exemples de systèmes de martingales à droite à gauche mais aucun n'est semblable et j'ai du mal à me repérer et à comprendre la logique.
Enfin bon après ça viendra
Perso j'ai recherché des exemples de systèmes de martingales à droite à gauche mais aucun n'est semblable et j'ai du mal à me repérer et à comprendre la logique.
Enfin bon après ça viendra
La Structure (par VideoBourse) : Formation sur mesure et évolutive pour optimiser compréhension et résultats en trading
Informations et inscriptions : https://forms.gle/A2vnZduSwv2wPFSS7
Contact et échanges avec la communauté : Discord, mail, téléphone, LinkedIn...
Marchés en aparté : Témoignages de traders, investisseurs, analystes et économistes sur les marchés financiers
Re: Besoin de l'aide d'un programmeur
J arrive pas a trouver l erreur , mais si tu veux je pense etre capable de faire une martingale enfin j arrive a faire exaxtement le contraire donc pourquoi pas , si tu veux je t en ferai une tres basique ac des commentaire pour que tu comprennent bien le fonctionnement mais en ce moment j ai vraiment trop de boulot a la fac
- Fabien LABROUSSE
- Administrateur
- Messages : 17047
- Inscription : 17 mars 2008, 19:41
- Localisation : Paris, France
Re: Besoin de l'aide d'un programmeur
franchement c'est sympa de ta part mais si t'as du boulot te prend pas la tête, en ce moment j'apprend beaucoup et je bidouille pas mal de truc en mq4, donc j'arriverai bien à m'en sortir un de ces 4.
La Structure (par VideoBourse) : Formation sur mesure et évolutive pour optimiser compréhension et résultats en trading
Informations et inscriptions : https://forms.gle/A2vnZduSwv2wPFSS7
Contact et échanges avec la communauté : Discord, mail, téléphone, LinkedIn...
Marchés en aparté : Témoignages de traders, investisseurs, analystes et économistes sur les marchés financiers
- nvitale
- Professionnel certifié
- Messages : 260
- Inscription : 21 mai 2009, 20:58
- Localisation : London
Re: Besoin de l'aide d'un programmeur
Voilà le code qui compile. je te laisse le soin de mettre les paramètres qui te conviennent au début du code pour les variables MinLots, MaxLots, etc.
N'hésites pas à passer sur mon forum si tu as une question sur MQL4 car j'avoue manquer de temps pour suivre tous les forums.
N'hésites pas à passer sur mon forum si tu as une question sur MQL4 car j'avoue manquer de temps pour suivre tous les forums.
Code : Tout sélectionner
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = False;
extern double Lots = 0.01;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 20;
extern bool UseTakeProfit = True;
extern int TakeProfit = 20;
extern bool UseTrailingStop = False;
extern int TrailingStop = 300;
extern bool Martingale=true;//|-----------------martingale
extern double Multiplier=2.0;//|-----------------multiplier martingale
extern double MinProfit=1;//--------------------minimum profit to apply the martingale
double Balance;
double InitalLots=0.1;
double MinLots=0.1;
double MaxLots=5;
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
if (Martingale)CalculateMartingale();
int Balance=AccountBalance();
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
double InitalLots=0.01;
double MinLots=MarketInfo(Symbol(),MODE_MINLOT);
double MaxLots=MarketInfo(Symbol(),MODE_MAXLOT);
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
double Buy1_1 = iClose(NULL, 0, Current + 0);
double Buy1_2 = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, Current + 0);
double Buy2_1 = iClose(NULL, 0, Current + 1);
double Buy2_2 = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, Current + 1);
double Sell1_1 = iClose(NULL, 0, Current + 0);
double Sell1_2 = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, Current + 0);
double Sell2_1 = iClose(NULL, 0, Current + 1);
double Sell2_2 = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, Current + 1);
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if (Buy1_1 > Buy1_2 && Buy2_1 < Buy2_2) Order = SIGNAL_BUY;
if (Sell1_1 < Sell1_2 && Sell2_1 > Sell2_2) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+
//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
}
void CalculateMartingale()
{
if(Balance!=0.0)
{
if(Balance>AccountBalance())Lots=Multiplier*Lots;
else if((Balance+MinProfit)<AccountBalance())Lots=InitalLots;
else if((Balance+MinProfit)>=AccountBalance())Lots=Lots;
if(Lots<MinLots)Lots=MinLots;
if(Lots>MaxLots)Lots=MaxLots;
}
return(0);
}
//+------------------------------------------------------------------+
Trading Automatique, le portail francophone du trading systématique et automatique.
Directeur d'Alpha Novae
Directeur d'Alpha Novae
- Fabien LABROUSSE
- Administrateur
- Messages : 17047
- Inscription : 17 mars 2008, 19:41
- Localisation : Paris, France
Re: Besoin de l'aide d'un programmeur
C'est vraiment sympa de ta part nvitale! Merci beaucoup, je vais tester ça et je te tiens au courant des résultats obtenus.
La Structure (par VideoBourse) : Formation sur mesure et évolutive pour optimiser compréhension et résultats en trading
Informations et inscriptions : https://forms.gle/A2vnZduSwv2wPFSS7
Contact et échanges avec la communauté : Discord, mail, téléphone, LinkedIn...
Marchés en aparté : Témoignages de traders, investisseurs, analystes et économistes sur les marchés financiers
- Fabien LABROUSSE
- Administrateur
- Messages : 17047
- Inscription : 17 mars 2008, 19:41
- Localisation : Paris, France
Re: Besoin de l'aide d'un programmeur
Bonjour,
J'ai un problème avec l'EA ci joint.
Normalement, si il ouvre un position, il ne peut plus en ouvrir une nouvelle tant que la première n'est pas clôturée.
Quand je le lance et qu'il n'y a aucune position ouverte au préalable, tout se passe bien et il prend position normalement.
En revanche, si je le lance et qu'il y a déjà une position ouverte sur la même paire que celle sur laquelle il est appliqué, mais que cette position a été prise manuellement ou par un autre robot, alors il ne prend plus de position.
Pourtant normalement, le MagicNumber est justement fait pour que le robot différencie les trades qu'il passe des autres trades.
Peut être y a t'il une erreur dans le code à ce niveau, mais je ne trouve pas.
Si quelqu'un pourrait m'aider ce serait sympa.
Merci par avance
J'ai un problème avec l'EA ci joint.
Normalement, si il ouvre un position, il ne peut plus en ouvrir une nouvelle tant que la première n'est pas clôturée.
Quand je le lance et qu'il n'y a aucune position ouverte au préalable, tout se passe bien et il prend position normalement.
En revanche, si je le lance et qu'il y a déjà une position ouverte sur la même paire que celle sur laquelle il est appliqué, mais que cette position a été prise manuellement ou par un autre robot, alors il ne prend plus de position.
Pourtant normalement, le MagicNumber est justement fait pour que le robot différencie les trades qu'il passe des autres trades.
Peut être y a t'il une erreur dans le code à ce niveau, mais je ne trouve pas.
Si quelqu'un pourrait m'aider ce serait sympa.
Merci par avance
- Pièces jointes
-
- bb-ea.mq4
- BB-ea
- (9.97 Kio) Téléchargé 358 fois
La Structure (par VideoBourse) : Formation sur mesure et évolutive pour optimiser compréhension et résultats en trading
Informations et inscriptions : https://forms.gle/A2vnZduSwv2wPFSS7
Contact et échanges avec la communauté : Discord, mail, téléphone, LinkedIn...
Marchés en aparté : Témoignages de traders, investisseurs, analystes et économistes sur les marchés financiers
- Fabien LABROUSSE
- Administrateur
- Messages : 17047
- Inscription : 17 mars 2008, 19:41
- Localisation : Paris, France
Re: Besoin de l'aide d'un programmeur
Personne n'a d'idée vraiment?
La Structure (par VideoBourse) : Formation sur mesure et évolutive pour optimiser compréhension et résultats en trading
Informations et inscriptions : https://forms.gle/A2vnZduSwv2wPFSS7
Contact et échanges avec la communauté : Discord, mail, téléphone, LinkedIn...
Marchés en aparté : Témoignages de traders, investisseurs, analystes et économistes sur les marchés financiers
- nvitale
- Professionnel certifié
- Messages : 260
- Inscription : 21 mai 2009, 20:58
- Localisation : London
Re: Besoin de l'aide d'un programmeur
Voici le code qui devrait désormais marcher.
Code : Tout sélectionner
//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder |
//| http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//| |
//| In no event will author be liable for any damages whatsoever. |
//| Use at your own risk. |
//| |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
extern int MagicNumber = 500;
extern bool SignalMail = False;
extern bool EachTickMode = False;
extern double Lots = 0.05;
extern int Slippage = 30;
extern bool UseStopLoss = True;
extern int StopLoss = 200;
extern bool UseTakeProfit = True;
extern int TakeProfit = 200;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
extern int StartTime = 22;
extern int EndTime = 6;
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
double Buy1_1 = iClose(NULL, 0, Current + 0);
double Buy1_2 = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, Current + 0);
double Buy2_1 = iClose(NULL, 0, Current + 1);
double Buy2_2 = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, Current + 1);
double Sell1_1 = iClose(NULL, 0, Current + 0);
double Sell1_2 = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, Current + 0);
double Sell2_1 = iClose(NULL, 0, Current + 1);
double Sell2_2 = iBands(NULL, 0, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, Current + 1);
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber()!=MagicNumber) continue;
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if (Buy1_1 > Buy1_2 && Buy2_1 < Buy2_2 && TradeSession() == 1) Order = SIGNAL_BUY;
if (Sell1_1 < Sell1_2 && Sell2_1 > Sell2_2 && TradeSession() == 1) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+
//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
int TradeSession() {
if (StartTime < EndTime && TimeHour(TimeCurrent()) < StartTime || TimeHour(TimeCurrent()) >= EndTime) return (0);
if (StartTime > EndTime && (TimeHour(TimeCurrent()) < StartTime && TimeHour(TimeCurrent()) >= EndTime)) return (0);
if (EndTime == 0) EndTime = 24;
if (Hour() == EndTime - 1 && Minute() >= 55) return (0);
return (1);
}
//+------------------------------------------------------------------+
Trading Automatique, le portail francophone du trading systématique et automatique.
Directeur d'Alpha Novae
Directeur d'Alpha Novae
- Fabien LABROUSSE
- Administrateur
- Messages : 17047
- Inscription : 17 mars 2008, 19:41
- Localisation : Paris, France
Re: Besoin de l'aide d'un programmeur
Excellent Nvitale, merci pour ton aide, que dis-je, pour ton travail prêt à trader! j'en demandé pas tant!
Enfait j'avais surtout besoin de cette fonction pour mon compte réel court terme, donc je vais l'utiliser la nuit avec ce compte si tu veux voir ce que ça peut donner:
http://www.videobourse.fr/compte-de-dreamfab.php
Enfait j'avais surtout besoin de cette fonction pour mon compte réel court terme, donc je vais l'utiliser la nuit avec ce compte si tu veux voir ce que ça peut donner:
http://www.videobourse.fr/compte-de-dreamfab.php
La Structure (par VideoBourse) : Formation sur mesure et évolutive pour optimiser compréhension et résultats en trading
Informations et inscriptions : https://forms.gle/A2vnZduSwv2wPFSS7
Contact et échanges avec la communauté : Discord, mail, téléphone, LinkedIn...
Marchés en aparté : Témoignages de traders, investisseurs, analystes et économistes sur les marchés financiers