//+------------------------------------------------------------------+
//|                        Peak Trader V1.3                          |
//|                     System developed by JWentro                  |
//|                                                                  |
//|  In no event will author be liable for any damages whatsoever.   |
//|                      Use at your own risk.                       |
//|                                                                  |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+
#define SIGNAL_NONE 0
#define SIGNAL_BUY   1
#define SIGNAL_SELL  2

#property copyright "Peak Trader V1.0"
#property link      "http://www.forexfactory.com"
//+------------------------------------------------------------------+
extern bool   EachTickMode = True;
extern double Distance=15.00;
extern double Lotslvl1 = 0.1;
extern double Lotslvl2 = 0.3;
extern double Lotslvl3 = 0.3;
extern double my_profit=500.00;
extern double my_stop=150.00;
extern double interval=2;  // minutes between trades
extern bool   trade_allowed=true;
//+------------------------------------------------------------------+
double minutes = 0;
int BarCount;
int Current;
bool TickCheck = False;
int order1,order2,order3,order4,order5,order6,SELL,BUY;
int ticket1,ticket2,ticket3,ticket4,ticket5,ticket6;
double real_price1,real_price2,balance;  
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+  
int init()
{
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;

order1=0;
order2=0;
order3=0;
order4=0;
order5=0;
order6=0;

ticket1=0;
ticket2=0;
ticket3=0;
ticket4=0;
ticket5=0;
ticket6=0;

real_price1=0;
real_price2=0;

balance=0;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
if(balance==0)
balance=AccountBalance();
int Order = SIGNAL_NONE;
   int Total, Ticket;
   double StopLossLevel, TakeProfitLevel;
   double interval2 = interval*60;
   if (TimeCurrent()<minutes) trade_allowed=false;
   if (TimeCurrent()>minutes) trade_allowed=true;



   if (EachTickMode && Bars != BarCount) TickCheck = False;
   Total = OrdersTotal();
   Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
int total=OrdersTotal();
int pos;  
double profit1=AccountEquity()- balance;
   
bool work=true;
if((profit1<my_profit)&&(profit1>-my_stop))
work=true;
else
work=false;   
//+------------------------------------------------------------------+
                                               
double Var1 = iClose(NULL, 0, Current + 2);
double Var2 = iClose(NULL, 0, Current + 0);
double Var3 = iLow(NULL, 0, Current + 0);
double Var4 = iHigh(NULL, 0, Current + 0);

double Buy1_1 =  Var1  -  Var2 ;
double Buy1_2 = 0.0015;
double Buy2_1 =  Var2 + 0.0002;
double Buy2_2 = Ask;
double Buy3_1 =  Var2 ;
double Buy3_2 =  Var4 ;

double Sell1_1 =  Var2  -  Var1 ;
double Sell1_2 = 0.0015;
double Sell2_1 =  Var2 - 0.0002;
double Sell2_2 = Bid;
double Sell3_1 =  Var2 ;
double Sell3_2 =  Var3 ;
                                                                                                       
//+------------------------------------------------------------------+      
    

double price3=real_price1+Distance*2*Point;    //+2
double price5=real_price1+Distance*3*Point;    //+3

                 
double price4=real_price2-Distance*2*Point;    //-2
double price6=real_price2-Distance*3*Point;    //-3

   
double profit=0;//             price1+300*Point;
double stop=0;//               price1-300*Point;

//+------------------------------------------------------------------+
//| Signal Begin(Entry)                                              |
//+------------------------------------------------------------------+

if (Buy1_1 > Buy1_2 && Buy2_1 >= Buy2_2 && Buy3_1 != Buy3_2) Order = SIGNAL_BUY;

if (Sell1_1 > Sell1_2 && Sell2_1 <= Sell2_2 && Sell3_1 != Sell3_2) Order = SIGNAL_SELL;
        
//+------------------------------------------------------------------+

   if(Order == SIGNAL_SELL && work==true && order1==0)
   {
   ticket1 = OrderSend(Symbol(),OP_SELL,Lotslvl1,Bid,3,0,0,NULL,0,0,CLR_NONE );
   if(ticket1>0)
   {
   Print("ticket1=",ticket1);
     if(OrderSelect(ticket1,SELECT_BY_TICKET)==true)
       {
       real_price1=OrderOpenPrice();
       Print("real_price1=",real_price1);
       order1=1;
       Sleep(5000);
       }
   }
   else
   {
   Print("ticket1<0",GetLastError());
   return(0);
   }
   }
//------------------------------------------------------------------------------------   
   RefreshRates();
//------------------------------------------------------------------------------------   
   if(Order == SIGNAL_BUY && work==true && order2==0)
   {
   ticket2 = OrderSend(Symbol(),OP_BUY,Lotslvl1,Ask,3,0,0,NULL,0,0,CLR_NONE );
   if(ticket2>0)
   {
   Print("ticket2=",ticket2);
     if(OrderSelect(ticket2,SELECT_BY_TICKET)==true)
       {
       real_price2=OrderOpenPrice();
       Print("real_price2=",real_price2);
       order2=1; 
       Sleep(5000);
       }
   }
   else
   {
   Print("ticket2<0",GetLastError());
   return(0);
   }
   }
//------------------------------------------------------------------------------------   
   RefreshRates();
//------------------------------------------------------------------------------------   
   if(Order == SIGNAL_SELL && work==true && order3==0)
   {
   ticket3 = OrderSend(Symbol(),OP_SELLLIMIT,Lotslvl2,price3,3,0,0,NULL,0,0,CLR_NONE );
   if(ticket3>0)
   {
   Print("ticket3=",ticket3);
     if(OrderSelect(ticket3,SELECT_BY_TICKET)==true)
       {
       order3=1; 
       Sleep(5000);
       }
   }
   else
   {
   Print("ticket3<0",GetLastError());
   return(0);
   }
   }
//------------------------------------------------------------------------------------   
   RefreshRates();
//------------------------------------------------------------------------------------   
   if(Order == SIGNAL_BUY && work==true && order4==0)
   {
   ticket4 = OrderSend(Symbol(),OP_BUYLIMIT,Lotslvl2,price4,3,0,0,NULL,0,0,CLR_NONE );
   if(ticket4>0)
   {
   Print("ticket4=",ticket4);
     if(OrderSelect(ticket4,SELECT_BY_TICKET)==true)
       {
       order4=1; 
       Sleep(5000);
              }
   }
   else
   {
   Print("ticket4<0",GetLastError());
   return(0);
   }
   }   
//-----------------------------------------------------------------------------------   
   RefreshRates();
//-----------------------------------------------------------------------------------   
  if(Order == SIGNAL_SELL && work==true && order5==0)
   {
   ticket5 = OrderSend(Symbol(),OP_SELLLIMIT,Lotslvl3,price5,3,0,0,NULL,0,0,CLR_NONE );
   if(ticket5>0)
   {
   Print("ticket5=",ticket5);
     if(OrderSelect(ticket5,SELECT_BY_TICKET)==true)
       {
       order5=1;
       Sleep(5000);
       }
   }
   else
   {
   Print("ticket5<0",GetLastError());
   return(0);
   }
   }
//------------------------------------------------------------------------------------   
   RefreshRates();
//------------------------------------------------------------------------------------   
   if(Order == SIGNAL_BUY && work==true && order6==0)
   {
   ticket6 = OrderSend(Symbol(),OP_BUYLIMIT,Lotslvl3,price6,3,0,0,NULL,0,0,CLR_NONE );
   if(ticket6>0)
   {
   Print("ticket6=",ticket6);
     if(OrderSelect(ticket6,SELECT_BY_TICKET)==true)
       {
       order6=1; 
       Sleep(5000);
       }
   }
   else
   {
   Print("ticket6<0",GetLastError());
   return(0);
   }
   }

//+------------------------------------------------------------------+
//|WORK==FALSE                                                       |
//+------------------------------------------------------------------+  
   
   if(work==false && total!=0)// || SELL==0 || BUY==0)
     { 
    for ( pos = 0; pos<total; pos++ )
     {
       if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
         {
         //--
          if((OrderType()==OP_SELLLIMIT )||(OrderType()==OP_BUYLIMIT))
          {
          if (OrderDelete(OrderTicket()))
             Print("OrderDel");
           else
             Print("Error ", GetLastError(), " Error");
          }
          //-- 
         double price;
         if (OrderType()==OP_SELL) 
             price = MarketInfo(OrderSymbol(), MODE_ASK);
         else
             price = MarketInfo(OrderSymbol(), MODE_BID);     
         if (OrderClose(OrderTicket(), OrderLots(), price, 3)==true)
          Print("OrderClo˙", OrderTicket());
          else
          Print("Error ", GetLastError()," Error ", OrderTicket());         
          }
       else
           Print("Error ", GetLastError(), " Error ", pos);
           } 
   }
   if(work==false && total==0)
       {  
//------------------------------------------------------------------------------------                
order1=0;
order2=0;
order3=0;
order4=0;
order5=0;
order6=0;
 
ticket1=0;
ticket2=0;
ticket3=0;
ticket4=0;
ticket5=0;
ticket6=0;

real_price1=0;
real_price2=0; 
balance=0;

}

  Print("total=",total,", work=",work);
  Print("balance=",balance,", profit1=",profit1);   
//----
  if (!EachTickMode) BarCount = Bars;
  return(0);
}

   