e-Skoch_Otlog_qurder

Author: Copyright � 2012, MetaQuotes Software Corp.
Price Data Components
Series array that contains the lowest prices of each barSeries array that contains the highest prices of each bar
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of closed ordersIt Closes Orders by itself Checks for the total of open orders
0 Views
0 Downloads
0 Favorites
e-Skoch_Otlog_qurder
//+------------------------------------------------------------------+
//|                          e-Skoch_Îòëîæ_Îðäåð_V_2-NEW-2 + Lot.mq4 |
//|                      Copyright © 2012, MetaQuotes Software Corp. |
//|                                         http://www.fxgeneral.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link      "http://www.fxgeneral.com"
#include <WinUser32.mqh>

extern double  lot  = 0.01;
extern int     _takeProfit_BUY = 600;
extern int     _stopLoss_BUY   = 100;
extern int     _slippage   = 30;//ðåãóëèðîâêà ïðîñêàëüçûâàíèÿ
extern int     _takeProfit_SELL = 600;
extern int     _stopLoss_SELL   = 30;
extern int     key      = 0;
extern int     _pointBuy = 700;//   Îòñòóï öåíû îò ÕÀÉ
extern int     _pointSell = 700;//   Îòñòóï öåíû îò ËÎÉ
extern bool    CheckTrade = true; //Íå ñòàâèòü Stop îðäåð ïðè óæå îòêðûòîì
extern double _percentProfit=2.2;///// - Ïðîôåöèò 

datetime   BARflag  = 0; //--Äëÿ ïîáàðîâîãî ðåæèìà
int _extType=-1;
double _workLots=0.0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   int    ticketBuy,ticketSell, expiration;
   double point, _price, oldprice;
   double _tpBuy=0.0, _tpSell=0.0, _slBuy=0.0, _slSell=0.0;
   datetime now = Time[0];//--Äëÿ ïîáàðîâîãî ðåæèìà
   if(BARflag >= now) return(0);//--Äëÿ ïîáàðîâîãî ðåæèìà
    BARflag = now;//--Äëÿ ïîáàðîâîãî ðåæèìà
    if(totalO(-1,key)==0) GlobalVariableSet(StringConcatenate("eq_",key),AccountEquity());
   Comment("Êîíòðîëüíîå ýêâèòè ",GlobalVariableGet(StringConcatenate("eq_",key)),"\n",
           "Òåêóùåå ýêâèòè ",AccountEquity(),"\n",  
   "Òåêóùèé ïðîöåíò ðîñòà Ýêâèòè ",100*(AccountEquity()-GlobalVariableGet(StringConcatenate("eq_",key)))/GlobalVariableGet(StringConcatenate("eq_",key))," %");
   _CheckProfit();///// - Ïðîôåöèò
   
//----
  point=MarketInfo(Symbol(),MODE_POINT);
  //----  
   if (lot<MarketInfo(Symbol(),MODE_MINLOT)) lot=MarketInfo(Symbol(),MODE_MINLOT);
   if (lot<MarketInfo(Symbol(),MODE_MINLOT)) lot=MarketInfo(Symbol(),MODE_MINLOT);
   if (iLow(Symbol(),PERIOD_D1,1)>iLow(Symbol(),PERIOD_D1,0))
    if (Low[2]>Low[1] && !_CheckTradeOrder(OP_BUY))
    {
        if(!CheckTrade || (CheckTrade && !_CheckTradeOrder(OP_BUY)))
        {
            if (_extType!=OP_BUYSTOP)
            {
                
                if (_stopLoss_BUY>0)
                {
                    _slBuy=NormalizeDouble(Low[1]-_stopLoss_BUY*Point, Digits);
                    _slSell=NormalizeDouble(Low[1]-_stopLoss_BUY*Point, Digits);  
                }
                if (_takeProfit_BUY>0)
                {
                    _tpBuy=NormalizeDouble(Bid+_takeProfit_BUY*Point, Digits);
                    _tpSell=NormalizeDouble(Bid+_takeProfit_BUY*Point, Digits);   
                }
                _price = Low[1]+_pointBuy*Point;
                oldprice = PriceStopOrder(OP_BUYSTOP);
                if(oldprice == -1 || _price < oldprice) { //Íåò îðäåðà èëè Íîâàÿ öåíà ëó÷øå//
                _CheckOrder(OP_BUYSTOP);
                while(IsTradeContextBusy()) Sleep(1000);
                RefreshRates();
                ticketBuy=OrderSend(Symbol(),OP_BUYSTOP, getlotlast(key),_price,_slippage,_slBuy,_tpBuy,"",key,0,Green);
                } //íåò îðäåðà èëè íîâàÿ öåíà ëó÷øå//
            }
        }
    }
   if (iHigh(Symbol(),PERIOD_D1,1)<iHigh(Symbol(),PERIOD_D1,0))
    if (High[2]<High[1])
        if(!CheckTrade || (CheckTrade && !_CheckTradeOrder(OP_SELL)))
        {
            if (_extType!=OP_SELLSTOP)
            {
                
                if (_stopLoss_SELL>0)
                {
                    _slBuy=NormalizeDouble(High[1]+_stopLoss_SELL*Point, Digits);
                    _slSell=NormalizeDouble(High[1]+_stopLoss_SELL*Point, Digits);  
                }
                if (_takeProfit_SELL>0)
                {
                    _tpBuy=NormalizeDouble(Ask-_takeProfit_SELL*Point, Digits);
                    _tpSell=NormalizeDouble(Ask-_takeProfit_SELL*Point, Digits);   
                }
                _price = High[1]-_pointSell*Point;
                oldprice = PriceStopOrder(OP_SELLSTOP);
                if(oldprice == -1 || _price > oldprice) {  //Íåò îðäåðà èëè Íîâàÿ öåíà ëó÷øå//
                _CheckOrder(OP_SELLSTOP);
                while(IsTradeContextBusy()) Sleep(1000);
                RefreshRates();
                ticketSell=OrderSend(Symbol(),OP_SELLSTOP, getlotlast(key),_price,_slippage,_slSell,_tpSell,"",key,0,Red);
                } //íåò îðäåðà èëè íîâàÿ öåíà ëó÷øå//
            }
        }
//----
   return(0);
  }
//+-------------------------------------------------------------++++
//èùåì ïîñëåäíèé çàêðûòûé îáúåì 
double  getlotlast(int _key)
 {
   double _lot = lot ;  
   for(int i=OrdersHistoryTotal(); i>=0; i--) {
      if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)&&OrderSymbol()==Symbol()) {
         if((OrderMagicNumber()==_key || _key == 0) && OrderType()<=1){
            if(OrderProfit()<0){
               int kol=getLastType(_key)*(-1);
               _lot=((kol-MathMod(kol,2))/2+1)*lot;
               break;
            }
            if(OrderProfit()>=0) break;
         }
      }
   }
   return(_lot); 
}
//êàêîé òèï îðäåðà çàêðûëñÿ ïîñëåäíèé è ñêîëüêî îðäåðîâ â ñåðèè
int getLastType(int _key)
{
 int KolType=0;
 int j=1;       
   for(int i=OrdersHistoryTotal() ; i>=0; i--) {
      if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY ) && OrderSymbol()==Symbol()) {
         if((OrderMagicNumber()==_key || _key == 0) && OrderType()<=1) {
            if(j==1 && OrderProfit()>=0)KolType++;
            if(j==1 && OrderProfit()<0)KolType--;
            if(j!=1 && OrderProfit()>=0 && KolType>0)KolType++;
            if(j!=1 && OrderProfit()>=0 && KolType<0)break;
            if(j!=1 && OrderProfit()<0 && KolType<0)KolType--;
            if(j!=1 && OrderProfit()<0 && KolType>0)break;
            j++;                 
         }
      }
   } 
   return(KolType); 
}
//+-------------------------- Ïðîôåöèò    ---------------------------+
void _CheckProfit(){
   
   if (100*(AccountEquity()-GlobalVariableGet(StringConcatenate("eq_",key)))/GlobalVariableGet(StringConcatenate("eq_",key))>=_percentProfit)
   
   _OrderClose();
   return;
}
//+--------------------------------+
void _OrderClose(){
   int i;
   double _price=0.0;
   _OrderDelete();
   if (OrdersTotal()>0){
      for (i=OrdersTotal()-1; i>=0; i--){
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol()){
            if(OrderMagicNumber() == key || key == 0) {
               RefreshRates();
               if (OrderType()==OP_SELL) _price=Ask;
               if (OrderType()==OP_BUY) _price=Bid;
               OrderClose(OrderTicket(),OrderLots(),_price,5,0);
            }
         }
      }
   }
   return;
}
//+--------------------------------+
void _OrderDelete(){
   int i;
   if (OrdersTotal()>0){
      for (i=OrdersTotal()-1; i>=0; i--){
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol()==Symbol()){
            if(OrderMagicNumber() == key || key == 0) {
               if (OrderType()>1 && OrderType()<6)  {//äîáàâëåííî
                  for(int k = 0;k < 3; k++) if(OrderDelete(OrderTicket())) break;
               }
            }
         }
      }
   }
   return;
}
//------------------------------------------------+
/*Ñ÷èòàåì êîëè÷åñòâî îðäåðîâ
âõîäÿùèå 
int type (if -1 all type)
OP_BUY 0 Ïîêóïêà 
OP_SELL 1 Ïðîäàæà 
OP_BUYLIMIT 2 Îòëîæåííûé îðäåð BUY LIMIT 
OP_SELLLIMIT 3 Îòëîæåííûé îðäåð SELL LIMIT 
OP_BUYSTOP 4 Îòëîæåííûé îðäåð BUY STOP 
OP_SELLSTOP 5 Îòëîæåííûé îðäåð SELL STOP 
int _key MagicNumber

*/
int totalO(int type,int _key)
{
   int TotalNumber = 0;  
   for(int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol() == Symbol()) {
         if(OrderMagicNumber() ==_key || _key == 0) {
            if (OrderType()==type||type==-1) TotalNumber++;
         }
      }
   }
   return(TotalNumber); 
}
//+------------------------------------------------------------------+
int _CheckOrder(int _checkType=0)
{
   int i;
   if (OrdersTotal()>0){
      for (i=0; i<=OrdersTotal()-1; i++){
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol()){
            if(OrderMagicNumber()==key || key == 0) {
               if (OrderType()==_checkType)  {
                  for(int k = 0;k < 3; k++) if(OrderDelete(OrderTicket())) break;
               }
            }
         }
      }
   }
   return(0);
}
//+------------------------------------------------------------------+
bool _CheckTradeOrder(int _checkType=0){
   int i;
   if (OrdersTotal()>0){
      for (i=0; i<OrdersTotal(); i++){
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol()){
            if(OrderMagicNumber()==key || key == 0) {
               if (OrderType()==_checkType) return(true);
            }
         }
      }
   }
   return(false);
}
//+------------------------------------------------------------------+
double PriceStopOrder(int _checkType)
{
double price;
   int i;
   price = -1;
   if (OrdersTotal()>0){
      for (i=0; i<OrdersTotal(); i++){
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol()){
            if (OrderType()==_checkType && (OrderMagicNumber()==key || key == 0))
                if(price == -1) { price = OrderOpenPrice( ); continue; }
                if(OrderType()==OP_BUYSTOP && price < OrderOpenPrice()) price = OrderOpenPrice( );
                if(OrderType()==OP_SELLSTOP && price > OrderOpenPrice()) price = OrderOpenPrice( );
         }
      }
   }
   return(price);
}
//+------------------------------------------------------------------+++

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