e-20PipsLimit-T





//+----------------------------------------------------------------------------+
//|                                                       e-20PipsLimit-T.mq4  |
//|                            Èäåÿ Tartan, ðåàëèçàöèÿ Êèì Èãîðü Â. aka KimIV  |
//|                                                       http://www.kimiv.ru  |
//|                                                                            |
//|  15.10.2006  Óñòàíîâêà äâóõ ïðîòèâîïîëîæíûõ ëèìèòíûõ îðäåðîâ â 00:00 ÷àñîâ |
//|              íà ðàññòîÿíèè 15-20 ïóíêòîâ îò óðîâíÿ îòêðûòèÿ íóëåâîãî áàðà. |
//|              SL=10, TP=20.                                                 |
//+----------------------------------------------------------------------------+
#property copyright "Tartan & KimIV"
#property link      "http://www.kimiv.ru"
#define   MAGIC     20061015

//------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà ------------------------------------------
extern string _P_Entrys = "---------- Ïàðàìåòðû âõîäîâ";
extern string TimeSet    = "00:00";    // Âðåìÿ óñòàíîâêè îðäåðîâ
extern string TimeDel    = "10:00";    // Âðåìÿ óäàëåíèÿ îðäåðîâ
extern int    Distance   = 15;         // Ðàññòîÿíèå óñòàíîâêè îðäåðîâ
extern int    StopLoss   = 10;         // Ðàçìåð ñòîïà
extern int    TakeProfit = 20;         // Ðàçìåð òåéêà
extern double Lots       = 0.1;        // Ðàçìåð ëîòà

extern string _P_Expert = "---------- Ïàðàìåòðû ñîâåòíèêà";
extern int    NumberAccount = 0;            // Íîìåð òîðãîâîãî ñ÷¸òà
extern bool   UseSound      = False;        // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
extern string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
extern bool   ShowComment   = True;         // Ïîêàçûâàòü êîììåíòàðèé

extern string _P_Trade = "---------- Ïàðàìåòðû òîðãîâëè";
extern int Slippage        = 2;        // Ïðîñêàëüçûâàíèå öåíû
extern int NumberOfTry     = 5;        // Êîëè÷åñòâî ïîïûòîê
extern int PauseAfterError = 45;       // Ïàóçà ïîñëå îøèáêè â ñåêóíäàõ

//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà --------------------------------------
color  clOpenBuy    = LightBlue;       // Öâåò îòêðûòèÿ ïîêóïêè
color  clOpenSell   = LightCoral;      // Öâåò îòêðûòèÿ ïðîäàæè
color  clModifyBuy  = Aqua;            // Öâåò ìîäèôèêàöèè ïîêóïêè
color  clModifySell = Tomato;          // Öâåò ìîäèôèêàöèè ïðîäàæè
color  clCloseBuy   = Blue;            // Öâåò çàêðûòèÿ ïîêóïêè
color  clCloseSell  = Red;             // Öâåò çàêðûòèÿ ïðîäàæè
string Name_Expert  = "e-20PipsLimit-T";
datetime dtTimeDel, dtTimeSet;

//------- Ïîêëþ÷åíèå âíåøíèõ ìîäóëåé -------------------------------------------
#include <stdlib.mqh>


//+----------------------------------------------------------------------------+
//|  expert initialization function                                            |
//+----------------------------------------------------------------------------+
void init() {}

//+----------------------------------------------------------------------------+
//|  expert deinitialization function                                          |
//+----------------------------------------------------------------------------+
void deinit() { if (!IsTesting()) Comment(""); }

//+----------------------------------------------------------------------------+
//|  expert start function                                                     |
//+----------------------------------------------------------------------------+
void start() {
  if (!IsTesting()) {
    if (NumberAccount>0 && NumberAccount!=AccountNumber()) {
      Message("ÇÀÏÐÅÙÅÍÀ òîðãîâëÿ íà ñ÷¸òå "+AccountNumber());
      return;
    } else Comment("");
    if (ShowComment) Comment(CreateComment());
  }
  if (Period()!=PERIOD_M15) {
    Message("Ñîâåòíèêó "+Name_Expert+" íóæåí òàéìôðåéì M15");
    return;
  }

  dtTimeSet=StrToTime(TimeToStr(Time[0], TIME_DATE)+" "+TimeSet);
  dtTimeDel=StrToTime(TimeToStr(Time[0], TIME_DATE)+" "+TimeDel);
  if (CurTime()>=dtTimeSet) SetOrders();
  if (CurTime()>=dtTimeDel) DeleteAllOrders();
}

//+----------------------------------------------------------------------------+
//|  Ôîðìèðóåò è âîçâðàùàåò áëîê êîììåíòàðèåâ                                  |
//+----------------------------------------------------------------------------+
string CreateComment() {
  string tc=
         "TimeSet="+TimeSet+
         "  Distance="+DoubleToStr(Distance, 0)+
         "  StopLoss="+DoubleToStr(StopLoss, 0)+
         "  TakeProfit="+DoubleToStr(TakeProfit, 0)+
         "  Lots="+DoubleToStr(Lots, 1);

  return(tc);
}

//+----------------------------------------------------------------------------+
//|  Óäàëåíèå âñåõ îðäåðîâ                                                     |
//+----------------------------------------------------------------------------+
void DeleteAllOrders() {
  for (int i=OrdersTotal()-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderMagicNumber()==MAGIC || OrderMagicNumber()==MAGIC+1) {
        if (OrderSymbol()==Symbol() && OrderType()>1) OrderDelete(OrderTicket());
      }
    }
  }
}

//+----------------------------------------------------------------------------+
//|  Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèè èëè îðäåðà ïî MagicNumber           |
//|  Ïàðàìåòðû:                                                                |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
bool ExistOrderByMN(int mn) {
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderMagicNumber()==mn && OrderSymbol()==Symbol()) return(True);
    }
  }
  return(False);
}

//+----------------------------------------------------------------------------+
//|  Âîçâðàùàåò íàèìåíîâàíèå òàéìôðåéìà                                        |
//+----------------------------------------------------------------------------+
string GetNameTF(int TimeFrame) {
	switch (TimeFrame) {
		case PERIOD_M1:  return("M1");
		case PERIOD_M5:  return("M5");
		case PERIOD_M15: return("M15");
		case PERIOD_M30: return("M30");
		case PERIOD_H1:  return("H1");
		case PERIOD_H4:  return("H4");
		case PERIOD_D1:  return("Daily");
		case PERIOD_W1:  return("Weekly");
		case PERIOD_MN1: return("Monthly");
		default:		     return("UnknownPeriod");
	}
}

//+----------------------------------------------------------------------------+
//|  Âîçâðàùàåò ôëàã òîðãîâ ñåãîäíÿ.                                           |
//+----------------------------------------------------------------------------+
bool isTradeToDay() {
  datetime oot;
  int      i, k=HistoryTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderMagicNumber()==MAGIC || OrderMagicNumber()==MAGIC+1) {
        if (OrderSymbol()==Symbol()) {
          oot=OrderOpenTime();
          if (Day()==TimeDay(oot) && Month()==TimeMonth(oot) && Year()==TimeYear(oot)) return(True);
        }
      }
    }
  }
  return(False);
}

//+----------------------------------------------------------------------------+
//|  Âûâîä ñîîáùåíèÿ â êîììåíò è â æóðíàë                                      |
//+----------------------------------------------------------------------------+
void Message(string m) {
  Comment(m);
  if (StringLen(m)>0) Print(m);
}

//+----------------------------------------------------------------------------+
//|  Óñòàíîâêà îðäåðà                                                          |
//|  Ïàðàìåòðû:                                                                |
//|    op     - îïåðàöèÿ                                                       |
//|    pp     - öåíà                                                           |
//|    ldStop - óðîâåíü ñòîï                                                   |
//|    ldTake - óðîâåíü òåéê                                                   |
//|    mn     - äîáàâêà ê ìàãèêó                                               |
//+----------------------------------------------------------------------------+
void SetOrder(int op, double pp, double ldStop, double ldTake, int mn) {
  color  clOpen;
  int    err, it, ticket;
  string lsComm=Name_Expert+" "+GetNameTF(Period());

  if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell;
//  Lots=GetSizeLot();
  for (it=1; it<=NumberOfTry; it++) {
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    ticket=OrderSend(Symbol(),op,Lots,pp,Slippage,ldStop,ldTake,lsComm,MAGIC+mn,0,clOpen);
    if (ticket>0) {
      if (UseSound) PlaySound(NameFileSound); break;
    } else {
      err=GetLastError();
      if (err==128 || err==142 || err==143 || err==144) {
        Sleep(1000*PauseAfterError);
        if (ExistOrderByMN(MAGIC+mn)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
        Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
        continue;
      }
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*PauseAfterError);
      Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
      if (err==2 || err==64 || err==65 || err==4110 || err==4111) break;
      Sleep(1000*PauseAfterError);
    }
  }
}

//+----------------------------------------------------------------------------+
//|  Óñòàíîâêà îðäåðîâ                                                         |
//+----------------------------------------------------------------------------+
void SetOrders() {
  double ldStop=0, ldTake=0, pp;

  if (!isTradeToDay()) {
    if (!ExistOrderByMN(MAGIC)) {
      pp=Ask-Distance*Point;
      if (StopLoss!=0) ldStop=pp-StopLoss*Point;
      if (TakeProfit!=0) ldTake=pp+TakeProfit*Point;
      SetOrder(OP_BUYLIMIT, pp, ldStop, ldTake, 0);
    }
    if (!ExistOrderByMN(MAGIC+1)) {
      pp=Bid+Distance*Point;
      if (StopLoss!=0) ldStop=pp+StopLoss*Point;
      if (TakeProfit!=0) ldTake=pp-TakeProfit*Point;
      SetOrder(OP_SELLLIMIT, pp, ldStop, ldTake, 1);
    }
  }
}
//+----------------------------------------------------------------------------+





Sample





Analysis



Market Information Used:

Series array that contains open time of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached

Other Features:


It plays sound alerts

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCHF on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

Request Backtest for e-20PipsLimit-T


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: