حندوسه |
06-04-2014 12:21 AM |
رد: اكسبيرت تقاطع 3 متوسطات
أخي العزيز شكراً جزيلاً علي تفاعلكم وأيضاً علي الشرح الرائع والبسيط وبناءاً علي هذا الشرح قمت بعمل اكسبيرت لتقاطع تلات متوسطات و قطع موفنج 26 ولم أحصل علي نتائج جيدة لذلك أرجو المساعدةوتوضيح السبب
كود:
//+------------------------------------------------------------------+
//| sherif.mq4 |
//| Copyright 2014, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern string M26 = "Moving Average 26";
extern int period26 = 26;
extern int shift26 = 0;
extern int appliedto26 =0;
extern int method26 = 0;
extern string M156 = "Moving Average 156";
extern int period156 = 26;
extern int shift156 = 0;
extern int appliedto156 =0;
extern int method156 = 0;
extern string M01 = "Moving Average 1";
extern int period1 = 1;
extern int shift1 = 0;
extern int appliedto1=0;
extern int method1 = 0;
extern string M8 = "Moving Average 8";
extern int period8 = 8;
extern int shift8 = 0;
extern int appliedto8 =0;
extern int method8 = 0;
extern string M0 = "Money Management";
extern int takeprofit = 40;
extern int stoploss = 10;
extern double lot = 1;
double t;
extern int Magic = 12345;
int time0;
extern int breakeven = 1;
extern int trailingstop = 1 ;
extern int risk = 1 ;
extern bool ESMM = False ;
extern int Multi = 2 ;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
double ticksize = MarketInfo(Symbol(),MODE_TICKSIZE);
if(ticksize == 0.00001 ||0.001)
t = ticksize*10;
else
t = ticksize;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double LMA26 = iMA(Symbol(),PERIOD_H4,period26,shift26,method26,appliedto26,2);
double NMA26 = iMA(Symbol(),PERIOD_H4,period26,shift26,method26,appliedto26,1);
double LMA156 = iMA(Symbol(),PERIOD_D1,period156,shift156,method156,appliedto156,2);
double NMA156 = iMA(Symbol(),PERIOD_D1,period156,shift156,method156,appliedto156,1);
double LMA8 = iMA(Symbol(),PERIOD_H4,period8,shift8,method8,appliedto8,1);
double NMA8 = iMA(Symbol(),PERIOD_H4,period8,shift8,method8,appliedto8,1);
double LMA1 = iMA(Symbol(),PERIOD_H4,period1,shift1,method1,appliedto1,1);
double NMA1 = iMA(Symbol(),PERIOD_H4,period1,shift1,method1,appliedto1,0);
double crosspip = 2 ;
double Newlot = lot ;
Print("time0="+time0);
if(ESMM == TRUE )lot = Lots();
if(Profitorloss()==false)Newlot =lastlot()*Multi;
if(Profitorloss()==true)Newlot =lot ;
//----BUY CASE+
if(((NMA1-NMA26>crosspip*t) && LMA1 < NMA26 ) ||( LMA8>LMA1 && NMA1-LMA8>crosspip*t && LMA8>LMA26 && NMA8>NMA26 ))
if(LMA26>LMA156 && NMA26>NMA156)
if(time0 != Time[0])
if( OrdersTotal()==0)
{
OrderSend(Symbol(),OP_BUY,Newlot,Ask,3,Ask-(stoploss*t),Ask+(takeprofit*t),"NEW BUY ORDER",Magic,0,clrBlue);
time0=( Time[0]);
}
//----SELL CASE+
if(time0 != Time[0] )
if((NMA26-NMA1 > crosspip*t && NMA26 < LMA1) ||(LMA8<LMA26 && NMA8<NMA26 && LMA1>LMA8 && LMA8-NMA1 > crosspip*t))
if(LMA26<LMA156 && NMA26<NMA156 )
if( OrdersTotal()==0)
{
OrderSend(Symbol(),OP_SELL,Newlot,Bid,3,Bid+(stoploss*t),Bid-(takeprofit*t),"NEW SELL ORDER",Magic,0,clrBlue);
time0=( Time[0]);
}
if(breakeven>0)BreakEven();
if(trailingstop>0)TrailingStop();
//----
return(0);
}
//+------------------------------------------------------------------+
//+-------------BREAKEVEN CODE --------------------------------------+
//+------------------------------------------------------------------+
void BreakEven()
{
for(int i =0 ; i<=OrdersTotal() ; i++)
{
if(OrderSelect(i,SELECT_BY_POS ,MODE_TRADES))
if(OrderSymbol()==Symbol())
if(OrderMagicNumber()==Magic)
if(OrderType()==OP_BUY)
if((Bid-OrderOpenPrice())>(breakeven*t))
if(OrderOpenPrice()>OrderStopLoss())
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,CLR_NONE);
}
for(int ii =0 ; ii<=OrdersTotal() ; ii++)
{
if(OrderSelect(ii,SELECT_BY_POS ,MODE_TRADES))
if(OrderSymbol()==Symbol())
if(OrderMagicNumber()==Magic)
if(OrderType()== OP_SELL)
if((OrderOpenPrice()-Ask)>breakeven*t)
if(OrderOpenPrice()< OrderStopLoss())
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrCyan);
}
}
//+------------------------------------------------------------------+
//+--------------TRAILING STOP CODE---------------------------------+
//+-----------------------------------------------------------------+
void TrailingStop()
{
for(int i =0 ; i<=OrdersTotal() ; i++)
{
if(OrderSelect(i,SELECT_BY_POS ,MODE_TRADES))
if(OrderSymbol()==Symbol())
if(OrderMagicNumber()==Magic)
if(OrderType()==OP_BUY)
if((Bid-OrderOpenPrice())>(trailingstop*t))
if(OrderStopLoss()<Bid-trailingstop*t)
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(trailingstop*t),OrderTakeProfit(),0,CLR_NONE);
}
for(int ii =0 ; ii<=OrdersTotal() ; ii++)
{
if(OrderSelect(ii,SELECT_BY_POS ,MODE_TRADES))
if(OrderSymbol()==Symbol())
if(OrderMagicNumber()==Magic)
if(OrderType()== OP_SELL)
if((OrderOpenPrice()-Ask)>trailingstop*t)
if(OrderStopLoss()> Ask+trailingstop*t)
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(trailingstop*t),OrderTakeProfit(),0,clrCyan);
}
}
//+-----ESMM------------------------------------------------------------+
//+-----ESMM------------------------------------------------------------+
//+-----ESMM------------------------------------------------------------+
double Lots()
{
double lots = MathCeil(AccountFreeMargin()*risk/1000)/100 ;
if(lots<MarketInfo(Symbol(),MODE_MINLOT))
lots = MarketInfo(Symbol(),MODE_MINLOT) ;
if(lots>MarketInfo(Symbol(),MODE_MAXLOT))
lots = MarketInfo(Symbol(),MODE_MAXLOT) ;
return(lots);
}
//+--------MULTI-MULTI----------------------------------------------------------+
//+--------MULTI-MULTI----------------------------------------------------------+
bool Profitorloss()
{
bool Y = true;
for(int i =0 ; i<=OrdersHistoryTotal() ;i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(Symbol()==OrderSymbol()&& OrderMagicNumber() == Magic)
{
if(OrderProfit()>0)
{
Y=True;
}
else
{
Y=false;
}
}
}
return(Y);
}
//+------------------------------------------------------------------+
double lastlot()
{
for(int ii =0 ; ii<=OrdersHistoryTotal() ;ii++)
{
OrderSelect(ii,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()== Symbol()&& OrderMagicNumber() == Magic)
double z = OrderLots();
}
return(z);
}
//+------------------------------------------------------------------+
|