Rejoindre la communauté
banner_forum
Devenez membre de la plus grande
communauté francophone sur le Forex
Partagez, échangez et apprenez en gagnant des crédits sur votre compte de trading

Aide pour corriger un code

  • chris8469

    j'ai fait un petit EA simple sur le RSI mais ne fait pas les ordre que je souhaite il est basé sur croisement du RSI et ligne 50 hors
    1/ si j 'ai un ordre ouvert il le ferme a clôture de bougie après croisement et ouvre a clôture de la bougie qui suis soit 2 bougie après croisement je voudrai qu'il clôture a l'ouverture de la bougie après croisement et ouvre simultanément nouvel ordre
    2/ et si je suis en position et que j'utilise TP ou SL et que je suis dans toujours dans le signal il reouvre un ordre chose que je ne veux pas

    quelqu'un peu m'aider a corriger le code merçi

    Code
    //+------------------------------------------------------------------+ //| 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 = 1.0; extern int Slippage = 3; extern bool UseStopLoss = True; extern int StopLoss = 30; extern bool UseTakeProfit = True; extern int TakeProfit = 60; extern bool UseTrailingStop = True; extern int TrailingStop = 30; int BarCount; int Current; bool TickCheck = False; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { BarCount = Bars; if (EachTickMode) Current = 1; 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 Var1 = iRSI(NULL, 0, 8, PRICE_TYPICAL, Current + 0); double Buy1_1 = iRSI(NULL, 0, 8, PRICE_TYPICAL, Current + 0); double Buy1_2 = 50; double Sell1_1 = iRSI(NULL, 0, 8, PRICE_TYPICAL, Current + 0); double Sell1_2 = 50; double CloseBuy1_1 = iRSI(NULL, 0, 8, PRICE_TYPICAL, Current + 0); double CloseBuy1_2 = 50; double CloseSell1_1 = iRSI(NULL, 0, 8, PRICE_TYPICAL, Current + 0); double CloseSell1_2 = 50; //+------------------------------------------------------------------+ //| 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) Order = SIGNAL_BUY; if (Sell1_1 < Sell1_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); } //+------------------------------------------------------------------+
    Modifié le 2013-06-22 10:40:22 par AliX
  • Gui205

    Je ne comprend pas se que tu appelle croisement du RSI, de plus ta brève description de se que tu souhaite n'est pas très claire

    Pourrais tu nous ré-expliquer s'il te plait ?
  • chris8469

    quand le rsi croise la ligne de niveau 50 ce que je veux est quand le croisement se fait ex haussier l'ea ouvre ordre buy sur cloture de la bougie qui engendre le croisement ou ouverture de la suivante de plus quand le TP est touché et qu'on est toujour dans le signal qu'il n'ouvre plus d'ordre buy mais attende croisement baissier pour ouvrir sell


    hors dans l'état il ouvre 3 bougie apres et si TP ouvert il ouvre encore dans le meme sens ce qui me fausse tout
  • Gui205

    Je n'ai toujours pas compris ce que tu veux, relis toi, se que tu écris n'as pas vraiment de sens :s.

    Code
    double RSInow=iRSI(NULL,0,RSIperiod,AppliedPrice,0); double RSIlast=iRSI(NULL,0,RSIperiod,AppliedPrice,1); double RSIprev=iRSI(NULL,0,RSIperiod,AppliedPrice,2); if(RSInow>50&&RSIlast<50&&RSIprev<50){ //Buy } if(RSInow<50)&&(RSIlast>50)&&(RSIprev>50){ //Sell }
    Pour buy franchissement de 50 haussier et sell franchissement de 50 baissier, mais c'est après que j'ai rien compris à se que tu veux
    Modifié le 2013-07-01 18:46:11 par AliX
  • chris8469

    dans l'état des chose l'ea ouvre une position buy si rsi croise la ligne 50 haussiere l'ordre s'ouvre deux bougie après si il touche mon tp il reouvre un buy car le rsi est toujour haut dessus de 50

    hors ce que je veux est qu'il ouvre sur la bougie qui entraine le croisement et des qu il touche le tp qu il ne prenne plus de position dans ce sens mais attende signal inverse suis je plus clair
  • Altore

    salut, remplace les lignes de codes par celle-ci

    Code
    //+------------------------------------------------------------------+ //| Variable Begin | //+------------------------------------------------------------------+ double Buy1_1 = iRSI(NULL, 0, 8, PRICE_TYPICAL, Current + 0); double Buy1_2 = 50; double Buy2_1 = iRSI(NULL, 0, 8, PRICE_TYPICAL, Current + 1); double Buy2_2 = 50; double Sell1_1 = iRSI(NULL, 0, 8, PRICE_TYPICAL, Current + 0); double Sell1_2 = 50; double Sell2_1 = iRSI(NULL, 0, 8, PRICE_TYPICAL, Current + 1); double Sell2_2 = 50; double CloseBuy1_1 = iRSI(NULL, 0, 8, PRICE_TYPICAL, Current + 0); double CloseBuy1_2 = 50; double CloseSell1_1 = iRSI(NULL, 0, 8, PRICE_TYPICAL, Current + 0); double CloseSell1_2 = 50; ----------------------------------------------ENSUITE------------------------------------------------ //+------------------------------------------------------------------+ //| 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;
    Modifié le 2013-07-16 11:09:44 par AliX