Merci de me donner votre avis sur mon dernier programme

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

Modérateur : Administrateurs

Message
Auteur
lefeuvr3
Nouveau
Messages : 8
Inscription : 05 nov. 2012, 16:53

Merci de me donner votre avis sur mon dernier programme

#1 Message par lefeuvr3 »

Bonjour je debarque sur le forum j'ai vu de la lumière :)
On m'a dit que les intervenants etaient sympa :) avec un bon niveau et un bon esprit de partage et d'echange
J'ai un blog economie bourse et robot
http://glefeuvre007.blogspot.fr/
Voici mon programme et son resultat
http://liencs.fr/56t

Je l'ai backteste sur le CAC40 du 16.5.2012 a ce jour en UT 15 mn par paquet de 4 parametres rajoutés au precedent

//+------------------------------------------------------------------+
//| 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 = False;
extern double Lots = 1;
extern int Slippage = 3;
extern string separator1 = "*** Sortie de trade TP+SL true ou False ***";
extern bool UseStopLoss = False;
extern int StopLoss = 30;
extern bool UseTakeProfit = False;
extern int TakeProfit = 60;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
extern int max_trades = 4;

extern string separator14 = "*** Backtest à réaliser en rajoutant 4 nouveaux parametres a chaque fois ***";

extern string separator2 = "*** RSI Settings ***";




//Paramètres RSI

extern string separator3 = "*** RSI buy et close buy ***";
extern int RSIPERIODEB1 = 18;
extern int RSIPERIODEB2 = 137;
extern int RSIPERIODECB1 = 277;
extern int RSIPERIODECB2 = 292;
extern string separator4 = "*** RSI sell et close sell ***";
extern int RSIPERIODES1 = 319;
extern int RSIPERIODES2 = 14;
extern int RSIPERIODECS1 = 248;
extern int RSIPERIODECS2 = 1;

extern string separator5 = "*** WPR Settings ***";




//Paramètres WPR

extern string separator6 = "*** WPR buy et close buy ***";
extern int WPRPERIODEB1 = 319;
extern int WPRPERIODEB2 =10;
extern int WPRPERIODECB1 = 487;
extern int WPRPERIODECB2 = 64;
extern string separator7 = "*** WPR sell et close sell ***";
extern int WPRPERIODES1 = 428;
extern int WPRPERIODES2 = 600;
extern int WPRPERIODECS1 = 458;
extern int WPRPERIODECS2 = 389;

extern string separator8 = "*** CCI Settings ***";





//Paramètres CCI

extern string separator9 = "*** CCI buy et close buy ***";
extern int CCIPERIODEB1 = 427;
extern int CCIPERIODEB2 = 330;
extern int CCIPERIODECB1 = 1;
extern int CCIPERIODECB2 = 118;
extern string separator10 = "*** CCI sell et close sell ***";
extern int CCIPERIODES1 = 5;
extern int CCIPERIODES2 = 1;
extern int CCIPERIODECS1 = 1;
extern int CCIPERIODECS2 = 5;


extern string separator11 = "*** MA Settings ***";





//Paramètres MA

extern string separator12 = "*** MA buy et close buy ***";
extern int MAPERIODEB1 = 268;
extern int MAPERIODEB2 = 256;
extern int MAPERIODECB1 = 158;
extern int MAPERIODECB2 = 305;
extern string separator13 = "*** MA sell et close sell ***";
extern int MAPERIODES1 = 295;
extern int MAPERIODES2 = 243;
extern int MAPERIODECS1 = 391;
extern int MAPERIODECS2 = 115;



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 = iRSI(NULL, 0, RSIPERIODEB1, PRICE_CLOSE, Current + 1);
double Buy1_2 = 50;
double Buy2_1 = iRSI(NULL, 0, RSIPERIODEB2, PRICE_CLOSE, Current + 0);
double Buy2_2 = 50;
double Buy3_1 = iWPR(NULL, 0, WPRPERIODEB1, Current + 1);
double Buy3_2 = -50;
double Buy4_1 = iWPR(NULL, 0, WPRPERIODEB2, Current + 0);
double Buy4_2 = -50;
double Buy5_1 = iCCI(NULL, 0, CCIPERIODEB1, PRICE_CLOSE, Current + 1);
double Buy5_2 = 0;
double Buy6_1 = iCCI(NULL, 0, CCIPERIODEB2, PRICE_CLOSE, Current + 0);
double Buy6_2 = 0;
double Buy7_1 = iMA(NULL, 0, MAPERIODEB1, 0, 0, PRICE_CLOSE, Current + 1);
double Buy7_2 = iMA(NULL, 0, MAPERIODEB2, 0, 0, PRICE_CLOSE, Current + 1);
double Buy8_1 = iMA(NULL, 0, MAPERIODEB1, 0, 0, PRICE_CLOSE, Current + 0);
double Buy8_2 = iMA(NULL, 0, MAPERIODEB2, 0, 0, PRICE_CLOSE, Current + 0);

double Sell1_1 = iRSI(NULL, 0, RSIPERIODES1, PRICE_CLOSE, Current + 1);
double Sell1_2 = 50;
double Sell2_1 = iRSI(NULL, 0, RSIPERIODES2, PRICE_CLOSE, Current + 0);
double Sell2_2 = 50;
double Sell3_1 = iWPR(NULL, 0, WPRPERIODES1, Current + 1);
double Sell3_2 = -50;
double Sell4_1 = iWPR(NULL, 0, WPRPERIODES2, Current + 0);
double Sell4_2 = -50;
double Sell5_1 = iCCI(NULL, 0, CCIPERIODES1, PRICE_CLOSE, Current + 1);
double Sell5_2 = 0;
double Sell6_1 = iCCI(NULL, 0, CCIPERIODES2, PRICE_CLOSE, Current + 0);
double Sell6_2 = 0;
double Sell7_1 = iMA(NULL, 0, MAPERIODES1, 0, 0, PRICE_CLOSE, Current + 1);
double Sell7_2 = iMA(NULL, 0, MAPERIODES2, 0, 0, PRICE_CLOSE, Current + 1);
double Sell8_1 = iMA(NULL, 0, MAPERIODES1, 0, 0, PRICE_CLOSE, Current + 0);
double Sell8_2 = iMA(NULL, 0, MAPERIODES2, 0, 0, PRICE_CLOSE, Current + 0);

double CloseBuy1_1 = iRSI(NULL, 0, RSIPERIODECB1, PRICE_CLOSE, Current + 1);
double CloseBuy1_2 = 50;
double CloseBuy2_1 = iRSI(NULL, 0, RSIPERIODECB2, PRICE_CLOSE, Current +0);
double CloseBuy2_2 = 50;
double CloseBuy3_1 = iWPR(NULL, 0, WPRPERIODECB1, Current + 1);
double CloseBuy3_2 = -50;
double CloseBuy4_1 = iWPR(NULL, 0, WPRPERIODECB2, Current + 02);
double CloseBuy4_2 = -50;
double CloseBuy5_1 = iCCI(NULL, 0, CCIPERIODECB1, PRICE_CLOSE, Current + 1);
double CloseBuy5_2 = 0;
double CloseBuy6_1 = iCCI(NULL, 0, CCIPERIODECB2, PRICE_CLOSE, Current + 0);
double CloseBuy6_2 = 0;
double CloseBuy7_1 = iMA(NULL, 0, MAPERIODECB1, 0, 0, PRICE_CLOSE, Current + 1);
double CloseBuy7_2 = iMA(NULL, 0, MAPERIODECB2, 0, 0, PRICE_CLOSE, Current + 1);
double CloseBuy8_1 = iMA(NULL, 0, MAPERIODECB1, 0, 0, PRICE_CLOSE, Current + 0);
double CloseBuy8_2 = iMA(NULL, 0, MAPERIODECB2, 0, 0, PRICE_CLOSE, Current + 0);

double CloseSell1_1 = iRSI(NULL, 0, RSIPERIODECS1, PRICE_CLOSE, Current + 1);
double CloseSell1_2 = 50;
double CloseSell2_1 = iRSI(NULL, 0, RSIPERIODECS2, PRICE_CLOSE, Current + 0);
double CloseSell2_2 = 50;
double CloseSell3_1 = iWPR(NULL, 0, WPRPERIODECS1, Current + 1);
double CloseSell3_2 = -50;
double CloseSell4_1 = iWPR(NULL, 0, WPRPERIODECS2, Current + 0);
double CloseSell4_2 = -50;
double CloseSell5_1 = iCCI(NULL, 0, CCIPERIODECS1, PRICE_CLOSE, Current + 1);
double CloseSell5_2 = 0;
double CloseSell6_1 = iCCI(NULL, 0, CCIPERIODECS2, PRICE_CLOSE, Current + 0);
double CloseSell6_2 = 0;
double CloseSell7_1 = iMA(NULL, 0, MAPERIODECS1, 0, 0, PRICE_CLOSE, Current + 1);
double CloseSell7_2 = iMA(NULL, 0, MAPERIODECS2, 0, 0, PRICE_CLOSE, Current + 1);
double CloseSell8_1 = iMA(NULL, 0, MAPERIODECS1, 0, 0, PRICE_CLOSE, Current + 0);
double CloseSell8_2 = iMA(NULL, 0, MAPERIODECS2, 0, 0, PRICE_CLOSE, Current + 0);


//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+

//Check position
bool IsTrade = False;
//for (int i = 0; i < Total; i ++) {
// à modifier comme suit trades multiples
for (int i = max_trades-1; 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 && CloseBuy2_1 < CloseBuy2_2) || (CloseBuy3_1 > CloseBuy3_2 && CloseBuy4_1 < CloseBuy4_2) || (CloseBuy5_1 > CloseBuy5_2 && CloseBuy6_1 < CloseBuy6_2) || (CloseBuy7_1 > CloseBuy7_2 && CloseBuy8_1 < CloseBuy8_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 && CloseSell2_1 > CloseSell2_2) || (CloseSell3_1 < CloseSell3_2 && CloseSell4_1 > CloseSell4_2) || (CloseSell5_1 < CloseSell5_2 && CloseSell6_1 > CloseSell6_2) || (CloseSell7_1 < CloseSell7_2 && CloseSell8_1 > CloseSell8_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) || (Buy3_1 < Buy3_2 && Buy4_1 > Buy4_2) || (Buy5_1 < Buy5_2 && Buy6_1 > Buy6_2) ||( Buy7_1 < Buy7_2 && Buy8_1 > Buy8_2)) Order = SIGNAL_BUY;

if ((Sell1_1 > Sell1_2 && Sell2_1 < Sell2_2) || (Sell3_1 > Sell3_2 && Sell4_1 < Sell4_2) || (Sell5_1 > Sell5_2 && Sell6_1 < Sell6_2) || (Sell7_1 > Sell7_2 && Sell8_1 < Sell8_2)) Order = SIGNAL_SELL;




//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+

//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (10 * 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() < (10 * 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);
}
//+------------------------------------------------------------------+

ulysse
VideoBourse family
Messages : 1112
Inscription : 27 févr. 2012, 16:13

Re: Merci de me donner votre avis sur mon dernier programme

#2 Message par ulysse »

beaucoup de redondance dans les indicateurs utilisés.

rsi/cci, à mon sens il faut choisir je ne vois pas l'intérêt de conserver les 2 ( ils sont colinéaires)

le paramétrage long de ces indicateurs est intéressant.

à quoi servent les moyennes? je ne dis pas que c'est inutile, je m'interroge sur leur utilité.

En effet lorsque le cci franchit le zéro, c'est que les cours ont franchit la moyenne.

exemple cci 243 franchit zéro>>>>>> donc les cours ont franchit la moyenne 243 sur les cours

Si bien que le simple cci peut être suffisant.

mais peut être que ça marche comme ça

d'ailleurs je n'ai pas d'avis sur l'efficacité de l'automate. Je m'interroge sur la redondance des indicateurs utilisés.

lefeuvr3
Nouveau
Messages : 8
Inscription : 05 nov. 2012, 16:53

Re: Merci de me donner votre avis sur mon dernier programme

#3 Message par lefeuvr3 »

Merci pour ton intervention elle m'a appris des choses notamment sur moyenne mobile et le CCI je vais en tenir compte
Amicalement
Gerard

yoyo910
Membre actif et régulier
Messages : 73
Inscription : 14 déc. 2010, 08:36

Re: Merci de me donner votre avis sur mon dernier programme

#4 Message par yoyo910 »

merci pour le partage
N'hésitez pas à visiter le site de bourse tradebourse.fr

lefeuvr3
Nouveau
Messages : 8
Inscription : 05 nov. 2012, 16:53

Re: Merci de me donner votre avis sur mon dernier programme

#5 Message par lefeuvr3 »

Le voici refait en enlevant les moyennes mobiles pour ne pas faire doublon avec le CCI
Par contre je laisse les indicateurs même s'ils sont correlés pour avoir plus de points d'entrée
Amicalement
Gerard

//+------------------------------------------------------------------+
//| 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 = False;
extern double Lots = 1.0;
extern int Slippage = 3;
extern bool UseStopLoss = False;
extern int StopLoss = 30;
extern bool UseTakeProfit = False;
extern int TakeProfit = 60;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
int BarCount;
int Current;
bool TickCheck = False;
extern string separator1 = "*** CCI Settings ***";
extern int CCIPERIODEB1 = 0;
extern int CCIPERIODEB2 = 0;
extern int CCIPERIODECB1 = 0;
extern int CCIPERIODECB2 = 0;
extern int CCIPERIODES1 = 0;
extern int CCIPERIODES2 = 0;
extern int CCIPERIODECS1 = 0;
extern int CCIPERIODECS2 = 0;
extern int CCISHIFT1 = 0;
extern int CCISHIFT2 = 0;
extern string separator2 = "*** RSI Settings ***";
extern int RSIPERIODEB1 = 0;
extern int RSIPERIODEB2 = 0;
extern int RSIPERIODECB1 = 0;
extern int RSIPERIODECB2 = 0;
extern int RSIPERIODES1 = 0;
extern int RSIPERIODES2 = 0;
extern int RSIPERIODECS1 = 0;
extern int RSIPERIODECS2 = 0;
extern int RSISHIFT1 = 0;
extern int RSISHIFT2 = 0;
extern string separator3 = "*** WPR Settings ***";
extern int WPRPERIODEB1 = 0;
extern int WPRPERIODEB2 = 0;
extern int WPRPERIODECB1 = 0;
extern int WPRPERIODECB2 = 0;
extern int WPRPERIODES1 = 0;
extern int WPRPERIODES2 = 0;
extern int WPRPERIODECS1 = 0;
extern int WPRPERIODECS2 = 0;
extern int WPRSHIFT1 = 0;
extern int WPRSHIFT2 = 0;



//+------------------------------------------------------------------+
//| 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 = iRSI(NULL, 0, RSIPERIODEB1, PRICE_CLOSE, Current + RSISHIFT1);
double Buy1_2 = 50;
double Buy2_1 = iRSI(NULL, 0, RSIPERIODEB2, PRICE_CLOSE, Current + RSISHIFT2);
double Buy2_2 = 50;
double Buy3_1 = iWPR(NULL, 0, WPRPERIODEB1, Current + WPRSHIFT1);
double Buy3_2 = -50;
double Buy4_1 = iWPR(NULL, 0, WPRPERIODEB2, Current + WPRSHIFT2);
double Buy4_2 = -50;
double Buy5_1 = iCCI(NULL, 0, CCIPERIODEB1, PRICE_CLOSE, Current + CCISHIFT1);
double Buy5_2 = 0;
double Buy6_1 = iCCI(NULL, 0, CCIPERIODEB2, PRICE_CLOSE, Current + CCISHIFT2);
double Buy6_2 = 0;

double Sell1_1 = iRSI(NULL, 0, RSIPERIODES1, PRICE_CLOSE, Current + RSISHIFT1);
double Sell1_2 = 50;
double Sell2_1 = iRSI(NULL, 0, RSIPERIODES2, PRICE_CLOSE, Current + RSISHIFT2);
double Sell2_2 = 50;
double Sell3_1 = iWPR(NULL, 0, WPRPERIODES1, Current + WPRSHIFT1);
double Sell3_2 = -50;
double Sell4_1 = iWPR(NULL, 0, WPRPERIODES2, Current + WPRSHIFT2);
double Sell4_2 = -50;
double Sell5_1 = iCCI(NULL, 0, CCIPERIODES1, PRICE_CLOSE, Current + CCISHIFT1);
double Sell5_2 = 0;
double Sell6_1 = iCCI(NULL, 0, CCIPERIODES2, PRICE_CLOSE, Current + CCISHIFT2);
double Sell6_2 = 0;

double CloseBuy1_1 = iRSI(NULL, 0, RSIPERIODECB1, PRICE_CLOSE, Current + RSISHIFT1);
double CloseBuy1_2 = 50;
double CloseBuy2_1 = iRSI(NULL, 0, RSIPERIODECB2, PRICE_CLOSE, Current + RSISHIFT2);
double CloseBuy2_2 = 50;
double CloseBuy3_1 = iWPR(NULL, 0, WPRPERIODECB1, Current + WPRSHIFT1);
double CloseBuy3_2 = -50;
double CloseBuy4_1 = iWPR(NULL, 0, WPRPERIODECB2, Current + WPRSHIFT2);
double CloseBuy4_2 = -50;
double CloseBuy5_1 = iCCI(NULL, 0, CCIPERIODECB1, PRICE_CLOSE, Current + CCISHIFT1);
double CloseBuy5_2 = 0;
double CloseBuy6_1 = iCCI(NULL, 0, CCIPERIODECB2, PRICE_CLOSE, Current + CCISHIFT2);
double CloseBuy6_2 = 0;

double CloseSell1_1 = iRSI(NULL, 0, RSIPERIODECS1, PRICE_CLOSE, Current + RSISHIFT1);
double CloseSell1_2 = 50;
double CloseSell2_1 = iRSI(NULL, 0, RSIPERIODECS2, PRICE_CLOSE, Current + RSISHIFT2);
double CloseSell2_2 = 50;
double CloseSell3_1 = iWPR(NULL, 0, WPRPERIODECS1, Current + WPRSHIFT1);
double CloseSell3_2 = -50;
double CloseSell4_1 = iWPR(NULL, 0, WPRPERIODECS2, Current + WPRSHIFT2);
double CloseSell4_2 = -50;
double CloseSell5_1 = iCCI(NULL, 0, CCIPERIODECS1, PRICE_CLOSE, Current + CCISHIFT1);
double CloseSell5_2 = 0;
double CloseSell6_1 = iCCI(NULL, 0, CCIPERIODECS2, PRICE_CLOSE, Current + CCISHIFT2);
double CloseSell6_2 = 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 && CloseBuy2_1 < CloseBuy2_2) || (CloseBuy3_1 > CloseBuy3_2 && CloseBuy4_1 < CloseBuy4_2) || (CloseBuy5_1 > CloseBuy5_2 && CloseBuy6_1 < CloseBuy6_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 && CloseSell2_1 > CloseSell2_2) ||( CloseSell3_1 < CloseSell3_2 && CloseSell4_1 > CloseSell4_2) || (CloseSell5_1 < CloseSell5_2 && CloseSell6_1 > CloseSell6_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) || (Buy3_1 < Buy3_2 && Buy4_1 > Buy4_2) || (Buy5_1 < Buy5_2 && Buy6_1 > Buy6_2)) Order = SIGNAL_BUY;

if ((Sell1_1 > Sell1_2 && Sell2_1 < Sell2_2) || (Sell3_1 > Sell3_2 && Sell4_1 < Sell4_2) || (Sell5_1 > Sell5_2 && Sell6_1 == Sell6_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);
}
//+------------------------------------------------------------------+

Répondre