Функция гарантированного открытия ордера
Ордер точно будет открыт этой функцией.
Во внешние параметры надо вынести уровень проскальзывания и комментарий к ордеру:
input string IsComm = "Тут любой комментарий";
input int Slippage = 30; // 30 - это просто пример
Передаваемые параметры:
- sy — наименование инструмента (NULL или «» — текущий символ)
- op — операция
- ll — лот
- sl — уровень стоп
- tp — уровень тейк
- mn — MagicNumber
Функция (нажмите на иконку одной из соцсетей):
[sociallocker]
int OpenPosition(string sy,int op,double ll,double sl=0,double tp=0,int mn=0)
{
color clOpen;
datetime ot;
double pp,pa,pb;
int dg,err,it,ticket=0;
if(sy=="" || sy=="0") sy=Symbol();
if(op==OP_BUY) clOpen=Green; else clOpen=Red;
for(it=1; it<=NumberOfTry; it++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped()))
{
Print("OpenPosition(): Остановка работы функции");
break;
}
while(!IsTradeAllowed()) Sleep(5000);
RefreshRates();
dg=MarketInfo(sy, MODE_DIGITS);
pa=MarketInfo(sy, MODE_ASK);
pb=MarketInfo(sy, MODE_BID);
if(op==OP_BUY) pp=pa; else pp=pb;
pp=NormalizeDouble(pp, dg);
ot=TimeCurrent();
ticket=OrderSend(sy,op,ll,pp,Slippage,sl,tp,lsComm,mn,0,clOpen);
if(ticket>0)
{
break;
} else {
err=GetLastError();
if(pa==0 && pb==0) Print("Проверьте в Обзоре рынка наличие символа "+sy);
// Вывод сообщения об ошибке
Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),
" pp=",pp," sl=",sl," tp=",tp," mn=",mn);
// Блокировка работы советника
if(err==2 || err==64 || err==65 || err==133)
{
gbDisabled=True; break;
}
// Длительная пауза
if(err==4 || err==131 || err==132)
{
Sleep(1000*300); break;
}
if(err==128 || err==142 || err==143)
{
Sleep(1000*66.666);
if(ExistPositions(sy,op,mn,ot))
{
break;
}
}
if(err==140 || err==148 || err==4110 || err==4111) break;
if(err==141) Sleep(1000*100);
if(err==145) Sleep(1000*17);
if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);
if(err!=135) Sleep(1000*7.7);
}
}
return(ticket);
}
[/sociallocker]
Вот и все. Функция рабочая 100%. Можете оставить какой-нибудь хороший комментарий.