Jump to content

[share] 10p3 EA


mak2009

Recommended Posts

Hi all,

 

Here is another beast I like to share. I have never used it myself because martingale EAs are not my type. However, couple of my friends have used this for more than year and they claim good returns specially on EURCHF....

 

Please use it with caution and do your optimization before going live. Please share if you find good one for benefit of ther members.

 

 

//+------------------------------------------------------------------+

//| 10points 3.mq4 |

//| Copyright ? 2005, Alejandro Galindo |

//| http://elCactus.com |

//+------------------------------------------------------------------+

#property copyright "Copyright ? 2005, Alejandro Galindo"

#property link "http://elCactus.com"

 

extern double TakeProfit = 40;

extern double Lots = 0.1;

extern double InitialStop = 0;

extern double TrailingStop = 20;

 

extern int MaxTrades=10;

extern int Pips=15;

extern int SecureProfit=10;

extern int AccountProtection=1;

extern int OrderstoProtect=3;

extern int ReverseCondition=0;

extern double EURUSDPipValue=10;

extern double GBPUSDPipValue=10;

extern double USDCHFPipValue=10;

extern double USDJPYPipValue=9.715;

extern int StartYear=2005;

extern int StartMonth=1;

extern int EndYear=2005;

extern int EndMonth=12;

extern int EndHour=22;

extern int EndMinute=30;

extern int mm=0;

extern int risk=12;

extern int AccountisNormal=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 Pivot=0;

double PipValue=0;

string text="", text2="";

 

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

 

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

 

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----

if (AccountisNormal==1)

{

if (mm!=0) { lotsi=MathCeil(AccountBalance()*risk/10000); }

else { lotsi=Lots; }

} else { // then is mini

if (mm!=0) { lotsi=MathCeil(AccountBalance()*risk/10000)/10; }

else { lotsi=Lots; }

}

if (lotsi>100){ lotsi=100; }

 

OpenOrders=0;

for(cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol()==Symbol())

{

OpenOrders++;

}

}

 

/*

if (OpenOrders<1)

{

if (TimeYear(CurTime())<StartYear) { return(0); }

if (TimeMonth(CurTime())<StartMonth) { return(0); }

if (TimeYear(CurTime())>EndYear) { return(0); }

if (TimeMonth(CurTime())>EndMonth ) { return(0); }

}

*/

 

if (Symbol()=="EURUSD") { PipValue=EURUSDPipValue; }

if (Symbol()=="GBPUSD") { PipValue=GBPUSDPipValue; }

if (Symbol()=="USDJPY") { PipValue=USDJPYPipValue; }

if (Symbol()=="USDCHF") { PipValue=USDCHFPipValue; }

if (PipValue==0) { PipValue=5; }

 

if (PreviousOpenOrders>OpenOrders)

{

for(cnt=OrdersTotal();cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

mode=OrderType();

if (OrderSymbol()==Symbol())

{

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())

{

LastPrice=OrderOpenPrice();

if (mode==OP_BUY) { myOrderType=2; }

if (mode==OP_SELL) { myOrderType=1; }

}

}

}

 

if (OpenOrders<1)

{

myOrderType=3;

//if (iMACD(14,26,9,MODE_MAIN,0)>0 and iMACD(14,26,9,MODE_MAIN,0)>iMACD(14,26,9,MODE_MAIN,1)) then OrderType=2;

if (iMACD(NULL,0,14,26,9,PRICE_CLOSE,MODE_MAIN,0)>iMACD(NULL,0,14,26,9,PRICE_CLOSE,MODE_MAIN,1)) { myOrderType=2; }

//if (iMACD(14,26,9,MODE_MAIN,0)<0 and iMACD(14,26,9,MODE_MAIN,0)<iMACD(14,26,9,MODE_MAIN,1)) then OrderType=1;

if (iMACD(NULL,0,14,26,9,PRICE_CLOSE,MODE_MAIN,0)<iMACD(NULL,0,14,26,9,PRICE_CLOSE,MODE_MAIN,1)) { myOrderType=1; }

if (ReverseCondition==1)

{

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())

{

if (OrderType()==OP_SELL)

{

if (TrailingStop>0)

{

if (OrderOpenPrice()-Ask>=(TrailingStop+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+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())

{

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>=(MaxTrades-OrderstoProtect) && AccountProtection==1)

{

//Print(Symbol,":",Profit);

if (Profit>=SecureProfit)

{

OrderClose(LastTicket,LastLots,LastClosePrice,slippage,Yellow);

ContinueOpening=False;

return(0);

}

}

 

if (!IsTesting())

{

if (myOrderType==3) { text="No conditions to open trades"; }

else { text=" "; }

Comment("LastPrice=",LastPrice," Previous open orders=",PreviousOpenOrders,"\nContinue opening=",ContinueOpening," OrderType=",myOrderType,"\n",text2,"\nLots=",lotsi,"\n",text);

}

 

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=SellPrice+InitialStop*Point; }

if (OpenOrders!=0)

{

mylotsi=lotsi;

for(cnt=1;cnt<=OpenOrders;cnt++)

{

if (MaxTrades>12) { mylotsi=NormalizeDouble(mylotsi*1.5,2); }

else { mylotsi=NormalizeDouble(mylotsi*2,2); }

}

} else { mylotsi=lotsi; }

if (mylotsi>100) { mylotsi=100; }

OrderSend(Symbol(),OP_SELL,mylotsi,SellPrice,slippage,sl,tp,NULL,0,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=BuyPrice-InitialStop*Point; }

if (OpenOrders!=0) {

mylotsi=lotsi;

for(cnt=1;cnt<=OpenOrders;cnt++)

{

if (MaxTrades>12) { mylotsi=NormalizeDouble(mylotsi*1.5,2); }

else { mylotsi=NormalizeDouble(mylotsi*2,2); }

}

} else { mylotsi=lotsi; }

if (mylotsi>100) { mylotsi=100; }

OrderSend(Symbol(),OP_BUY,mylotsi,BuyPrice,slippage,sl,tp,NULL,0,0,Blue);

return(0);

}

}

 

//----

return(0);

}

//+------------------------------------------------------------------+

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...