Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
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
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---