mv-e-DailyRange

Author: ������ ��������� �. MaxV42
0 Views
0 Downloads
0 Favorites
mv-e-DailyRange
//+--------------------------------------------------------------------------+
//|                                                      mv-e-DailyRange.mq4 |
//|                                               Ìàêñèì Âàñèëåíêî Â. MaxV42 |
//|                                               http://                    |
//| Òàéìôðåéì H1.                                                            |
//| Âåðñèÿ 1.0:                                                              |
//+--------------------------------------------------------------------------+
#property copyright "Ìàêñèì Âàñèëåíêî Â. MaxV42"
#property link      "http://"
//+------------------------------------------------------------------+
#include <b-Positions.mqh>       // Áèáëèîòåêà ôóíêöèé äëÿ ðàáîòû ñ ïîçèöèÿìè.  (Êèì Èãîðü Â.)
#include <b-Orders.mqh>          // Áèáëèîòåêà ôóíêöèé äëÿ ðàáîòû ñ îðäåðàìè.   (Êèì Èãîðü Â.)
#include <b-Lots.mqh>            // Áèáëèîòåêà ôóíêöèé ðàñ÷¸òà ðàçìåðà ëîòà.    (Êèì Èãîðü Â.)
//+------------------------------------------------------------------+
//  Âíåøíèå ïàðàìåòðû ñîâåòíèêà
extern string Exp_Coment1= "--- Âíåøíèå ïàðàìåòðû ñîâåòíèêà ---";
extern int MagicNumber     =  12345;           // MagicNumber
extern bool UseTrailing    =  false;           // Èñïîëüçîâàòü òðàë
extern bool Use.Buy        =   true;           // îêðûâàòü ïîçèöèè ïîêóïêè
extern bool Use.Sell       =   true;           // îêðûâàòü ïîçèöèè ïðîäàæè
extern int DailyRange.Buy  =    100;           // äèñòàíöèÿ â ïóíêòàõ îò äíåâíîãî High[0] äëÿ îòêðûòèÿ ïîçèöèè Buy
extern int DailyRange.Sell =    138;           // äèñòàíöèÿ â ïóíêòàõ îò äíåâíîãî Low[0] äëÿ îòêðûòèÿ ïîçèöèè Sell

extern int SessionTrade.Begin  = 21;               // Íà÷àëî òîðãîâîé ñåñèè
extern int SessionTrade.Finish = 21;               // Çàâåðøåíèå òîðãîâîé ñåñèè
extern bool Use.SessionFilter    =   true;         // Âêë/âûêë âðåìåííîãî ôèëüòðà òîðãîâëè

extern string Exp_Coment2= "0-ïðîñòîé òðàë, 1-èñïîëüçîâàòü 1-st Level Stop/Reverse è 1-st Level Stop/Reverse";
extern int Trailing.Type   =      0;           // 0 - ïðîñòîé òðàë, 1 - èñïîëüçîâàòü "1-st Level Stop/Reverse" è "1-st Level Stop/Reverse"
extern string Exp_Coment3= "0-StopLoss è TakeProfit íå èñïîëüçóþòñÿ";
extern int StopLoss.Buy    =     86;           // Ñòîï ëîññ â ïóíêòàõ
extern int TakeProf.Buy    =    130;           // Òåéê ïðîô â ïóíêòàõ
extern int StopLoss.Sell   =    142;           // Ñòîï ëîññ â ïóíêòàõ
extern int TakeProf.Sell   =    146;           // Òåéê ïðîô â ïóíêòàõ
//+------------------------------------------------------------------+
// ïàðàìåòðû òåõíè÷åñêèõ èíäèêàòîðîâ
int nBars=0;
//+------------------------------------------------------------------+
int init()  {     // expert initialization function
   return(0);
}

//+------------------------------------------------------------------+
int deinit()  {   // expert deinitialization function
   return(0);
}

//+------------------------------------------------------------------+
int start() {     // expert start function
  // íîâûé áàð íå ïîÿâèëñÿ
  if(!isNewBar()) return;
  // ----- Òîðãîâàÿ ôóíêöèÿ
  Trade(Criterion());
  return(0);
}

//+------------------------------------------------------------------+
int Criterion() {  // Ôóíêöèÿ âû÷èñëåíèÿ òîðãîâûõ êðèòåðèåâ.
bool IsOpenBuy =ExistPositions(NULL, OP_BUY, MagicNumber, 0);     // ôëàã ñóùåñòâîâàíèÿ ðûíî÷íûõ Buy-îðäåðîâ
bool IsOpenSell=ExistPositions(NULL, OP_SELL, MagicNumber, 0);    // ôëàã ñóùåñòâîâàíèÿ ðûíî÷íûõ Sell-îðäåðîâ
datetime dSessionTrade.Begin=StrToTime(TimeToStr(Time[0],TIME_DATE)+" "+DoubleToStr(SessionTrade.Begin,0)+":00");
datetime dSessionTrade.Finish=StrToTime(TimeToStr(Time[0],TIME_DATE)+" "+DoubleToStr(SessionTrade.Finish,0)+":00");

  //--------------------------------------------------------- 1 --

  // óñëîâèå äëÿ ïîêóïêè
  if(Use.Buy && !IsOpenBuy &&                                                               //
     (iHigh(Symbol(),PERIOD_D1,0)-MarketInfo(Symbol(),MODE_ASK))/Point>DailyRange.Buy)  {   //  
    // ----- ôèëüòð ïî âðåìåíè òîðãîâëè ÍÅ âêëþ÷åí
    if(!Use.SessionFilter) return(10);
    // ----- ôèëüòð ïî âðåìåíè òîðãîâëè âêëþ÷åí
    if(Time[0]>=dSessionTrade.Begin && Time[0]<=dSessionTrade.Finish)  {
      return(10);
    }
  }
  // óñëîâèå äëÿ çàêðûòèÿ Buy ïî ñòîëîññó
  if( IsOpenBuy && DistMarketAndPos(NULL, OP_BUY, MagicNumber)<=StopLoss.Buy*(-1) && StopLoss.Buy>0 )
    return(11);
  // óñëîâèå äëÿ çàêðûòèÿ Buy ïî òåéêïðîôèòó
  if( IsOpenBuy && DistMarketAndPos(NULL, OP_BUY, MagicNumber)>=TakeProf.Buy && TakeProf.Buy>0 )
    return(11);
  //--------------------------------------------------------- 2 --
  // óñëîâèå äëÿ ïðîäàæè
  if(Use.Sell && !IsOpenSell &&                                                             // 
     (MarketInfo(Symbol(),MODE_BID)-iLow(Symbol(),PERIOD_D1,0))/Point>DailyRange.Sell)  {   //  
    // ----- ôèëüòð ïî âðåìåíè òîðãîâëè ÍÅ âêëþ÷åí
    if(!Use.SessionFilter) return(20);
    // ----- ôèëüòð ïî âðåìåíè òîðãîâëè âêëþ÷åí
    if(Time[0]>=dSessionTrade.Begin && Time[0]<=dSessionTrade.Finish)  {
      return(20);
    }
  }
  // óñëîâèå äëÿ çàêðûòèÿ Sell ïî ñòîëîññó
  if( IsOpenSell && DistMarketAndPos(NULL, OP_SELL, MagicNumber)<=StopLoss.Sell*(-1) && StopLoss.Sell>0 )
    return(21);
  // óñëîâèå äëÿ çàêðûòèÿ Sell ïî òåéêïðîôèòó
  if( IsOpenSell && DistMarketAndPos(NULL, OP_SELL, MagicNumber)>=TakeProf.Sell && TakeProf.Sell>0 )
    return(21);

  return(0);
}

void Trade(int TradeSignal)  { // Òîðãîâàÿ ôóíêöèÿ
  // TradeSignal - òèï òîðãîâîé îïåðàöèè:
  // 10 - îòêðûòèå Buy  
  // 20 - îòêðûòèå Sell 
  // 11 - çàêðûòèå Buy
  // 21 - çàêðûòèå Sell
  //  0 - çíà÷èìûõ êðèòåðèåâ íåò

bool IsOpenBuy =ExistPositions(NULL, OP_BUY, MagicNumber, 0);     // ôëàã ñóùåñòâîâàíèÿ ðûíî÷íûõ Buy-îðäåðîâ
bool IsOpenSell=ExistPositions(NULL, OP_SELL, MagicNumber, 0);    // ôëàã ñóùåñòâîâàíèÿ ðûíî÷íûõ Sell-îðäåðîâ
  switch(TradeSignal) {

    //--------------------------------------------------------- 1 --
    case 10:                                                                // Òîðãîâûé êðèòåðèé = Buy
      if(IsOpenSell) ClosePosFirstProfit(NULL, OP_SELL, MagicNumber);       // Çàêðûòü âñå Sell
      OpenPosition(NULL, OP_BUY, GetSizeLot(), 0, 0, MagicNumber, "");      // Îòêðûòü Buy
      break;                                                                // Ïîòîðãîâàëè - óõîäèì
    //--------------------------------------------------------- 2 --
    case 11:                                                                // Òîðã. êðèò. = çàêðûòèå Buy
      ClosePosFirstProfit(NULL, OP_BUY, MagicNumber);                       // Çàêðûòü âñå Buy
      break;                                                                // Ïîòîðãîâàëè - óõîäèì
    //--------------------------------------------------------- 2 --
    case 20:                                                                // Òîðãîâûé êðèòåðèé = Sell
      if(IsOpenBuy) ClosePosFirstProfit(NULL, OP_BUY, MagicNumber);         // Çàêðûòü âñå Buy
      OpenPosition(NULL, OP_SELL, GetSizeLot(), 0, 0, MagicNumber, "");     // Îòêðûòü Sell
      break;                                                                // Ïîòîðãîâàëè - óõîäèì
    //--------------------------------------------------------- 4 --
    case 21:                                                                // Òîðã. êðèò. = çàêðûòèå Sell
      ClosePosFirstProfit(NULL, OP_SELL, MagicNumber);                      // Çàêðûòü âñå Sell
      break;                                                                // Ïîòîðãîâàëè - óõîäèì
    //--------------------------------------------------------- 5 --
    case 0:                                                                 // Óäåðæàíèå îòêðûòûõ ïîçèöèé
      if(IsOpenSell || IsOpenBuy)  {
        if(UseTrailing)  {
          if(Trailing.Type==0) SimpleTrailing(NULL, -1, MagicNumber);       // Ïðîñòîé òðàë ïîçèöèé
        }
      }
      break;                                                               // Ïîòîðãîâàëè - óõîäèì
  }

  return;
}

//+---------------------------------------------------------------------------+
bool isNewBar() {                     // Ôóíêöèÿ âîçâðàùàåò true, åñëè ïîÿâèòüñÿ íîâûé áàð, èíà÷å false
  if(nBars!=Bars) {
    nBars=Bars; return(true);
  }
  return(false);
}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---