HlopMaster 2.1

Author: FORTRADER.RU, ����, ftyuriy@gmail.com, modified by Evgeniy Trofimov
Profit factor:
0.68
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself
1 Views
0 Downloads
0 Favorites
HlopMaster 2.1
#property copyright "FORTRADER.RU, Þðèé, ftyuriy@gmail.com, modified by Evgeniy Trofimov"
#property link      "http://FORTRADER.RU, Price"
//+------------------------------------------------------------------+
extern int pips=250;
extern int profitpips=250;
extern double Lots=0.01;
extern double LimitLot=20.00;
extern int time=0; //1 - âêëþ÷åíî, 0 - âûêëþ÷åíî.
extern int starttime = 7; 
extern int stoptime = 17; 
//+------------------------------------------------------------------+
static datetime LastTime;
static int Slippage=30;
//+------------------------------------------------------------------+
int timecontrol() {
   if ( ( (Hour()>=0 && Hour()<=stoptime-1) ||  (Hour()>=starttime && Hour()<=23)) && starttime>stoptime) {
      return(1);
   }  
   if ( (Hour()>=starttime && Hour()<=stoptime-1) && starttime<stoptime) {
      return(1);
   }  
   if(time==0){ return(1);}
   return(0);
}//timecontrol()
//+------------------------------------------------------------------+
int SL=0;
int TP=0;
int err;
int start() {
   if(LastTime==Time[0]) return(0);
   LastTime=Time[0];   
   if(timecontrol()==1) {
      if(!OrdersExist()) {
         err=OpenNewOrders();
      }else{
         TrailStopOrders();
      }
      if(CountPos(0)==0 && CountPos(1)==0 && ChStopPosLimitSumm()<2){
         _DeleteOrder();
      }
      if(ChStopPosLimitSumm()<1){
         if(GetMaxLot()*2>LimitLot){
            _DeleteOrder();
            CloseAllPozitions();
         } else {
            DopOrder(GetMaxLot()*2);
         }
      }
      err=CloseManager();
   }
   return(0);
}//start()
//+------------------------------------------------------------------+
double op,sl,tp;
int OpenNewOrders(){
   int err;
   op=Ask-pips*Point;if(SL>0){sl=Ask;}else{sl=0;}if(TP>0){tp=op-TP*Point;}else{tp=0;}
   err=OrderSend(Symbol(),OP_SELLSTOP,Lots,NormalizeDouble(op,Digits),3,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),"",0,0,Red);
   if(err<0){
      Print("OrderSend()-  Îøèáêà OP_SELLSTOP.  op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);
      LastTime=Time[1];
   }
   op=Bid+pips*Point;if(SL>0){sl=Bid;}else{sl=0;}if(TP>0){tp=op+TP*Point;}else{tp=0;}
   err=OrderSend(Symbol(),OP_BUYSTOP,Lots,NormalizeDouble(op,Digits),3,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),"",0,0,Red);
   if(err<0){
      Print("OrderSend()-  Îøèáêà OP_BUYSTOP.  op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);
      LastTime=Time[1];
   }
   return(err);
}//OpenNewOrders()
//+------------------------------------------------------------------+
int TrailStopOrders() {
   int i;bool err;
   for(i=1; i<=OrdersTotal(); i++) {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) {  
         if( OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol() && (OrderOpenPrice()-Bid)>pips*Point) {
            err=OrderModify(OrderTicket(),Bid+pips*Point,OrderStopLoss(),OrderTakeProfit(),0,Green);
            if(err==false){
               LastTime=Time[1];
               return(-1);
            }
         }//if(OrderType()==OP_BUYSTOP
      }//if(OrderSelect(i-1,SEL
      if(OrderSelect(i-1,SELECT_BY_POS)==true) {
         if(OrderType()==OP_SELLSTOP && OrderSymbol()==Symbol() && (Ask-OrderOpenPrice())>pips*Point) {
            err=OrderModify(OrderTicket(),Ask-pips*Point,OrderStopLoss(),OrderTakeProfit(),0,Green);
            if(err==false){
               LastTime=Time[1];
               return(-1);
            }
         }//if(OrderType()==OP_SELLSTOP 
      }//if(OrderSelect(i-1,
   }// for( i=1; i<=O
   return(0);
}//TrailStopOrders()
//+------------------------------------------------------------------+
int CountPos(int type) {
   int i,b,s;
   for( i=1; i<=OrdersTotal(); i++) {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) {                                   
         if(OrderType()==OP_BUY && OrderSymbol()==Symbol()){b=b+1;}
         if(OrderType()==OP_SELL && OrderSymbol()==Symbol()){s=s+1;}
      }
   }   
   if(type==0){return(s);}
   if(type==1){return(b);}
}//CountPos()
//+------------------------------------------------------------------+
int ChStopPosLimitSumm() {
   int i,z;
   for( i=1; i<=OrdersTotal(); i++) {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) {                                   
         if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP ){z=z+1;}
      }
   }   
   return(z);
}//ChStopPosLimitSumm()
//+------------------------------------------------------------------+
int _DeleteOrder() {
   //Óäàëåíèå âñåõ îòëîæåííûõ îðäåðîâ
   for(int i=1; i<=OrdersTotal(); i++) {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) {
         if(OrderType()>3 && OrderSymbol()==Symbol()) {
            OrderDelete(OrderTicket()); 
         }//if
      }//if
   }//Next i
   return(0);
}//_DeleteOrder()
//+------------------------------------------------------------------+
int CloseManager() {
   //Çàêðûòèå âñåõ ïîçèöèé è îòëîæåííûõ îðäåðîâ,
   //åñëè â ñäåëêå ñ ìàêñèìàëüíûì ëîòîì âåëè÷èíà
   //ïðîôèòíûõ ïóíêòîâ äîñòèãëà óêàçàííîé ãðàíèöû
   int err;
   double maxlot=GetMaxLot();
   for(int i=1; i<=OrdersTotal(); i++) {
      if(OrderSelect(i-1,SELECT_BY_POS)) {
         if(OrderSymbol()==Symbol()) {
            if(OrderLots()==maxlot) {
               if(OrderType()==OP_SELL && ((OrderOpenPrice()-Ask)>profitpips*Point)) {
                  _DeleteOrder();
                  CloseAllPozitions();
               }//if
               if(OrderType()==OP_BUY && ((Bid-OrderOpenPrice())>profitpips*Point)) {
                  _DeleteOrder();
                  CloseAllPozitions();
               }//if
            }//if(OrderLots()==maxlot)
         }//if(OrderSymbol()==Symbol())
      }//if
   }//Next i
   return(err);
}//CloseManager()
//+------------------------------------------------------------------+
double GetMaxLot() {
   //Ôóíêöèÿ âîçâðàùàåò ðàçìåð ìàêñèìàëüíîãî ëîòà,
   //íàéäåííîãî ñðåäè îòêðûòûõ ïîçèöèé
   int i; double maxlot;
   for(i=1; i<=OrdersTotal(); i++) {
      if(OrderSelect(i-1,SELECT_BY_POS)) {                                   
         if(OrderType()<2 && OrderSymbol()==Symbol()) {
            if(maxlot<OrderLots()) {
               maxlot=OrderLots();
            }
         }
      }
   }   
   return(maxlot);
}//GetMaxLot()
//+------------------------------------------------------------------+
int GetLastTypePos() {
//Ôóíêöèÿ âîçâðàùàåò òèï ïîñëåäíåé îòêðûòîé ïîçèöèè
   int i; datetime dt; int type;
   for( i=1; i<=OrdersTotal(); i++) {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) {                                   
         if(OrderType()<2 && OrderSymbol()==Symbol()) {
            if(dt<OrderOpenTime()){
               dt=OrderOpenTime();
               type=OrderType();
            }
         }
      }//
   }//Next i
   return(type);
}//GetLastTypePos()
//+------------------------------------------------------------------+
int DopOrder(double Lots) {
   //Ôóíêöèÿ âûñòàâëÿåò îòëîæåííûé îðäåð, íà ïðîäàæó, 
   //åñëè ïîñëåäíÿÿ îòêðûòàÿ ñäåëêà - ïîêóïàåò
   //è íàîáîðîò
   int type=GetLastTypePos();
   if(type==OP_SELL){
      op=Bid+pips*Point;
      if(SL>0){sl=Bid;}         else {sl=0;}
      if(TP>0){tp=op+TP*Point;} else {tp=0;}
      err=OrderSend(Symbol(),OP_BUYSTOP,Lots,NormalizeDouble(op,Digits),3,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),"FORTRADER.RU",0,0,Red);
      if(err<0){
         LastTime=Time[1];
         Print("OrderSend()-  Îøèáêà OP_BUYSTOP.  op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());
         return(-1);
      }
   } else if(type==OP_BUY) {
      op=Ask-pips*Point;
      if(SL>0){sl=Ask;}         else {sl=0;}
      if(TP>0){tp=op-TP*Point;} else {tp=0;}
      err=OrderSend(Symbol(),OP_SELLSTOP,Lots,NormalizeDouble(op,Digits),3,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),"FORTRADER.RU",0,0,Red);
      if(err<0){
         LastTime=Time[1];
         Print("OrderSend()-  Îøèáêà OP_SELLSTOP.  op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());
         return(-1);
      }
   }
   return(0);
}//DopOrder()
//+------------------------------------------------------------------+
int CloseAllPozitions() {
   double PriceClose;
   int  total = OrdersTotal();
   for (int i = total-1; i >= 0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==Symbol()) {
         if(OrderType()==OP_BUY) {
            PriceClose=Bid;
         } else if(OrderType()==OP_SELL) {
            PriceClose=Ask;
         }
         if(!OrderClose(OrderTicket(),OrderLots(),PriceClose,Slippage)) {
            Print("Ñòàâêà ",OrderTicket()," íå çàêðûâàåòñÿ ïî ïðè÷èíå îøèáêè ¹ ",GetLastError());
            LastTime=Time[1];
         }
      } // Åñëè ñâîé
   } // Next i
   return(0);
}//CloseAllPozitions()
//+------------------------------------------------------------------+
bool OrdersExist() {
   //Ôóíêöèÿ âîçâðàùàåò true, åñëè êîëè÷åñòâî îðäåðîâ íà òåêóùåì èíñòðóìåíòå > 0
   int total = OrdersTotal();
   for (int i = 0; i < total; i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Symbol()) {
         return(true);
      }
   }
   return(false);
}//OpenLots()
//+------------------------------------------------------------------+

Profitability Reports

NZD/USD Oct 2024 - Jan 2025
0.54
Total Trades 102
Won Trades 59
Lost trades 43
Win Rate 57.84 %
Expected payoff -10.48
Gross Profit 1250.72
Gross Loss -2319.70
Total Net Profit -1068.98
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
0.29
Total Trades 166
Won Trades 89
Lost trades 77
Win Rate 53.61 %
Expected payoff -29.57
Gross Profit 1970.38
Gross Loss -6879.28
Total Net Profit -4908.90
-100%
-50%
0%
50%
100%
AUD/USD Oct 2024 - Jan 2025
1.22
Total Trades 115
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff 2.20
Gross Profit 1389.25
Gross Loss -1136.03
Total Net Profit 253.22
-100%
-50%
0%
50%
100%

Comments