//+---------------------------------------------------------------------------+ //| Sell Percent.mq4 | //| Ñêðèïò îòêðûâàåò ïîçèöèþ SELL ðàçìåðîì â ïðîöåíò îò ìàêñèìàëüíî âîçìîæíîé | //+---------------------------------------------------------------------------+ #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 =Bid+StopLoss *Point; double profit=0; if (TakeProfit>0) profit=Bid-TakeProfit*Point; OrderSend(Symbol(),OP_SELL,lots,Bid,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) { double lotsize=MarketInfo(symbol,MODE_LOTSIZE); double leverage=AccountLeverage(); double result=0; if (leverage>0) result=lotsize/leverage; string base=StringSubstr(symbol,0,3); string ñurrency=AccountCurrency(); double rate_ñurrency=1; if (base!=ñurrency) rate_ñurrency=MarketInfo(base+ñurrency,MODE_BID); result=rate_ñurrency*result; return (result); } double LotMarginCFD (string symbol) { double bid_symbol=MarketInfo(symbol,MODE_BID); double lotsize=MarketInfo(symbol,MODE_LOTSIZE); double leverage=10; double result=0; if (leverage>0) result=lotsize*bid_symbol/leverage; string ñurrency=AccountCurrency(); double rate_ñurrency=1; if (ñurrency!="USD") rate_ñurrency=MarketInfo(ñurrency+"USD",MODE_BID); result=rate_ñurrency*result; return (result); } double LotMarginFutures (string symbol) { 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; string ñurrency=AccountCurrency(); double rate_ñurrency=1; if (ñurrency!="USD") rate_ñurrency=MarketInfo(ñurrency+"USD",MODE_BID); 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