//+------------------------------------------------------------------+ //|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