Buy Percent





//+------------------------------------------------------------------+
//|Buy Percent.mq4                                                   |
//|Îòêðûâàåò ïîçèöèþ BUY ðàçìåðîì â ïðîöåíò îò ìàêñèìàëüíî âîçìîæíîé |
//+------------------------------------------------------------------+
#property copyright "mandorr@gmail.com"
#property show_inputs
//----
#include <WinUser32.mqh>
extern int StopLoss=0;
extern int TakeProfit=11;
extern int Percent=100;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void start()
  {
   if (!IsCondition()) return;
   double lots=AccountLots();
   if (lots<=0)
     {
      string title="Îøèáêà";
      string msg="Íåò ñâîáîäíûõ ñðåäñòâ     ";
      MessageBox(msg,title,MB_OK|MB_ICONERROR);
      return;
     }
   int slippage=2;
   double loss=0 ;if (StopLoss  >0) loss  =Ask-StopLoss  *Point;
   double profit=0; if (TakeProfit>0) profit=Ask+TakeProfit*Point;
   OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,loss,profit,NULL,0,0,CLR_NONE);
   ShowError();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double AccountLots()
  {
   double freemargin=AccountFreeMargin(); if (freemargin<=0) return(0);
   double lotmargin=0;
   string symbol=Symbol();
   string market=MarketType(symbol);
   if (market=="Forex" )lotmargin=LotMarginForex  (symbol);
   if (market=="Metalls") lotmargin=LotMarginCFD    (symbol);
   if (market=="CFD"   )lotmargin=LotMarginCFD    (symbol);
   if (market=="Futures") lotmargin=LotMarginFutures(symbol);
   if (market=="") return(0);
   double lots=0; if (lotmargin>0) lots=0.01*Percent*freemargin/lotmargin;
   double minlot=MarketInfo(symbol,MODE_MINLOT);
   int count=0; if (minlot>0) count=lots/minlot;
   lots=minlot*count;
   return(lots);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string MarketType (string symbol)
  {
   int len=StringLen(symbol);
   string base;
   if (StringSubstr(symbol,0,1)=="_") return("Indexes");
   if (StringSubstr(symbol,0,1)=="#")
     {
      base=StringSubstr(symbol,len-1,1);
      if (base=="0") return("Futures");
      if (base=="1") return("Futures");
      if (base=="2") return("Futures");
      if (base=="3") return("Futures");
      if (base=="4") return("Futures");
      if (base=="5") return("Futures");
      if (base=="6") return("Futures");
      if (base=="7") return("Futures");
      if (base=="8") return("Futures");
      if (base=="9") return("Futures");
      return("CFD");
     }
   else
     {
      if (symbol=="GOLD" )return("Metalls");
      if (symbol=="SILVER") return("Metalls");
      if (len==6)
        {
         base=StringSubstr(symbol,0,3);
         if (base=="AUD") return("Forex");
         if (base=="CAD") return("Forex");
         if (base=="CHF") return("Forex");
         if (base=="EUR") return("Forex");
         if (base=="GBP") return("Forex");
         if (base=="LFX") return("Forex");
         if (base=="NZD") return("Forex");
         if (base=="SGD") return("Forex");
         if (base=="USD") return("Forex");
        }
     }
   return("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LotMarginForex (string symbol)
  {
   string base=StringSubstr(symbol,0,3);
   string ñurrency=AccountCurrency();
   double rate_ñurrency=1; if (base!=ñurrency) rate_ñurrency=MarketInfo(base+ñurrency,MODE_ASK);
   double lotsize=MarketInfo(symbol,MODE_LOTSIZE);
   double leverage=AccountLeverage();
   double result=0; if (leverage>0) result=lotsize/leverage;
   result=rate_ñurrency*result;
   return(result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LotMarginCFD (string symbol)
  {
   string ñurrency=AccountCurrency();
   double rate_ñurrency=1; if (ñurrency!="USD") rate_ñurrency=MarketInfo(ñurrency+"USD",MODE_ASK);
   double ask_symbol=MarketInfo(symbol,MODE_ASK);
   double lotsize=MarketInfo(symbol,MODE_LOTSIZE);
   double leverage=10;
   double result=0; if (leverage>0) result=lotsize*ask_symbol/leverage;
   result=rate_ñurrency*result;
   return(result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LotMarginFutures (string symbol)
  {
   string ñurrency=AccountCurrency();
   double rate_ñurrency=1; if (ñurrency!="USD") rate_ñurrency=MarketInfo(ñurrency+"USD",MODE_ASK);
   int len=StringLen(symbol);
   double result=0;
   string base=StringSubstr(symbol,0,len-2);
   if (base=="#ENQ")result=3750;
   if (base=="#EP" )result=3938;
   if (base=="#SLV")result=5063;
   if (base=="#GOLD") result=2363;
   if (base=="#CL" )result=4725;
   if (base=="#NG" )result=8100;
   if (base=="#W"  )result= 608;
   if (base=="#S"  )result=1148;
   if (base=="#C"  )result= 473;
   result=rate_ñurrency*result;
   return(result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsCondition()
  {
   bool result=true;
   string field="     ";
   string msg;
   string title="Îøèáêà"; if (AccountNumber()>0)title=AccountNumber()+": "+title;
   if (!IsConnected())
     {
      msg=msg+"Ñâÿçü ñ ñåðâåðîì îòñóòñòâóåò"+field;
      result=false;
     }
   if (!IsTradeAllowed())
     {
      if (!result) msg=msg+"\n";
      msg=msg+"Òîðãîâëÿ çàïðåùåíà"+field;
      result=false;
     }
   if (!result) MessageBox(msg,title,MB_OK|MB_ICONERROR);
   return(result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ShowError()
  {
   string description;
   int err=GetLastError();
   switch(err)
     {
      case   0: return;
      case   1: description="Íåò îøèáêè, íî ðåçóëüòàò íåèçâåñòåí"; break;
      case   2: description="Îáùàÿ îøèáêà"; break;
      case   3: description="Íåïðàâèëüíûå ïàðàìåòðû"; break;
      case   4: description="Òîðãîâûé ñåðâåð çàíÿò"; break;
      case   5: description="Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà"; break;
      case   6: description="Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì"; break;
      case   7: description="Íåäîñòàòî÷íî ïðàâ"; break;
      case   8: description="Ñëèøêîì ÷àñòûå çàïðîñû"; break;
      case   9: description="Íåäîïóñòèìàÿ îïåðàöèÿ íàðóøàþùàÿ ôóíêöèîíèðîâàíèå ñåðâåðà"; break;
      case  64: description="Ñ÷åò çàáëîêèðîâàí"; break;
      case  65: description="Íåïðàâèëüíûé íîìåð ñ÷åòà"; break;
      case 128: description="Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè"; break;
      case 129: description="Íåïðàâèëüíàÿ öåíà"; break;
      case 130: description="Íåïðàâèëüíûå ñòîïû"; break;
      case 131: description="Íåïðàâèëüíûé îáúåì"; break;
      case 132: description="Ðûíîê çàêðûò"; break;
      case 133: description="Òîðãîâëÿ çàïðåùåíà"; break;
      case 134: description="Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè"; break;
      case 135: description="Öåíà èçìåíèëàñü"; break;
      case 136: description="Íåò öåí"; break;
      case 137: description="Áðîêåð çàíÿò"; break;
      case 138: description="Íîâûå öåíû"; break;
      case 139: description="Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ"; break;
      case 140: description="Ðàçðåøåíà òîëüêî ïîêóïêà"; break;
      case 141: description="Ñëèøêîì ìíîãî çàïðîñîâ"; break;
      case 145: description="Ìîäèôèêàöèÿ çàïðåùåíà, òàê êàê îðäåð ñëèøêîì áëèçîê ê ðûíêó"; break;
      case 146: description="Ïîäñèñòåìà òîðãîâëè çàíÿòà"; break;
      case 147: description="Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ îðäåðà çàïðåùåíî áðîêåðîì"; break;
      default : description="Íåèçâåñòíàÿ îøèáêà"; break;
     }
   string field="     ";
   string msg="Îøèáêà #"+err+" "+description+field;
   string title="Îøèáêà"; if (AccountNumber()>0)title=AccountNumber()+": "+title;
   MessageBox(msg,title,MB_OK|MB_ICONERROR);
  }
// End
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:
It automatically opens orders when conditions are reached

Other Features:

It opens Message Boxes to the user

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.22 Total Net Profit:-8809.77

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.12 Total Net Profit:-10849.59

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:-8677.35

BackTest : USDCHF on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:-9210.40

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.00 Total Net Profit:-8081.75

Request Backtest for Buy Percent


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: