//+------------------------------------------------------------------+
//|                                             OzFx trades long.mq4 |
//|                                                    Steve Hopwood |
//| www.hopwood3.freeserve.co.uk                                     |
//+------------------------------------------------------------------+
#property copyright "Steve Hopwood"
#property link      ""
#property show_inputs
#include <WinUser32.mqh>
#include <stdlib.mqh>

extern double LotSize=0.01;
extern int    StopLoss=100;
extern bool   OpenTrade1=true;
extern int    TakeProfit1=50;
extern bool   OpenTrade2=true;
extern int    TakeProfit2=100;
extern bool   OpenTrade3=true;
extern int    TakeProfit3=150;
extern bool   OpenTrade4=true;
extern int    TakeProfit4=200;
extern bool   OpenTrade5=true;
extern int    TakeProfit5=0;
extern bool   AllowForSpread=true;
extern int    MyMagicNumber=749236;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
  
  // Include spread
   double BrokerSpread=MarketInfo(Symbol(),MODE_SPREAD);
   double TP1=NormalizeDouble(Ask+(TakeProfit1*Point), Digits); 
   double TP2=NormalizeDouble(Ask+(TakeProfit2*Point), Digits); 
   double TP3=NormalizeDouble(Ask+(TakeProfit3*Point), Digits); 
   double TP4=NormalizeDouble(Ask+(TakeProfit4*Point), Digits); 
   double TP5=NormalizeDouble(Ask+(TakeProfit5*Point), Digits); 
   double SL=NormalizeDouble(Ask-(StopLoss*Point), Digits);
   string TradeComment="OzFx ";
   int    iOpenOrders=0;
   int    iChar;
    
   // Set up tp's for the 5 trades
   //Trade 1
   if (AllowForSpread==true) TP1=NormalizeDouble(TP1-(BrokerSpread*Point),Digits);
   
   //Trade 2
   if (AllowForSpread==true) TP2=NormalizeDouble(TP2-(BrokerSpread*Point),Digits);
   
   //Trade 3
   if (AllowForSpread==true) TP3=NormalizeDouble(TP3-(BrokerSpread*Point),Digits);
   
   //Trade 4
   if (AllowForSpread==true) TP4=NormalizeDouble(TP4-(BrokerSpread*Point),Digits);
   
   //Trade 5, but allow for no tp
   if (AllowForSpread==true) TP5=NormalizeDouble(TP5-(BrokerSpread*Point),Digits);
   if (TakeProfit5==0) TP5=0;
   
   //Stop loss
   if (AllowForSpread==true) SL=NormalizeDouble(SL-(BrokerSpread*Point),Digits);
   
   
   // Check for orders already open. This allows the user to reuse the script to replace
   // missing orders, without having to set any of the OpenTradex booleans to false.
   bool TradeAlreadyOpen1=false, TradeAlreadyOpen2=false, TradeAlreadyOpen3=false, TradeAlreadyOpen4=false, TradeAlreadyOpen5=false;
      
   // Cycle through the orders list to find orders already open, and set TradeAlreadyOpenx to true
   if (OrdersTotal()>0)
   {
      for (int k = 0; k < OrdersTotal(); k++)
         {
         OrderSelect(k, SELECT_BY_POS);
            if (OrderSymbol() == Symbol())
            {
               if (OrderMagicNumber() == MyMagicNumber)
               {
               iOpenOrders ++;
               // Extract and convert the trade number to a string, to set booleans.
               iChar=StringGetChar(OrderComment(), StringLen(OrderComment())-1);
               string sDigit=CharToStr(iChar);
               {
                  if (sDigit=="1") TradeAlreadyOpen1=true;
                  if (sDigit=="2") TradeAlreadyOpen2=true;
                  if (sDigit=="3") TradeAlreadyOpen3=true;
                  if (sDigit=="4") TradeAlreadyOpen4=true;
                  if (sDigit=="5") TradeAlreadyOpen5=true;                 
               
               }
               
               }
            }
         }
   
   }
    
   if (OpenTrade1==true && TradeAlreadyOpen1==false)
   {
   TradeComment="OzFx " + Symbol() + " buy, trade1";
   int ticket=OrderSend(Symbol(),OP_BUY,LotSize,Ask,0,SL,TP1,TradeComment,MyMagicNumber,0,Green);
   if(ticket<1)
     {
      int error=GetLastError();
      Print("Error = ",ErrorDescription(error));
      Alert(TradeComment,  " error - ", ErrorDescription(error));
     }

   }
   
   if (OpenTrade2==true && TradeAlreadyOpen2==false)
   {
   TradeComment="OzFx " + Symbol() + " buy, trade2";
   ticket=OrderSend(Symbol(),OP_BUY,LotSize,Ask,0,SL,TP2,TradeComment,MyMagicNumber,0,Green);
   if(ticket<1)
     {
      error=GetLastError();
      Print("Error = ",ErrorDescription(error));
      Alert(TradeComment,  " error - ", ErrorDescription(error));
     }
   }
   
   if (OpenTrade3==true && TradeAlreadyOpen3==false)
   {
   TradeComment="OzFx " + Symbol() + " buy, trade3";
   ticket=OrderSend(Symbol(),OP_BUY,LotSize,Ask,0,SL,TP3,TradeComment,MyMagicNumber,0,Green);
   if(ticket<1)
     {
      error=GetLastError();
      Print("Error = ",ErrorDescription(error));
      Alert(TradeComment,  " error - ", ErrorDescription(error));
     }
   }
   
   if (OpenTrade4==true && TradeAlreadyOpen4==false)
   {
   TradeComment="OzFx " + Symbol() + " buy, trade4";
   ticket=OrderSend(Symbol(),OP_BUY,LotSize,Ask,0,SL,TP4,TradeComment,MyMagicNumber,0,Green);
   if(ticket<1)
     {
      error=GetLastError();
      Print("Error = ",ErrorDescription(error));
      Alert(TradeComment,  " error - ", ErrorDescription(error));
     }
   }
   
   if (OpenTrade5==true && TradeAlreadyOpen5==false)
   {
   TradeComment="OzFx " + Symbol() + " buy, trade5";
   ticket=OrderSend(Symbol(),OP_BUY,LotSize,Ask,0,SL,TP5,TradeComment,MyMagicNumber,0,Green);
   if(ticket<1)
     {
      error=GetLastError();
      Print("Error = ",ErrorDescription(error));
      Alert(TradeComment,  " error - ", ErrorDescription(error));
     }
   }
   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

