Friday, 18 January 2013

EA zigzag martingale modif for safety


//+------------------------------------------------------------------+
//|                                                     10point3.mq4 |
//|                              Copyright © 2005, Alejandro Galindo |
//|                                   Revised version from davidke20 |
//|                 Settings by Marcel Corzo - marcelcorzo@yahoo.com |
//|                  Added ZigZag by Yast77
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Alejandro Galindo"
#property link      ""

extern int    Magic              = 20081107;
extern double TakeProfit         = 45;
extern double Lots               = 0.01;
extern double InitialStop        = 300;
extern double TrailingStop       = 45;
extern int    MaxTrades          = 10;
extern double Multiplier         = 2;
extern int    Pips               = 30;
extern int    OrderstoProtect    = 6;
extern bool   Money_management   = false;
extern int    AccountType        = 2;        //0: Standard account(NorthFinance,MiG,Alpari) 1: Normal account(FXLQ,FXDD) 2:InterbankFX's NANO Account
extern double risk               = 0.5;
extern bool   ReverseSignal      = false;
//extern int    Fast_EMA           = 12;
//extern int    Slow_EMA           = 26;
//extern int    Signal_SMA         = 9;
//extern int    Shift              = 1;
//extern int    TradingRange       = 0;
extern bool UseTimeFilter=false;
extern int StopTrade = 18;
extern int StartTrade = 19;

extern int ExtDepth=17; //10-21 !15 !17
extern int ExtDeviation=7; //!7
extern int ExtBackstep=5;  //!5
int Urgency=2;

datetime TimeStamp=0;
int  OpenOrders=0, cnt=0;
int  slippage=5;
double sl=0, tp=0;
double BuyPrice=0, SellPrice=0;
double lotsi=0, mylotsi=0;
int mode=0, myOrderType=0;
bool ContinueOpening=True;
double LastPrice=0;
int  PreviousOpenOrders=0;
double Profit=0;
int LastTicket=0, LastType=0;
double LastClosePrice=0, LastLots=0;
double PipValue=0;
string text="", text2="",text3="",text4="";

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{

   double MinLots = NormalizeDouble((MarketInfo(Symbol(), MODE_MINLOT)),2);
   double MaxLots = NormalizeDouble((MarketInfo(Symbol(), MODE_MAXLOT)),2);
   double LotSizeValue = NormalizeDouble((MarketInfo(Symbol(), MODE_LOTSIZE)),0);
   double PipValue=MarketInfo(Symbol(),16);

   if(Money_management)
   {
      switch(AccountType)
      {
         case 0: lotsi=NormalizeDouble(MathCeil((risk*AccountEquity())/10000)/10,1); break;
         case 1: lotsi=NormalizeDouble((risk*AccountEquity())/100000,2); break;
         case 2: lotsi=NormalizeDouble((risk*AccountEquity())/1000,2); break;
         default: lotsi=NormalizeDouble(MathCeil((risk*AccountEquity())/10000)/10,1); break;
      }
   }
   else
   {
      lotsi=Lots;
   }
 
   if(lotsi<MinLots){lotsi=MinLots;}
   if(lotsi>MaxLots){lotsi=MaxLots;}
 
   OpenOrders=0;
   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
 if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
 {
   OpenOrders++;
 }
   }  
   if (PreviousOpenOrders>OpenOrders)
   {
 for(cnt=OrdersTotal();cnt>=0;cnt--)
 {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
   mode=OrderType();
 if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
 {
if (mode==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Blue); }
if (mode==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Red); }
return(0);
}
 }
   }

   PreviousOpenOrders=OpenOrders;
   if (OpenOrders>=MaxTrades)
   {
 ContinueOpening=False;
   } else {
 ContinueOpening=True;
   }

   if (LastPrice==0)
   {
 for(cnt=0;cnt<OrdersTotal();cnt++)
 {
   OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode=OrderType();
if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
{
LastPrice=OrderOpenPrice();
if (mode==OP_BUY) { myOrderType=2; }
if (mode==OP_SELL) { myOrderType=1; }
}
 }
   }

   if (OpenOrders<1)
   {
     if (UseTimeFilter)
     {//check trading time
        if (Hour()>StopTrade && Hour()<StartTrade)
        {Comment("No trading, danger time zone!");
        return(0);}//End of trading time check
     }

    myOrderType=ZIGZAG();


       if (ReverseSignal)
    {
      if (myOrderType==1) { myOrderType=2; }
   else { if (myOrderType==2) { myOrderType=1; } }
    }
   }

   // if we have opened positions we take care of them
   for(cnt=OrdersTotal();cnt>=0;cnt--)
   {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
 if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
 {
   if (OrderType()==OP_SELL)
   {
     if (TrailingStop>0)
 {
 if (OrderOpenPrice()-Ask>=(TrailingStop*Point+Pips*Point))
 {
if (OrderStopLoss()>(Ask+Point*TrailingStop))
{
   OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderClosePrice()-TakeProfit*Point-TrailingStop*Point,800,Purple);
  return(0);  
  }
   }
 }
   }
 
   if (OrderType()==OP_BUY)
   {
  if (TrailingStop>0)
  {
  if (Bid-OrderOpenPrice()>=(TrailingStop*Point+Pips*Point))
{
if (OrderStopLoss()<(Bid-Point*TrailingStop))
{
  OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderClosePrice()+TakeProfit*Point+TrailingStop*Point,800,Yellow);
                  return(0);
}
  }
}
   }
    }
   }
 
   Profit=0;
   LastTicket=0;
   LastType=0;
LastClosePrice=0;
LastLots=0;
for(cnt=0;cnt<OrdersTotal();cnt++)
{
 OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
 if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
 {
    LastTicket=OrderTicket();
if (OrderType()==OP_BUY) { LastType=OP_BUY; }
if (OrderType()==OP_SELL) { LastType=OP_SELL; }
LastClosePrice=OrderClosePrice();
LastLots=OrderLots();
if (LastType==OP_BUY)
{
//Profit=Profit+(Ord(cnt,VAL_CLOSEPRICE)-Ord(cnt,VAL_OPENPRICE))*PipValue*Ord(cnt,VAL_LOTS);
if (OrderClosePrice()<OrderOpenPrice())
{ Profit=Profit-(OrderOpenPrice()-OrderClosePrice())*OrderLots()/Point; }
if (OrderClosePrice()>OrderOpenPrice())
{ Profit=Profit+(OrderClosePrice()-OrderOpenPrice())*OrderLots()/Point; }
}
if (LastType==OP_SELL)
{
//Profit=Profit+(Ord(cnt,VAL_OPENPRICE)-Ord(cnt,VAL_CLOSEPRICE))*PipValue*Ord(cnt,VAL_LOTS);
if (OrderClosePrice()>OrderOpenPrice())
{ Profit=Profit-(OrderClosePrice()-OrderOpenPrice())*OrderLots()/Point; }
if (OrderClosePrice()<OrderOpenPrice())
{ Profit=Profit+(OrderOpenPrice()-OrderClosePrice())*OrderLots()/Point; }
}
//Print(Symbol,":",Profit,",",LastLots);
 }
   }

Profit=Profit*PipValue;
text2="Profit: $"+DoubleToStr(Profit,2)+" +/-";
   if (OpenOrders>=OrderstoProtect)
   {  
    //Print(Symbol,":",Profit);
    if ((Profit>=(AccountBalance()*(risk/100) && Money_management)) || (Profit>=(lotsi*(LotSizeValue/100)) && !Money_management))
    {
       OrderClose(LastTicket,LastLots,LastClosePrice,slippage,Yellow);
       ContinueOpening=False;
       return(0);
    }
   }

      if (!IsTesting())
      {
    if (myOrderType==3) { text="No conditions to open trades"; }
    else { text="                         "; }
    Comment("Buy range: ",text3,"\nSellRange: ",text4,"\n","LastPrice=",LastPrice," Previous open orders=",PreviousOpenOrders,"\nContinue opening=",ContinueOpening," OrderType=",myOrderType,"\n",text2,"\nLots=",lotsi,"\n",text,
    "\nProperty of Alejandro Gallindo","\nhttp://elcactus.com\nhttp://www.forex-tsd.com");
      }

      if (myOrderType==1 && ContinueOpening)
      {
    if ((Bid-LastPrice)>=Pips*Point || OpenOrders<1)
    {
   SellPrice=Bid;
   LastPrice=0;
   if (TakeProfit==0) { tp=0; }
   else { tp=SellPrice-TakeProfit*Point; }
   if (InitialStop==0) { sl=0; }
   else { sl=NormalizeDouble(SellPrice+InitialStop*Point + (MaxTrades-OpenOrders)*Pips*Point, Digits);  }
   if (OpenOrders!=0)
   {
     mylotsi=lotsi;
     for(cnt=1;cnt<=OpenOrders;cnt++)
     {
    if (MaxTrades>12) { mylotsi=NormalizeDouble(mylotsi*1.5,2); }
    else { mylotsi=NormalizeDouble(mylotsi*Multiplier,2); }
     }
   } else { mylotsi=lotsi; }
   if (mylotsi>10) { mylotsi=10; }
   OrderSend(Symbol(),OP_SELL,mylotsi,SellPrice,slippage,sl,tp,"10p3-Sell",Magic,0,Red);      
   return(0);
    }
      }
   
      if (myOrderType==2 && ContinueOpening)
      {
    if ((LastPrice-Ask)>=Pips*Point || OpenOrders<1)
    {
   BuyPrice=Ask;
   LastPrice=0;
   if (TakeProfit==0) { tp=0; }
   else { tp=BuyPrice+TakeProfit*Point; }
   if (InitialStop==0)  { sl=0; }
   else { sl=NormalizeDouble(BuyPrice-InitialStop*Point - (MaxTrades-OpenOrders)*Pips*Point, Digits); }
   if (OpenOrders!=0) {
  mylotsi=lotsi;
  for(cnt=1;cnt<=OpenOrders;cnt++)
  {
 if (MaxTrades>12) { mylotsi=NormalizeDouble(mylotsi*1.5,2); }
 else { mylotsi=NormalizeDouble(mylotsi*Multiplier,2); }
  }
   } else { mylotsi=lotsi; }
   if (mylotsi>5) { mylotsi=5; }
   OrderSend(Symbol(),OP_BUY,mylotsi,BuyPrice,slippage,sl,tp,"10p3-Buy",Magic,0,Blue);  
   return(0);
    }
      }

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

int ZIGZAG()
{
   myOrderType=3;
   int i, candle;
   double ZigZag;
   int CurrentCondition;
 
    while(candle<100)  // ganti angka 100 ---> 1
     {
      ZigZag=iCustom(NULL,0,"ZigZag",   ExtDepth,ExtDeviation,ExtBackstep,   0,candle);
      if(ZigZag!=0) break;
      candle++;
     }
   if(candle>99) return(0);
   if(ZigZag==High[candle])
      myOrderType=2;
   else if(ZigZag==Low[candle])
      myOrderType=1;
   
   
/*
   double MACDMainCurr=iMACD(NULL,0,Fast_EMA,Slow_EMA,Signal_SMA,PRICE_CLOSE,MODE_MAIN,Shift);
   double MACDSigCurr=iMACD(NULL,0,Fast_EMA,Slow_EMA,Signal_SMA,PRICE_CLOSE,MODE_SIGNAL,Shift);
   double MACDMainPre=iMACD(NULL,0,Fast_EMA,Slow_EMA,Signal_SMA,PRICE_CLOSE,MODE_MAIN,Shift+1);
   double MACDSigPre=iMACD(NULL,0,Fast_EMA,Slow_EMA,Signal_SMA,PRICE_CLOSE,MODE_SIGNAL,Shift+1);

   double SellRange=TradingRange*Point;
   double BuyRange=(TradingRange-(TradingRange*2))*Point;

   if(MACDMainCurr>MACDSigCurr && MACDMainPre<MACDSigPre && MACDSigPre<BuyRange && MACDMainCurr<0 && TimeStamp!=iTime(NULL,0,0)) {myOrderType=2; TimeStamp=iTime(NULL,0,0);}
   if(MACDMainCurr<MACDSigCurr && MACDMainPre>MACDSigPre && MACDSigPre>SellRange && MACDMainCurr>0 && TimeStamp!=iTime(NULL,0,0)) {myOrderType=1; TimeStamp=iTime(NULL,0,0);}
 
   text3=DoubleToStr(SellRange,Digits);
   text4=DoubleToStr(BuyRange,Digits);
*/
if(candle<=Urgency){return(myOrderType);}
else
return(0);
}

============================================================
modiv :

Sedikit ulasan mengenai ea nya mbah Aji
Back test setingan TP = 100, biar trailingnya aktif
Yang lain default
Result good...
Tp ada yng OP nya sampai banyak

Iseng2 signal zz nya tak ganti dikit...
while(candle<1)
{
ZigZag=iCustom(NULL,0,"ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0,candle);
if(ZigZag!=0) break;
candle++;
}

candle<100 ----> tak ganti candle<1
Maksudnya biar ea OP nya selalu pakai signal yang terbaru

Lihatlah perbedaannya
Candle = 100



Jadi apabila ada perubahan arah market.....dah ga dag dig dug der lah...
Paling tidak mengurangi potensi jumlah OP yang berlebihan

Semoga bermanfaat....



6 comments:

  1. http://indo.mt5.com/showthread.php?992-Share-EA-khusus-Martingale/page2&viewfull=1&p=85422

    ReplyDelete
  2. I like this zigzag martingale EA!
    Please send me this EA can zigzag martingale?
    Send to: sistemaempreendedor@hotmail.com
    I have a foolproof strategy with this zigzag martingale EA and I can teach you.

    My Skype: rhonder
    Rhonder Silva Takahashi
    sistemaempreendedor@hotmail.com

    ReplyDelete
  3. Hello Everybody,

    I've attached a list of the highest ranking forex brokers:
    1. Most Recommended Forex Broker
    2. eToro - $50 min. deposit.

    Here is a list of top forex instruments:
    1. ForexTrendy - Recommended Odds Software.
    2. EA Builder - Custom Indicators Autotrading.
    3. Fast FX Profit - Secret Forex Strategy.

    I hope you find these lists beneficial.

    ReplyDelete
  4. GPS robot [10X increase of the deposit sum]

    I just got done with a webinar with Mark and his partner, Antony, two days ago and it was AMAZING.

    During the webinar Mark and Antony shared their tips to success and answered questions about their new release of the GPS Forex Robot that CAME OUT TODAY!

    ReplyDelete
  5. This article gives the light in which we can watch the truth. This is exceptionally decent one and gives indepth data. A debt of gratitude is in order for this decent article. Accounts

    ReplyDelete
  6. Binary options traders work with technical binary options chart analysis to ascertain the manner in which prices have changed as an approach of forecasting exactly where they will move in the foreseeable future. One of several important tools is the price chart and they need to be able to understand these charts and also understand what they mean.

    ReplyDelete