Funky Scalper

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

Modérateur : Administrateurs

Message
Auteur
robertmalin
Membre assidu
Messages : 119
Inscription : 21 sept. 2010, 16:39

Funky Scalper

#1 Message par robertmalin »

Hey, j'ai un problème concernant un expert advisor que je veux créer à l'aide d'expert advisor builder. Je n'ai réussit qu'à programmer une partie de l'expert. Voila le principe de l'EA:

EUR/USD en M5;
Keltnel channel 40.
Moving average exponential 8.

Lorsque la moving average est = ou supérieure à l'upper line de keltner, position acheteuse tp 12 pips et sl 9 pips.

Lorsque la moving average est = ou inférieure à lower line de keltner, position vendeuse tp 12 pips et sl 9 pips.

Atention, 1 position par franchissement de la moving average au dessus ou en dessous de l'upper/lower line. Je ne veux pas une succession de position.

Merci de l'aide du prochain intervenant ^^

lemeunier

Re: Funky Scalper

#2 Message par lemeunier »

Voila
Pièces jointes
YourSettings.eab
(463 octets) Téléchargé 276 fois

robertmalin
Membre assidu
Messages : 119
Inscription : 21 sept. 2010, 16:39

Re: Funky Scalper

#3 Message par robertmalin »

merci beaucoup à toi ^^

mais comment le compiler sur metaeditor pour l'avoir?

lemeunier

Re: Funky Scalper

#4 Message par lemeunier »

Tu vas dans expert advisor builder dont tu parlais.
Tu charges le fichier.
Tu vois comment on fait pour demander un franchissement (en clair: MA>= Up Keltner et MA shift 1 < Up Keltner Shift 1), et comme ca tu saura le faire la prochaine fois.
Apres tu fais comme d'hatitude, tu fais ton fichier, tu le compiles, etc.

C'est plus important de t'expliquer comment il faut faire que de te le faire. La regle que tu veux programmer en M5 ne donne rien, mais ce n'est pas etonnant (ce serait un peu simple). Par contre Keltner tu peux continuer a t'amuser avec, j'aime bien cet indicateur (qu'il est aussi assez facile de modifier).

Avatar de l’utilisateur
traders59
VideoBourse family
Messages : 1646
Inscription : 05 juin 2009, 14:52
Localisation : LILLE

Re: Funky Scalper

#5 Message par traders59 »

Tu vois comment on fait pour demander un franchissement (en clair: MA>= Up Keltner et MA shift 1 < Up Keltner Shift 1), et comme ca tu saura le faire la prochaine fois.
lol j'y comprends rien mais je vais essayer aussi :mrgreen:

merci

robertmalin
Membre assidu
Messages : 119
Inscription : 21 sept. 2010, 16:39

Re: Funky Scalper

#6 Message par robertmalin »

lemeunier a écrit :Tu vas dans expert advisor builder dont tu parlais.
Tu charges le fichier.
Tu vois comment on fait pour demander un franchissement (en clair: MA>= Up Keltner et MA shift 1 < Up Keltner Shift 1), et comme ca tu saura le faire la prochaine fois.
Apres tu fais comme d'hatitude, tu fais ton fichier, tu le compiles, etc.

C'est plus important de t'expliquer comment il faut faire que de te le faire. La regle que tu veux programmer en M5 ne donne rien, mais ce n'est pas etonnant (ce serait un peu simple). Par contre Keltner tu peux continuer a t'amuser avec, j'aime bien cet indicateur (qu'il est aussi assez facile de modifier).

Thanks ^^, mais rien n'y fait sa ne marche pas. Tant pis je continuerais de l'utiliser en manuel de 9h00-11h30 jusque 14h00-17h30, le faire tourner au dela de ces plages horaires, je ne dais pas s'il fonctionne.

lemeunier

Re: Funky Scalper

#7 Message par lemeunier »

C'est pas vrai, vous le faites expres ou quoi ? :lol:

Dans cette file, il faut cliquer sur le fichier "yoursettings.eab".
Puis cliquer sur "enregistrer sur mon disque".
Apres tu vas dans expert advisor builder. http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/
Apres tu cliques sur browse.
Dans la fenetre qui s'ouvre tu selectionnes ton fichier.
Puis tu cliques sur "LOAD" (ca veut dire charger).
Tu peux regarder comment c'est fait, sinon tu cliques directement sur "Complete" en bas de la page.
Tu as un fichier mq4.
Tu l'enregistres sur ton disque, puis tu le compiles em ex4 (ca va aller?).
Il n'y a meme pas besoin de savoir programmer !

Je re-explique pour un franchissement, par exemple MA franchit a la hausse upper keltner.
Ca veut dire que maintenant MA est au dessus de upper keltner (MA > Keltner)
Et comme ca a franci a la hausse, ca veut dire que la bougie d'avant on etait en dessous, donc MA < Keltner.
La bougie d'avant c'est shift 1 (ou shift x pour x bougies avant).


//+------------------------------------------------------------------+
//| 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.1;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 90;
extern bool UseTakeProfit = True;
extern int TakeProfit = 120;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;

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, 8, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Buy1_2 = iCustom(NULL, 0, "Keltner Channels", 40, 0, Current + 0);
double Buy2_1 = iMA(NULL, 0, 8, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Buy2_2 = iCustom(NULL, 0, "Keltner Channels", 40, 0, Current + 1);

double Sell1_1 = iMA(NULL, 0, 8, 0, MODE_EMA, PRICE_CLOSE, Current + 0);
double Sell1_2 = iCustom(NULL, 0, "Keltner Channels", 40, 2, Current + 0);
double Sell2_1 = iMA(NULL, 0, 8, 0, MODE_EMA, PRICE_CLOSE, Current + 1);
double Sell2_2 = iCustom(NULL, 0, "Keltner Channels", 40, 2, 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;

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

robertmalin
Membre assidu
Messages : 119
Inscription : 21 sept. 2010, 16:39

Re: Funky Scalper

#8 Message par robertmalin »

je sais bien, j'ai déja créer un EA, je sais comment faire pour l'appliquer sur la plateforme. Mais là, rien à faire, peut être un bug, j'en sais rien, mais bon tant pis, merci Quand même

Répondre