//+------------------------------------------------------------------+
//|                                                   TradeHedge.mq4 |
//|                                      Copyright © 2008, Trader101 |
//|                                          trader101@optonline.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Trader101"
#property link      "trader101@optonline.net"

// Mods by Ron Thompson (ForexMT4.com)


// allow script to accept inputs from user
#property show_inputs

//user input
extern double    Lots = 0.1;
extern int       Slippage = 3;
extern bool      isIBFXmini=false;
extern string TradeComment="TradeHedgeIASetup";
extern int MagicNumber=200809241653;
// globals 
string mySymbol;
string postfix;

// trade management
double ask;
double bid;





// used for verbose error logging
#include <stdlib.mqh>


//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int init()
  {
   if(isIBFXmini) postfix="m";
   mySymbol="EURJPY"+postfix;  OpenSell();
   mySymbol="GBPUSD"+postfix;  OpenSell();
   mySymbol="EURGBP"+postfix;  OpenSell();
   mySymbol="GBPJPY"+postfix;  OpenSell();
   mySymbol="NZDUSD"+postfix;  OpenSell();
   mySymbol="USDCHF"+postfix;  OpenSell();
   mySymbol="AUDJPY"+postfix;  OpenSell();

   mySymbol="USDJPY"+postfix;  OpenBuy();
   mySymbol="EURUSD"+postfix;  OpenBuy();
   mySymbol="EURCHF"+postfix;  OpenBuy();
   mySymbol="NZDJPY"+postfix;  OpenBuy();
   mySymbol="GBPCHF"+postfix;  OpenBuy();
   mySymbol="CHFJPY"+postfix;  OpenBuy();
   mySymbol="AUDUSD"+postfix;  OpenBuy();
  }


int deinit()
  {
  }


int start()
  {
  }



//ENTRY LONG (buy, Ask) 
void OpenBuy()
     {
      int      gle=0;
      int      ticket=0;
      
      double SL=0;
      double TP=0;
      int loopcount;

      loopcount=0;
      while(true)          
        {
         bid=MarketInfo(mySymbol,MODE_BID);
         ask=MarketInfo(mySymbol,MODE_ASK);

         // place order - NO TP OR SL
         ticket=OrderSend(mySymbol,OP_BUY,Lots,ask,Slippage,0,0,TradeComment,MagicNumber,White);
         gle=GetLastError();
         if(gle==0)
           {
            Print("BUY PLACED Ticket="+ticket+" Ask="+ask+" Lots="+Lots);
            break;
           }
          else 
           {
            Print("-----ERROR-----  Placing BUY order: Lots="+Lots+" SL="+SL+" TP="+TP+" Bid="+bid+" Ask="+ask+" ticket="+ticket+" Err="+gle+" "+ErrorDescription(gle)); 
            
            RefreshRates();
            Sleep(500);

            // give up after 10 tries (~5 seconds)
            loopcount++;
            if(loopcount>10)
              {
               Print("-----ERROR-----  Giving up on placing BUY order"); 
               return(gle);
              }
           }

        }//while - place order 

     }//BUYme


//ENTRY SHORT (sell, Bid)
void OpenSell()
     {
      int      gle=0;
      int      ticket=0;
      
      double SL=0;
      double TP=0;
      int loopcount;

      loopcount=0;
      while(true)
        {
         bid=MarketInfo(mySymbol,MODE_BID);
         ask=MarketInfo(mySymbol,MODE_ASK);

         ticket=OrderSend(mySymbol,OP_SELL,Lots,bid,Slippage,0,0,TradeComment,MagicNumber,Red);
         gle=GetLastError();
         if(gle==0)
           {
            Print("SELL PLACED Ticket="+ticket+" Bid="+bid+" Lots="+Lots);
            break;
           }
            else 
           {
            Print("-----ERROR-----  placing SELL order: Lots="+Lots+" SL="+SL+" TP="+TP+" Bid="+bid+" Ask="+ask+" ticket="+ticket+" Err="+gle+" "+ErrorDescription(gle)); 
                            
            RefreshRates();
            Sleep(500);

            loopcount++;
            if(loopcount>10)
              {
               Print("-----ERROR-----  Giving up on placing SELL order"); 
               return(gle);
              }
           }

        }//while

     }//SELLme



