诚信为本
量力而为
当前位置:首页MetaTrader 4MT4 EA加码EA Emily_v18 M30 EURUSD.mq4

加码EA Emily_v18 M30 EURUSD.mq4

Emily_v18 M30 EURUSD EA采用的是加码策略,需要足够的资金支持任性加仓。用在EURUSD30分钟图表交易。

源码:

//+------------------------------------------------------------------+
//|                                         Emily_v18 M30 EURUSD.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright  2007, cocoracas"
#property link      "http://www.125808047.com"

extern   int      MaxTrades = 5;
extern   int      Pips = 60;
extern   double   TakeProfit = 45;
extern   double   TrailingStop = 0;
extern   double   InitialStop = 00;
extern string Note1 = "TF DAILY";
extern int   MACDTimeFrame = 0;
int      SecureProfit = 5;
int      AccountProtection = 1;
int      OrdersToProtect = 4;
int      ReverseCondition = 0;
double   FirstOrderLots=0.01;
int      OrdersOpened = 0;
int      cnt = 0;
double   lots = 0.01;
int      slippage = 2;
double   stoploss = 0;
double   takeprofit = 0;
double   bprice = 0;
double   sprice = 0;
double   lotsi = 0;
int      type = 0;
int      state = 0;
bool     EnableTrading = true;
double   openprice = 0;
int      PreviousOrders = 0;
double   Profit = 0;
int      LastTicket = 0;
int      LastType = 0;
double   LastClosePrice = 0;
double   LastLots = 0;
double   PipValue = 0;
string   text2 = "";
string   text = "";
double   lotstmp;
double trade;
double trade1;
int trendtype;

extern int RSIOMA          = 3;
extern int RSIOMA_MODE     = MODE_EMA;
extern int RSIOMA_PRICE    = PRICE_CLOSE;

extern int Ma_RSIOMA       = 21,
           Ma_RSIOMA_MODE  = MODE_EMA;

extern int BuyTrigger      = 70;
extern int SellTrigger     = 30;

extern int MainTrendLong   = 50;
extern int MainTrendShort  = 50;
double RSIBuffer[];
double PosBuffer[];
double NegBuffer[];

double bdn[],bup[];
double sdn[],sup[];

double marsioma[];

string short_name;
double rel,rel1,negative,positive;
int i;
int MAFastPeriod=3;
int MAFastShift=0;
int MAFastMethod=MODE_SMA;
int MAFastPrice=PRICE_CLOSE;

int MASlowPeriod=8;
int MASlowShift=0;
int MASlowMethod=MODE_SMA;
int MASlowPrice=PRICE_CLOSE;
int rete;
bool cg = false;

int OnInit()
{ 
   Comment("www.125808047.com");
   return(INIT_SUCCEEDED);
}

void OnTick()
{
double macd = iMACD(NULL,0,5,13,1,PRICE_CLOSE,MODE_MAIN,0);
  int    counted_bars=IndicatorCounted();

  double fast1=iMA(Symbol(),0,MAFastPeriod,MAFastShift,MAFastMethod,MAFastPrice,1);
  double fast2=iMA(Symbol(),0,MAFastPeriod,MAFastShift,MAFastMethod,MAFastPrice,2);
  double slow1=iMA(Symbol(),0,MASlowPeriod,MASlowShift,MASlowMethod,MASlowPrice,1);
  double slow2=iMA(Symbol(),0,MASlowPeriod,MASlowShift,MASlowMethod,MASlowPrice,2);
  if (fast1>slow1&&fast2<slow2) rete = 2;
  if (fast1<slow1&&fast2>slow2) rete = 1;

   if(counted_bars<1)
      for(i=1;i<=RSIOMA;i++) RSIBuffer[Bars-i]=0.0;
   i=Bars-RSIOMA-1;
   int ma = i;
   if(counted_bars>=RSIOMA) i=Bars-counted_bars-1;
   while(i>=0)
     {
      double sumn=0.0,sump=0.0;
      if(i==Bars-RSIOMA-1)
        {
         int k=Bars-2;
         while(k>=i)
           {
            double cma = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,k);
            double pma = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,k+1);
            rel=cma-pma;
            if(rel>0) sump+=rel;
            else      sumn-=rel;
            k--;
           }
         positive=sump/RSIOMA;
         negative=sumn/RSIOMA;
        }
      else
        {
         double ccma = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,i);
         double ppma = iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,i+1);
         rel=ccma-ppma;
         if(rel>0) sump=rel;
         else      sumn=-rel;
         positive=(PosBuffer[i+1]*(RSIOMA-1)+sump)/RSIOMA;
         negative=(NegBuffer[i+1]*(RSIOMA-1)+sumn)/RSIOMA;
        }
      PosBuffer[i]=positive;
      NegBuffer[i]=negative;
      if(negative==0.0) RSIBuffer[i]=0.0;
      else
      {
          RSIBuffer[i]=100.0-100.0/(1+positive/negative);
          
          bdn[i] = 0;
          bup[i] = 0;
          sdn[i] = 0;
          sup[i] = 0;
          
          if(RSIBuffer[i]>MainTrendLong)
          bup[i] = -10;
          
          if(RSIBuffer[i]<MainTrendShort)
          bdn[i] = -10;
          
          if(RSIBuffer[i]<30 && RSIBuffer[i]>RSIBuffer[i+1])
          sup[i] = -10;
          
          if(RSIBuffer[i]>70 && RSIBuffer[i]<RSIBuffer[i+1])
          sdn[i] = -10;
      }    
      i--;
     }
     while(ma>=0)
     {
         marsioma[ma] = iMAOnArray(RSIBuffer,0,Ma_RSIOMA,0,Ma_RSIOMA_MODE,ma); 
         ma--;
     }    
if (AccountBalance()>10000)
FirstOrderLots = AccountBalance()/50000;
if (AccountBalance()<10000)
FirstOrderLots = AccountBalance()/600;
if (AccountBalance()>50000)
FirstOrderLots = AccountBalance()/50000;

lotsi = NormalizeDouble(FirstOrderLots,1);
if (lotsi > 100.0) lotsi = 100;
if (lotsi<0.01) lotsi=0.1;
string tripo;
if (rel > 0 && macd > 0) tripo = "BUY";
if (rel < 0 && macd < 0) tripo = "SELL";
OrdersOpened = 0;
Comment("USE ONLY WITH EUR/USD IN 30M TIME FRAME","\n");
for (cnt = 0; cnt < OrdersTotal(); cnt++)
{
 cg = OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
 if (OrderSymbol() == Symbol()) OrdersOpened++;
}

PipValue=MarketInfo(Symbol(),MODE_TICKVALUE); 
if (PipValue == 0.0) PipValue = 5;

if (PreviousOrders > OrdersOpened)
   {
   for (cnt = OrdersTotal(); cnt >= 0; cnt--)
      {
      cg = OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      type = OrderType();
      if (OrderSymbol() == Symbol())
         {
         if (type == OP_BUY)  cg = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Blue);
         if (type == OP_SELL) cg = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Red);
         }
      }
   }

PreviousOrders = OrdersOpened;
if (OrdersOpened >= MaxTrades) EnableTrading = false; else EnableTrading = true;

if (openprice == 0.0)
   {
   for (cnt = 0; cnt < OrdersTotal(); cnt++)
      {
      cg = OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      type = OrderType();
      if (OrderSymbol() == Symbol())
         {
         openprice = OrderOpenPrice();
         if (type == OP_BUY)  state = 2;
         if (type == OP_SELL) state = 1;
         }
      }
   }
if (OrdersOpened < 1)
   {
   state = 3;
   if (rel > 0 && rete == 2) state = 2;
   if (rel < 0 && rete == 1) state = 1;
   if (ReverseCondition == 1)
      {
      if (state == 1)
         {
         state = 2;
         }
            else
         {
         if (state == 2)
            {
            state = 1;
            }
         }
      }
   }

for (cnt = OrdersTotal(); cnt >= 0; cnt--)
   {
   cg = OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
   if (OrderSymbol() == Symbol())
      {
      if (OrderType() == OP_SELL)
         {
         if (TrailingStop > 0.0)
            {
            if (OrderOpenPrice() - Ask >= (TrailingStop + Pips) * Point)
               {
               if (OrderStopLoss() > Ask + Point * TrailingStop)
                  {
                  cg = OrderModify(OrderTicket(),OrderOpenPrice(),Ask + Point * TrailingStop,OrderClosePrice() - TakeProfit * Point - TrailingStop * Point,800,Purple);
                  }
               }
            }
         }
      if (OrderType() == OP_BUY)
         {
         if (TrailingStop > 0.0)
            {
            if (Bid - OrderOpenPrice() >= (TrailingStop + Pips) * Point)
               {
               if (OrderStopLoss() < Bid - Point * TrailingStop)
                  {
                  cg = OrderModify(OrderTicket(),OrderOpenPrice(),Bid - Point * TrailingStop,OrderClosePrice() + TakeProfit * Point + TrailingStop * Point,800,Yellow);
                  }
               }
            }
         }
      }
   }

Profit = 0;
LastTicket = 0;
LastType = 0;
LastClosePrice = 0;
LastLots = 0;

for (cnt = 0; cnt < OrdersTotal(); cnt++)
   {
   cg = OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
   if (OrderSymbol() == Symbol())
      {
      LastTicket = OrderTicket();
      if (OrderType() == OP_BUY)  LastType = 0;
      if (OrderType() == OP_SELL) LastType = 1;
      LastClosePrice = OrderClosePrice();
      LastLots = OrderLots();
      if (LastType == 0)
         {
         if (OrderClosePrice() < OrderOpenPrice()) Profit -= (OrderOpenPrice() - OrderClosePrice()) * OrderLots() / Point;
         if (OrderClosePrice() > OrderOpenPrice()) Profit += (OrderClosePrice() - OrderOpenPrice()) * OrderLots() / Point;
         }
      if (LastType == 1)
         {
         if (OrderClosePrice() > OrderOpenPrice()) Profit -= (OrderClosePrice() - OrderOpenPrice()) * OrderLots() / Point;
         if (OrderClosePrice() < OrderOpenPrice()) Profit += (OrderOpenPrice() - OrderClosePrice()) * OrderLots() / Point;
         }
      }
   }

Profit = Profit * PipValue;
text = "Profit: $" + DoubleToStr(Profit,2) + " +/-";

   if (LastType == 0 && state == 1)
      {
      cg = OrderClose(LastTicket,LastLots,LastClosePrice,slippage,Yellow);
      EnableTrading = false;
      }

   if (LastType == 1 && state == 2)
      {
      cg = OrderClose(LastTicket,LastLots,LastClosePrice,slippage,Yellow);
      EnableTrading = false;
      }

if ((OrdersOpened >= MaxTrades - OrdersToProtect) && (AccountProtection == 1))
   {
   if (Profit >= SecureProfit)
      {
      cg = OrderClose(LastTicket,LastLots,LastClosePrice,slippage,Yellow);
      EnableTrading = false;
      }
   }


if (!IsTesting())
   {
   if (state == 3)
      text2 = "No conditions to open trades";
         else
      text2 = "                         ";
   }

if ((state == 1) && EnableTrading)
   {
   if ((Bid - openprice >= Pips * Point) || (OrdersOpened < 1))
      {
      sprice = Bid;
      openprice = 0;
      if (TakeProfit == 0.0)
         takeprofit = 0;
            else
         takeprofit = sprice - TakeProfit * Point;
      if (InitialStop == 0.0)
         stoploss = 0;
            else
         stoploss = sprice + InitialStop * Point;
      if (OrdersOpened != 0)
       {
         lots = lotsi;
         for (cnt = 1; cnt <= OrdersOpened; cnt++)
         {
          if (MaxTrades>12) { lots=NormalizeDouble(lots*3,1); }
			 else { lots=NormalizeDouble(lots*3,1); }
         }
       }
      else
       {
         lots = lotsi;
       }
      if (lots > 100.0) lots = 100;
      cg = OrderSend(Symbol(),OP_SELL,lots,sprice,slippage,0,0,0,0,0,Red);
      }
   }

if ((state == 2) && EnableTrading)
   {
   if ((openprice - Ask >= Pips * Point) || (OrdersOpened < 1))
      {
      bprice = Ask;
      openprice = 0;
      if (TakeProfit == 0.0) takeprofit = 0; else takeprofit = bprice + TakeProfit * Point;
      if (InitialStop == 0.0) stoploss = 0; else stoploss = bprice - InitialStop * Point;
      if (OrdersOpened != 0)
         {
         lots = lotsi;
         for (cnt = 1; cnt <= OrdersOpened; cnt++)
            {
          if (MaxTrades>12) { lots=NormalizeDouble(lots*3,1); }
			 else { lots=NormalizeDouble(lots*3,1); }
            }
         }
            else
         {
         lots = lotsi;
         }
      if (lots > 100.0) lots = 100;
      cg = OrderSend(Symbol(),OP_BUY,lots,bprice,slippage,0,0,0,0,0,Blue);
      }
   }
}
版权所有转载请注明标题及链接:峰汇在线 » 加码EA Emily_v18 M30 EURUSD.mq4
上一篇:
下一篇:
分享到: 更多 (0)