script multiples entrees et sorties

Présentation, Développement, Améliorations et Ressources pour les Stratégies de Trading Automatique.

Modérateur : Administrateurs

Message
Auteur
luc31
Nouveau
Messages : 6
Inscription : 30 juin 2010, 11:33

script multiples entrees et sorties

#1 Message par luc31 »

Voici un petit script de débutant qui ne marche pas et m'empêche de progresser
Je ne comprends pas:
Je souhaite prendre position quand une MM1 ou 6 croise une M50 sur UT H1.
Jusque là rien de plus classique.
Cette prise de position se fait avec un schift -1 ou -2, autrement dit, je demande ceci:

Si M1 > MM50 et si M1 précédent (-1 ou -2 barres ) < à MM50 alors acheter.
Fermer si M1 à nouveau < à MM50.

Je fais pareil pour vendre.

Je vous donne le script si dessous pour MT4 sachant que :
-mon backtest porte sur EURUSD en H1
-date: 2009.10.01 à 2010.01.01
Je remarque la chose suivante: A partir de 2009.11.19 les ordres d'ouverture et de fermeture ne cessent de se succéder... évidemment à mon désavantage et au bonheur (virtuel :) de mon broker
Je ne comprends pas pourquoi, erreur de débutant, sans doute mais que beaucoup ont du rencontré.
UN PETIT MOT POUR M'AIDER SERAIT SYMPA.

Bon trade à tous,

Luc31

Script:
//+------------------------------------------------------------------+
//| 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 = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 0.5;
extern int Slippage = 3;
extern bool UseStopLoss = False;
extern int StopLoss = 80;
extern bool UseTakeProfit = True;
extern int TakeProfit = 500;
extern bool UseTrailingStop = False;
extern int TrailingStop = 80;

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 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_OPEN, Current + 0);
double Buy1_2 = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Buy2_1 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Buy2_2 = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, Current + 0);

double Sell1_1 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_OPEN, Current + 0);
double Sell1_2 = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Sell2_1 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Sell2_2 = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, Current + 0);

double CloseBuy1_1 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_OPEN, Current + 0);
double CloseBuy1_2 = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, Current + 0);

double CloseSell1_1 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_OPEN, Current + 0);
double CloseSell1_2 = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, Current + 0);


//+------------------------------------------------------------------+
//| 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) |
//+------------------------------------------------------------------+

if (CloseBuy1_1 < CloseBuy1_2) Order = SIGNAL_CLOSEBUY;


//+------------------------------------------------------------------+
//| 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) |
//+------------------------------------------------------------------+

if (CloseSell1_1 > CloseSell1_2) Order = SIGNAL_CLOSESELL;


//+------------------------------------------------------------------+
//| 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;

return(0);
}
//+------------------------------------------------------------------+

luc31
Nouveau
Messages : 6
Inscription : 30 juin 2010, 11:33

Re: script multiples entrées et sorties

#2 Message par luc31 »

pardon pour les fautes! :oops:
notamment: que beaucoup ont dû rencontreR

Avatar de l’utilisateur
Fabien LABROUSSE
Administrateur
Messages : 17035
Inscription : 17 mars 2008, 19:41
Localisation : Paris, France

Re: script multiples entrees et sorties

#3 Message par Fabien LABROUSSE »

luc31 a écrit :pardon pour les fautes! :oops:
notamment: que beaucoup ont dû rencontreR
Pas de soucis. Tu peux éditer ton message pour corriger ça si ça te déranges, mais moi les fautes tant que ça reste lisible ça ne me dérange pas même si j'essaye d'y faire attention.

Je vais tester ton ea et voir ce qui ne marche pas.
Image

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

DhaoS

Re: script multiples entrees et sorties

#4 Message par DhaoS »

Je vais être un peu dur mais je résume ton post :
"Voici un petit script de débutant qui ne marche pas et m'empêche de progresser"
"This MQL is generated by Expert Advisor Builder"
charabia incompéhensible et interminable


Bref, non merci :)

Si tu comptes vraiment te mettre à la programmation d'EA, ça te prendra max 30 lignes à programmer, il fonctionnera et ton code sera compréhensible pour le commun des mortels

Avatar de l’utilisateur
Fabien LABROUSSE
Administrateur
Messages : 17035
Inscription : 17 mars 2008, 19:41
Localisation : Paris, France

Re: script multiples entrees et sorties

#5 Message par Fabien LABROUSSE »

DhaoS a écrit :Si tu comptes vraiment te mettre à la programmation d'EA, ça te prendra max 30 lignes à programmer, il fonctionnera et ton code sera compréhensible pour le commun des mortels
Tu as une dent contre les générateurs d'experts advisors dhaos?

Moi perso ça ma bien aidé à mes débuts dans la programmation, et je dirai même que c'est un des éléments qui ma motivé pour m'y mettre vraiment, mais c'est sûre qu'à terme, on est beaucoup plus efficace lorsque l'on maîtrise vraiment le codage, ce qui n'est pas encore mon cas.
Image

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

DhaoS

Re: script multiples entrees et sorties

#6 Message par DhaoS »

Par analogie c'est un peu comme le bon français et le sms (et encore la comparaison est gentille)

Si tu commençais à voir des étrangers apprendre le français en commençant par du langage sms et qu'ils demandent (même poliment) de les corriger pour les aider à apprendre le français, tu en penserais quoi?
C'est un peu fort quand même...

Perso si j'avais du commencer à programmer du mql4 en analysant du code automatique je pense que je m'y serais jamais mis...c'est long, moche et peu compréhensible (en même temps normalement c'est pas fait pour être lu derrière)

Avatar de l’utilisateur
Fabien LABROUSSE
Administrateur
Messages : 17035
Inscription : 17 mars 2008, 19:41
Localisation : Paris, France

Re: script multiples entrees et sorties

#7 Message par Fabien LABROUSSE »

Ok je vois ce que tu veux dire Dhaos.

luc31, chez toi l'expert ne prend aucune position, ou le problème est autre part?

Car chez moi il prend bien quelques positions, mais il y a des messages d'erreur dans le journal type:

"2010.07.26 15:58:14 2010.05.03 04:00 Luc31 EURUSD,H4: OrderClose error 4107"
"2010.07.26 15:58:14 2010.05.03 04:00 Luc31 EURUSD,H4: OrderClose error 4107"
Image

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

Répondre