e-TFL





//+------------------------------------------------------------------+
//|                                                        e-TFL.mq4 |
//|                                           Êèì Èãîðü Â. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|  10.07.2006  Trade From Lines (òîðãîâëÿ îò ëèíèé). FreeWare.     |
//+------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link      "http://www.kimiv.ru"

//------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà --------------------------------
extern string _P_Expert = "---------- Ïàðàìåòðû ñîâåòíèêà";
extern string esNameUpLine  = "UPLine";// Íàèìåíîâàíèå âåðõíåé ëèíèè
extern string esNameDnLine  = "DNLine";// Íàèìåíîâàíèå íèæíåé ëèíèè
extern bool   ebBuyFromUp   = False;   // Ïîêóïàòü îò âåðõíåé ëèíèè
extern bool   ebBuyFromDn   = False;   // Ïîêóïàòü îò íèæíåé ëèíèè
extern bool   ebShowComment = True;    // Ïîêàçûâàòü êîììåíòàðèè

extern string _P_Trade = "---------- Ïàðàìåòðû òîðãîâëè";
extern double Lots         = 0.1;      // Ðàçìåð òîðãóåìîãî ëîòà
extern int    StopLoss     = 15;       // Ðàçìåð ôèêñèðîâàííîãî ñòîïà
extern int    TakeProfit   = 15;       // Ðàçìåð ôèêñèðîâàííîãî òýéêà
extern int    Slippage     = 3;        // Ïðîñêàëüçûâàíèå öåíû

//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà ----------------------------
string Name_Expert   = "e-TFL";
bool   UseSound      = True;           // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
string NameFileSound = "expert.wav";   // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
color  clOpenBuy     = LightBlue;      // Öâåò çíà÷êà îòêðûòèÿ ïîêóïêè
color  clOpenSell    = LightCoral;     // Öâåò çíà÷êà îòêðûòèÿ ïðîäàæè
color  clCloseBuy    = Blue;           // Öâåò çíà÷êà çàêðûòèÿ ïîêóïêè
color  clCloseSell   = Red;            // Öâåò çíà÷êà çàêðûòèÿ ïðîäàæè
double gdUpPrice, gdDnPrice;           // Òåêóùèå öåíîâûå óðîâíè
double gdPrevUpPrice, gdPrevDnPrice;   // Ïðåäûäóùèå öåíîâûå óðîâíè
double gdPrevAsk, gdPrevBid;           // Ïðåäûäóùèå öåíû


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

//+------------------------------------------------------------------+
//| expert program start function                                    |
//+------------------------------------------------------------------+
void start() {
  gdUpPrice=0;
  gdDnPrice=0;
  if (idPriceLevel() && gdPrevAsk!=0 && gdPrevBid!=0) OpenPositions();

  if (ebShowComment) {
    string st="";
    if (gdUpPrice==0) st="Íå îïðåäåë¸í âåðõíèé öåíîâîé óðîâåíü\n";
    else {
      if (ebBuyFromUp) st="Ïîêóïêà îò ";
      else st="Ïðîäàæà îò ";
      st=st+DoubleToStr(gdUpPrice, Digits)+"\n";
    }
    if (gdDnPrice==0) st=st+"Íå îïðåäåë¸í íèæíèé öåíîâîé óðîâåíü";
    else {
      if (ebBuyFromDn) st=st+"Ïîêóïêà îò ";
      else st=st+"Ïðîäàæà îò ";
      st=st+DoubleToStr(gdDnPrice, Digits);
    }
    Comment(st);
  }

  if (gdUpPrice>0) gdPrevUpPrice=gdUpPrice;
  if (gdDnPrice>0) gdPrevDnPrice=gdDnPrice;
  gdPrevAsk=Ask;
  gdPrevBid=Bid;
}

//+------------------------------------------------------------------+
//| Èäåíòèôèêàöèÿ âåðõíåãî è íèæíåãî öåíîâûõ óðîâíåé                 |
//+------------------------------------------------------------------+
bool idPriceLevel() {
  // Âåðõíèé öåíîâîé óðîâåíü
  if (ObjectFind(esNameUpLine)<0) {
    gdUpPrice=0;
    gdPrevUpPrice=0;
    Message("Íå íàéäåíà ëèíèÿ "+esNameUpLine);
  } else {
    switch (ObjectType(esNameUpLine)) {
      case OBJ_HLINE: gdUpPrice=ObjectGet(esNameUpLine, OBJPROP_PRICE1); break;
      case OBJ_TREND: gdUpPrice=ObjectGetValueByShift(esNameUpLine, 0); break;
      default: Message("Íåâåðíûé òèï ëèíèè "+esNameUpLine); break;
    }
  }

  // Íèæíèé öåíîâîé óðîâåíü
  if (ObjectFind(esNameDnLine)<0) {
    gdDnPrice=0;
    gdPrevDnPrice=0;
    Message("Íå íàéäåíà ëèíèÿ "+esNameDnLine);
  } else {
    switch (ObjectType(esNameDnLine)) {
      case OBJ_HLINE: gdDnPrice=ObjectGet(esNameDnLine, OBJPROP_PRICE1); break;
      case OBJ_TREND: gdDnPrice=ObjectGetValueByShift(esNameDnLine, 0); break;
      default: Message("Íåâåðíûé òèï ëèíèè "+esNameDnLine); break;
    }
  }

  if (gdUpPrice<gdPrevBid && gdUpPrice>0) {
    gdUpPrice=0;
    Message("Âåðõíÿÿ ëèíèÿ "+esNameUpLine+" ðàñïîëîæåíà íèæå ðûíêà");
  }
  if (gdDnPrice>gdPrevAsk && gdPrevAsk>0) {
    gdDnPrice=0;
    Message("Íèæíÿÿ ëèíèÿ "+esNameDnLine+" ðàñïîëîæåíà âûøå ðûíêà");
  }

  if (gdUpPrice!=gdPrevUpPrice || gdDnPrice!=gdPrevDnPrice
   || gdPrevUpPrice==0 || gdPrevDnPrice==0
   || gdUpPrice==0 || gdUpPrice==0) return(False);
  else return(True);
}

//+------------------------------------------------------------------+
//| Îòêðûòèå ïîçèöèè                                                 |
//+------------------------------------------------------------------+
void OpenPositions() {
  bool   lbBuy=False, lbSell=False;
  double ldStop=0, ldTake=0;

  if ((Ask>gdPrevAsk && Ask>=gdUpPrice && ebBuyFromUp)
   || (Ask<gdPrevAsk && Ask<=gdDnPrice && ebBuyFromDn)) lbBuy=True;
  if ((Bid>gdPrevBid && Bid>=gdUpPrice && !ebBuyFromUp)
   || (Bid<gdPrevBid && Bid<=gdDnPrice && !ebBuyFromDn)) lbSell=True;

  if (lbBuy) {
    if (ExistPositionByOP(OP_SELL)) CloseAllPositions();
    if (!ExistPositionByOP(OP_BUY)) {
      if (StopLoss!=0) ldStop=Ask-StopLoss*Point;
      if (TakeProfit!=0) ldTake=Ask+TakeProfit*Point;
      OpenPosition(OP_BUY, ldStop, ldTake);
    }
  }
  if (lbSell) {
    if (ExistPositionByOP(OP_BUY)) CloseAllPositions();
    if (!ExistPositionByOP(OP_SELL)) {
      if (StopLoss!=0) ldStop=Bid+StopLoss*Point;
      if (TakeProfit!=0) ldTake=Bid-TakeProfit*Point;
      OpenPosition(OP_SELL, ldStop, ldTake);
    }
  }
}

//+------------------------------------------------------------------+
//| Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèè ïî îïåðàöèè                |
//+------------------------------------------------------------------+
bool ExistPositionByOP(int op) {
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symbol() && OrderType()==op) return(True);
    }
  }
  return(False);
}

//+------------------------------------------------------------------+
//| Îòêðûòèå ïîçèöèè ïî òåêóùåé öåíå                                 |
//| Ïàðàìåòðû:                                                       |
//|   op     - îïåðàöèÿ                                              |
//|   ldStop - óðîâåíü ñòîï                                          |
//|   ldTake - óðîâåíü òåéê                                          |
//+------------------------------------------------------------------+
void OpenPosition(int op, double ldStop, double ldTake) {
  color  clOpen;
  double pp;
  string lsComm=GetCommentForOrder();

  if (op==OP_BUY) {
    clOpen=clOpenBuy;
    pp=Ask;
  } else {
    clOpen=clOpenSell;
    pp=Bid;
  }
  OrderSend(Symbol(),op,Lots,pp,Slippage,ldStop,ldTake,lsComm,0,0,clOpen);
  if (UseSound) PlaySound(NameFileSound);
}

//+------------------------------------------------------------------+
//| Ãåíåðèðóåò è âîçâðàùàåò ñòðîêó êîìåíòàðèÿ äëÿ îðäåðà èëè ïîçèöèè |
//+------------------------------------------------------------------+
string GetCommentForOrder() {
  return(Name_Expert+" "+GetNameTF(Period()));
}

//+------------------------------------------------------------------+
//| Âîçâðàùàåò íàèìåíîâàíèå òàéìôðåéìà                               |
//+------------------------------------------------------------------+
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");
	}
}

//+------------------------------------------------------------------+
//| Çàêðûòèå âñåõ ïîçèöèé ïî ðûíî÷íîé öåíå                           |
//+------------------------------------------------------------------+
void CloseAllPositions() {
  for (int i=OrdersTotal()-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symbol()) {
        if (OrderType()==OP_BUY) {
          OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
        }
        if (OrderType()==OP_SELL) {
          OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
        }
      }
    }
  }
}

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





Sample





Analysis



Market Information Used:



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
It Closes Orders by itself

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-TFL


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

Pair: Period: