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

Scalper-GG-14

  • lefeuvr3

    Nouvelle version
    Programme pour MT4
    A backtester et a vérifier avant utilisation.( je ne suis pas codeur et j'ai fait de mon mieux)
    J'ai ajouter des tas de contraintes pour le securiser ,ainsi qu'un un trailing start
    Le stop loss et le take profit sont dynamique et adaptés à la volatilité.
    La taille des lots est auto ajustée en fonction de l..."equity"
    Il ne trade pas si le spread monte au-dessus de 10......etc

    Code
    //+------------------------------------------------------------------+ //| Scalper-GG-14.mq4 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ extern string mn="Scalper-GG-14"; double lot; extern int shifthighrecent=5; extern int shiftlowrecent=2; extern int shifthigh=5; extern int shiftlow=7; extern bool trail=true; extern int TrailingStop=2; extern int barnumber =24; extern int barnumberrecent=33; extern int MagicNumber=14072020; //extern double TakeProfit=53; extern double atrMultiple = 3; extern int TrailingStart=21; double stoplevel=(MarketInfo(Symbol(),MODE_STOPLEVEL))/10; int TS=TrailingStart-TrailingStop; extern int volume1=1; extern int volume0=0; extern int adxperiod= 31; extern int adxthreshold=23; extern int rsiperiod=21; extern int rsilower =48; extern int rsiupper =80; extern int Slippage=3; extern int Indicatorperiod = 14; input int MaxSpreadAllow = 10; // Enter Maximum allowed spread extern double LotFactor =134; //lotsize factor extern int ecartask=2; extern int ecartbid=10; extern int Start_Time = 0; // Time to allow trading to start ( hours of 24 hr clock ) 0 for both disables extern int Finish_Time = 0; // Time to stop trading ( hours of 24 hr clock ) 0 for both disables extern double bidbid =600; extern double askask =300; //+------------------------------------------------------------------+ // expert start function //+------------------------------------------------------------------+ int start() { if(TimeHour(TimeCurrent())>=Start_Time && TimeHour(TimeCurrent())<=Finish_Time )return(0); double MyPoint=Point; if(Digits==3 || Digits==5) MyPoint=Point*10; double TheStopLoss=0; double TheTakeProfit=0; double booster = Volume[volume1]> Volume[volume0] &&iADX(Symbol(),0,adxperiod,PRICE_CLOSE,MODE_MAIN,0)> adxthreshold &&iRSI(Symbol(),0,rsiperiod,PRICE_CLOSE,0)>rsilower && iRSI(Symbol(),0,rsiperiod,PRICE_CLOSE,0)<rsiupper ; static datetime tmeBar0; bool newBar = false; if ( tmeBar0 != Time[0] ) { tmeBar0 = Time[0]; newBar = true; } // Get Ask and Bid for the currency double ask = MarketInfo ( Symbol(), MODE_ASK ); double bid = MarketInfo ( Symbol(), MODE_BID ); double Spread = MarketInfo(Symbol(), MODE_SPREAD); // This will Obtain broker Spread for current pair if(Spread > 0 && Spread <= MaxSpreadAllow) // This part compares broker spread with maximum allowed spread, and refuse trade if maxSpread is exceeded if ( OrdersTotal () == 0 ) if(AccountFreeMargin()>(1000*(AccountEquity() * 0.01 /LotFactor))) if(booster) //+------------------------------------------------------------------+ // Dynamic stoploss and takeprofit //+------------------------------------------------------------------+ double ema = iMA(NULL, 0, 300, 0, MODE_EMA, PRICE_CLOSE, 0); double atr = iATR(NULL, 0, 3, 0); double StopLoss = (int)(atr * atrMultiple / Point); double TakeProfit = StopLoss; //+------------------------------------------------------------------+ // //+------------------------------------------------------------------+ new_del () ; if( TotalOrdersCount()==0 ) { int result=0; //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ // Here is your open buy rule//Ici votre strategie d'achat double HighOfLastBarsrecent = iHigh ( Symbol (), PERIOD_M1 , iHighest ( Symbol (), PERIOD_M1 , MODE_HIGH, barnumberrecent , shifthighrecent )); double LowOfLastBarsrecent = iLow ( Symbol (), PERIOD_M1 , iLowest ( Symbol (), PERIOD_M1 , MODE_LOW, barnumberrecent , shiftlowrecent )); double HighOfLastBars = iHigh ( Symbol (), PERIOD_M1 , iHighest ( Symbol (), PERIOD_M1 , MODE_HIGH, barnumber , shifthigh )); double LowOfLastBars = iLow ( Symbol (), PERIOD_M1 , iLowest ( Symbol (), PERIOD_M1 , MODE_LOW, barnumber , shiftlow )); double AverageBars=(HighOfLastBars +LowOfLastBars)/2 ; double PartialLow=((LowOfLastBars+AverageBars)/2); double PartialHigh = ((HighOfLastBars+AverageBars)/2); // Calculate a channel on Moving Averages, and check the price double iMaLow = iMA ( Symbol(), PERIOD_M1, Indicatorperiod, 0, MODE_LWMA, PRICE_LOW, 0 ); double iMaHigh = iMA ( Symbol(), PERIOD_M1, Indicatorperiod, 0, MODE_LWMA, PRICE_HIGH, 0 ); double iMaAverage = (iMaHigh + iMaLow)/2; double PartialiMalow = (iMaLow + iMaAverage) / 2.0; double PartialiMahigh =(iMaHigh + iMaAverage) / 2.0; double UpperPart=(PartialiMahigh+PartialHigh)/2; double LowerPart= ( PartialiMalow+ PartialLow)/2; if (((bid>= PartialiMahigh )&&(bid>= PartialHigh )&&(booster))) if (bid>= HighOfLastBars ) if (HighOfLastBarsrecent>= HighOfLastBars) //+------------------------------------------------------------------+ // Dynamic stoploss and takeprofit //+------------------------------------------------------------------+ double ema = iMA(NULL, 0, 300, 0, MODE_EMA, PRICE_CLOSE, 0); double ema = iMA(NULL, 0, 300, 0, MODE_EMA, PRICE_CLOSE, 0); if (Ask + askask * Point < ema) //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ { result=OrderSend(Symbol(),OP_BUYSTOP, NR(Lot_Volume()),Ask +ecartask*Point,5,PartialLow -StopLoss*Point,PartialHigh +TakeProfit*Point,"Scalper-GG-9",MagicNumber,0,clrLimeGreen); if(result>0) { TheStopLoss=0; TheTakeProfit=0; if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint; if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint; if( OrderSelect(result,SELECT_BY_TICKET)) bool modif1= OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green); } return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ // Here is your open Sell rule//Ici votre strategie de vente if (((PartialiMalow <= bid)&&(PartialLow <= bid)&&(booster))) if (LowOfLastBars<= bid) if( LowOfLastBarsrecent<=LowOfLastBars ) //+------------------------------------------------------------------+ // Dynamic stoploss and takeprofit //+------------------------------------------------------------------+ if (Bid - bidbid * Point > ema) //+------------------------------------------------------------------+ { result=OrderSend(Symbol(),OP_SELLSTOP, NR(Lot_Volume()),Bid-ecartbid*Point,5,PartialHigh +StopLoss*Point,PartialLow -TakeProfit*Point,"Scalper-GG-14",MagicNumber,0,clrRed); if(result>0) { TheStopLoss=0; TheTakeProfit=0; if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint; if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint; if( OrderSelect(result,SELECT_BY_TICKET)) bool modif2= OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green); } return(0); } } //+------------------------------------------------------------------+ // Trailing Start //+------------------------------------------------------------------+ double Pip=Point*10; if(TS<stoplevel) TrailingStart=(int)stoplevel+TrailingStop; if(!IsTradeAllowed()){ MessageBox("This Expert Advisor requires Auto Trading. Please reload the EA or right click on"+ "\nthe chart to bring up the inputs window. Under the common tab check the box to"+ "\nallow live trading"); Sleep(50000); } if(!IsExpertEnabled()){ MessageBox("This Expert Advisor requires Auto Trading. Please click the button at the top"); Sleep(50000); } int ticket=0,buy_ticket=0,sell_ticket=0; for(int i=OrdersTotal()-1; i>=0; i--) if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol()==Symbol()){ ticket++; if(OrderType()==OP_BUY) buy_ticket=OrderTicket(); if(OrderType()==OP_SELL) sell_ticket=OrderTicket(); } if(OrderType()==OP_BUY){ if(OrderSelect(buy_ticket,SELECT_BY_TICKET)) { if(Bid - OrderOpenPrice() > TrailingStop *10* MarketInfo(OrderSymbol(),MODE_POINT)) if((Bid-OrderOpenPrice())>(TrailingStart*Pip)) { if(((OrderStopLoss() < Bid - TrailingStop *10* MarketInfo(OrderSymbol(), MODE_POINT))&& ((Bid-OrderOpenPrice())>(Point*TrailingStop)))|| (OrderStopLoss()==0)) { bool modify1=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*10*MarketInfo(OrderSymbol(),MODE_POINT),OrderTakeProfit(),clrGreenYellow); Print("Buy = ",GetLastError()); return(0); RefreshRates(); } } } } if(OrderType()==OP_SELL) { if(OrderSelect(sell_ticket,SELECT_BY_TICKET)) { if(OrderOpenPrice()-Ask>TrailingStop*10*MarketInfo(OrderSymbol(),MODE_POINT)) if((OrderOpenPrice()-Ask)>(TrailingStart*Pip)) { if(((OrderStopLoss()>Ask+TrailingStop*10*MarketInfo(OrderSymbol(),MODE_POINT))&& ((OrderOpenPrice()-Ask)>(Point*TrailingStop)))|| (OrderStopLoss()==0)) bool modify2=OrderModify(OrderTicket(),OrderOpenPrice(), Ask+TrailingStop*10*MarketInfo(OrderSymbol(),MODE_POINT),OrderTakeProfit(),clrGreenYellow); if(OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(TrailingStop*Pip),OrderTakeProfit(),Red)) Print("Sell = ",GetLastError()); return(0); RefreshRates(); } } } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ return(0); } int TotalOrdersCount() { int result=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS ,MODE_TRADES)) if (OrderMagicNumber()==MagicNumber) result++; } return (result); } //+------------------------------------------------------------------+ // ( to close pending order) //+------------------------------------------------------------------+ int new_del() { if(trail) trail(); int i,a; int total = OrdersTotal(); string comentario,par; for (i=total-1; i >=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if (OrderType()==OP_BUY || OrderType()==OP_SELL) { for (a=total-1; a >=0; a--) { if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES)) if(OrderType()==OP_SELLSTOP) { bool modify1= OrderDelete(OrderTicket()); Print("Deleting SELL_STOP"," Ordertype:",OrderType()); return(1); } if(OrderType()==OP_BUYSTOP) { bool modify2= OrderDelete(OrderTicket()); Print("Deleting BUY_STOP"," Ordertype:",OrderType()); return(1); } } } } return ( 0 ); } //+------------------------------------------------------------------+ //| Trailing Stoploss after Breakeven | //+------------------------------------------------------------------+ void trail() { for (int i = OrdersTotal()-1; i >= 0; i --) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(Bid - OrderOpenPrice() > TrailingStop *10* MarketInfo(OrderSymbol(),MODE_POINT)) { if(((OrderStopLoss() < Bid - TrailingStop *10* MarketInfo(OrderSymbol(), MODE_POINT))&& ((Bid-OrderOpenPrice())>(Point*TrailingStop)))|| (OrderStopLoss()==0)) { bool modify1=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*10*MarketInfo(OrderSymbol(),MODE_POINT),OrderTakeProfit(),clrGreenYellow); } } } else if(OrderType()==OP_SELL) { if(OrderOpenPrice()-Ask>TrailingStop*10*MarketInfo(OrderSymbol(),MODE_POINT)) { if(((OrderStopLoss()>Ask+TrailingStop*10*MarketInfo(OrderSymbol(),MODE_POINT))&& ((OrderOpenPrice()-Ask)>(Point*TrailingStop)))|| (OrderStopLoss()==0)) { bool modify2=OrderModify(OrderTicket(),OrderOpenPrice(), Ask+TrailingStop*10*MarketInfo(OrderSymbol(),MODE_POINT),OrderTakeProfit(),clrGreenYellow); } } } } } } //+------------------------------------------------------------------+ //Calculates Lot Size based on balance and factor //+------------------------------------------------------------------+ double NR(double thelot) { double maxlots=MarketInfo(Symbol(),MODE_MAXLOT), minilot=MarketInfo(Symbol(),MODE_MINLOT), lstep=MarketInfo(Symbol(),MODE_LOTSTEP); double lots=lstep*NormalizeDouble(thelot/lstep,0); lots=MathMax(MathMin(maxlots,lots),minilot); return (lots); } //+------------------------------------------------------------------+ double Lot_Volume() { lot=AccountEquity() * 0.01 /LotFactor ; return(lot); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+

    Performance sur 4 mois EUR/UDS 1 mn
    lefeuvr3 a joint une image
    scalper-gg-14-12298
  • jeanwilfried49

    Salut lefeuvr3 ton programme est intéressant je voudrais solliciter ton aide pour programmer un EA baser sur ischmoku et une MA
    Je t'explique les conditions si tu es intéressée
  • lefeuvr3

    Bonjour Jean-Wilfried
    Quelle serait la stratégie ?...sachant que je n'utilise que le mql4/Mt4
    Eur/usd 1 mn
  • R231

    si elle n'est pas trop compliquée je pourrais travailler dessus aussi. On pourrait peut être créer un topic exprès pour ta stratégie jeanwilfried49 et travailler en groupe dessus ? histoire d'expliquer à tout le monde comment étudier et améliorer une stratégie ? :)