Overdraft_Spazm
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «overdraftspazm v6.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Overdraft_Spazm — торговый советник для MetaTrader 4, который генерирует торговые сигналы на основе анализа максимумов и минимумов ценовых баров и расчёта волатильности. При достижении условий сигнала советник открывает позиции BUY или SELL с возможностью установки стоп-лосса и тейк-профита.
Советник поддерживает несколько механизмов управления позициями: обычный трейлинг-стоп, трейлинг на основе индикатора SAR, а также автоматическое закрытие позиций при достижении заданных уровней прибыли или убытка. Доступна фильтрация по времени торговли и ограничение количества одновременных позиций.
Реализована динамическая расчётка размера лота на основе свободного баланса счёта с возможностью применения коэффициента Мартингейла. Визуализация отображает текущий тренд и средний спред на графике. Советник работает на платформе MetaTrader 4 и использует стандартные торговые API для исполнения операций.
Настройки программы
| Настройка | Описание |
|---|---|
| ??????????? ?????? (VirtualReverse) | Виртуальный реверс — Переключатель виртуального реверса позиций. |
| OldStrategySet_ | Старый набор стратегии — Текстовый параметр для выбора старого набора настроек стратегии. |
| ????????? ??? ???????? ?????? ???????. ??????? ????????????? ?.?. ????????_???_????????=???????????? (k) | Коэффициент глубины анализа — Коэффициент, определяющий глубину анализа и величину сдвига для расчёта сигнала. |
| ?????? ??? ??????? ????????????? ? ????? (period) | Период волатильности — Период расчёта волатильности в количестве баров. |
| ????? ??????????? ????????????? 0-??????? ?????????? 1-???????-?????????? (exp) | Метод расчёта волатильности — Метод расчёта волатильности: 0 — простой, 1 — экспоненциальный. |
| ????? ??????? ????????????? ?? 1-open/close, 0-High/Low (open_close) | Метод расчёта волатильности — Метод расчёта волатильности: 0 — на основе High/Low, 1 — на основе Open/Close. |
| ????????? ???????? (visualize) | Визуализация — Переключатель визуального отображения трендов и информации на графике. |
| In_ | Вход стратегии — Текстовый параметр, связанный с входными настройками стратегии. |
| ??????????? ?????? ? ?????? ??? ??????? ???? ????????? ??? ??????? ?????? ???? 0 - ?? ????? ?? ????? (SpreadMinimumToClo | Минимальный спред для закрытия убытка — Минимальный средний спред в пунктах для разрешения закрытия убыточной позиции. 0 — без проверки. |
| ??????????? ??????? ? ?????? ??? ??????? ???? ????????? ??? ??????? ?????? ???? 0 - ?? ????? ?? ???? (SpreadMinimumToClo | Минимальный спред для закрытия прибыли — Минимальный средний спред в пунктах для разрешения закрытия прибыльной позиции. 0 — без проверки. |
| true - ?????????????? ?????? ?????????. (ReverseSignal) | Реверс сигнала — Переключатель инверсии торгового сигнала: при true сигналы разворачиваются на противоположные. |
| trade_ | Торговые настройки — Текстовый параметр, связанный с торговыми настройками. |
| ?????????? ????? (Magic) | Магический номер — Магический номер для идентификации ордеров, управляемых данным советником. |
| ????????, 0 - ?? ???????????? (StopLoss) | Стоп-лосс — Стоп-лосс в пунктах от цены открытия. 0 — без стоп-лосса. |
| ?????????? , 0 - ?? ???????????? (TakeProfit) | Тейк-профит — Тейк-профит в пунктах от цены открытия. 0 — без тейк-профита. |
| ??????????????? (Slippage) | Проскальзывание — Допустимое проскальзывание цены при исполнении ордеров. |
| ????? ???????? ?? MarketWatch true = ??????? ???????????? ???????/?????? ??? ??????, ????? ????????? (MarketWatch) | Работа через MarketWatch — Переключатель работы через MarketWatch: при true ордера отправляются без проверки стоп-уровня, а стоп-лосс и тейк-профит устанавливаются после исполнения. |
| ????????? ??????? ??? ???????? ??????? (ClosePosifChange) | Закрытие позиции при изменении сигнала — Переключатель закрытия текущей позиции перед открытием новой при смене сигнала. |
| ?????? ?????? ??? ??? ? / ??? ???? 1 ???????? (ONlyOnePosbySignal) | Одна позиция на сигнал — Переключатель: разрешение открытия только одной позиции на один торговый сигнал. |
| ???????????? ?????????? ??????? ???? ONlyOnePosbySignal=false (MaxPosifMoreThenOne) | Максимум позиций одновременно — Максимальное количество одновременно открытых позиций при отключённом режиме одной позиции на сигнал. |
| autolot_ | Автоматический лот — Текстовый параметр, связанный с автоматическим расчётом лота. |
| ????????????? ??? (Lots) | Размер лота — Фиксированный размер лота при отключённом динамическом расчёте. |
| ???????????? ??? (DynamicLot) | Динамический лот — Переключатель динамического расчёта размера лота на основе баланса счёта. |
| % ?? ???????? (LotBalancePcnt) | Процент баланса для лота — Процент свободного баланса счёта, используемый для расчёта размера лота. |
| ???????????? ??? ??? ??????? (MaxLot) | Максимальный лот — Максимально допустимый размер лота. |
| ???? 1 ?? ?? ????????????, ??????????? ??????? ?? ????????? ?????? ????? ????????? (Martin) | Коэффициент Мартингейла — Коэффициент увеличения лота при использовании стратегии Мартингейла (1 — без эффекта). |
| timetrade_ | Время торговли — Текстовый параметр, связанный с настройками времени торговли. |
| ??? ???????? ?????? (OpenHour) | Час открытия торговли — Час начала торговой сессии. |
| ?????? ???????? ?????? (OpenMinute) | Минута открытия торговли — Минута начала торговой сессии. |
| ??? ???????? ?????? (CloseHour) | Час закрытия торговли — Час завершения торговой сессии. |
| ?????? ???????? ?????? (CloseMinute) | Минута закрытия торговли — Минута завершения торговой сессии. |
| Trailing_ | Настройки трейлинга — Текстовый параметр, связанный с настройками трейлинга. |
| ???????????? ???????????? (TrailingStopUSE) | Использование трейлинг-стопа — Переключатель активации обычного трейлинг-стопа. |
| ???????????? ?????? ??? ????????? ??????? - ????? ????????? (IfProfTrail) | Трейлинг только при прибыли — Переключатель: трейлинг-стоп активируется только при наличии нереализованной прибыли. |
| ????????? ????????? = 0 - ?????????? ?????????? (TrailingStop) | Расстояние трейлинг-стопа — Расстояние фиксации цены для обычного трейлинг-стопа в пунктах. 0 — без трейлинга. |
| ??? ????????? (TrailingStep) | Шаг трейлинг-стопа — Шаг фиксации цены для обычного трейлинг-стопа в пунктах. |
| Trailing_SAR | Настройки SAR-трейлинга — Текстовый параметр, связанный с настройками SAR-трейлинга. |
| ???????????? ???????????? (TrailingStopSAR) | Трейлинг через SAR — Переключатель использования трейлинг-стопа на основе индикатора SAR. |
| ?????????? ?????? ?????, ?????? 0.02. (step) | Шаг SAR — Параметр шага для индикатора SAR, по умолчанию 0.02. |
| ???????????? ??????? ?????, ?????? 0.2. (maximum) | Максимум SAR — Максимальное значение параметра для индикатора SAR. |
| TrailingLOSS_ | Трейлинг убытка — Текстовый параметр, связанный с настройками трейлинг-стопа убытка. |
| ??????? ??? ?????? ????????? 0 - ???????? (TrailingStopLOSS) | Расстояние трейлинг-стопа убытка — Расстояние фиксации цены для трейлинг-стопа убытка в пунктах. 0 — без трейлинга убытка. |
| ??????? ??? ?????? ??? ????? (TrailingstepLOSS) | Шаг трейлинг-стопа убытка — Шаг фиксации цены для трейлинг-стопа убытка в пунктах. |
| ?????? ????????? ??????? (LOSSOrderOnly) | Только убыточные ордера для трейлинга убытка — Переключатель: применение трейлинг-стопа убытка только к убыточным позициям. |
| CloseProfitLoss | Условия закрытия по прибыли/убытку — Текстовый параметр, определяющий условия закрытия по прибыли или убытку. |
| ??? ???????? ?? ??????? (TypeofClose) | Тип расчёта закрытия — Тип расчёта для автоматического закрытия: 1 — по сумме сделок, 2 — по пипсам, 3 — по проценту от equity, 4 — по проценту от баланса. |
| ????????? ???? + (CloseProfit) | Закрытие при прибыли — Переключатель автоматического закрытия позиций при достижении заданного уровня прибыли. |
| ?????????? ??????(? ??????????? ?? ?????? TypeofClose) ??? ???????? ??????? (prifitessss) | Значение прибыли для закрытия — Значение прибыли в единицах выбранного типа закрытия, при котором срабатывает автоматическое закрытие. |
| ????????? ???? - (CloseLoss) | Закрытие при убытке — Переключатель автоматического закрытия позиций при достижении заданного уровня убытка. |
| ?????????? ??????(? ??????????? ?? ?????? TypeofClose) ??? ???????? ?????? (lossss) | Значение убытка для закрытия — Значение убытка в единицах выбранного типа закрытия, при котором срабатывает автоматическое закрытие. |
| ????????? ??? ????????? ? ??????? ????? ???????? ???????. (OFFAllEaAfterClosePROF) | Отключение после закрытия с прибылью — Переключатель: полное отключение советника после закрытия позиции с прибылью. |
| ????????? ??? ????????? ? ??????? ????? ???????? ??????. (OFFAllEaAfterCloseLOSS) | Отключение после закрытия с убытком — Переключатель: полное отключение советника после закрытия позиции с убытком. |
| BU_ | Баланс/Валюта — Текстовый параметр, связанный с настройками баланса или валюты. |
| ??????? ??????? ? ????????? (MovingInWLUSE) | Перемещение стоп-лосса — Переключатель функции перемещения стоп-лосса при достижении уровней убытка или прибыли. |
| ????????? ???????? ? +LevelWLoss ??????? (LevelWLoss) | Уровень убытка для перемещения — Уровень убытка в пунктах для перемещения стоп-лосса. |
| ????? ?????? ????? ? ???? LevelProfit ??????? (LevelProfit) | Уровень прибыли для перемещения — Уровень прибыли в пунктах для перемещения стоп-лосса в безубыток. |
| InfoVTSS | Информация и уведомления — Переключатель отображения дополнительной информации и уведомлений. |
Поиск по коду файла
extern bool VirtualReverse=true; // ??????????? ??????
extern string OldStrategySet_=" ????????? ??????? ?????????";
extern double k=5.0;//????????? ??? ???????? ?????? ???????. ??????? ????????????? ?.?. ????????_???_????????=?????????????_??_??????*k
extern int period=24;//?????? ??? ??????? ????????????? ? ?????
extern int exp=0;//????? ??????????? ????????????? 0-??????? ?????????? 1-???????-??????????
extern int open_close=0;//????? ??????? ????????????? ?? 1-open/close, 0-High/Low
extern bool visualize=true; //????????? ????????
extern string In_=" ????????? ?????";
extern int SpreadMinimumToCloseLOSS=1; // ??????????? ?????? ? ?????? ??? ??????? ???? ????????? ??? ??????? ?????? ???? 0 - ?? ????? ?? ????????
extern int SpreadMinimumToClosePROF=1; // ??????????? ??????? ? ?????? ??? ??????? ???? ????????? ??? ??????? ?????? ???? 0 - ?? ????? ?? ????????
extern bool ReverseSignal=false; // true - ?????????????? ?????? ?????????.
extern string trade_="????????? ????????";
extern int Magic=777; // ?????????? ?????
extern int StopLoss=0; // ????????, 0 - ?? ????????????
extern int TakeProfit=0; // ?????????? , 0 - ?? ????????????
extern int Slippage=0; // ???????????????
extern bool MarketWatch=false; // ????? ???????? ?? MarketWatch true = ??????? ???????????? ???????/?????? ??? ??????, ????? ?????????? ??????????? - ??? ????????? ????????
extern bool ClosePosifChange=true; // ????????? ??????? ??? ???????? ???????
extern bool ONlyOnePosbySignal=true; // ?????? ?????? ??? ??? ? / ??? ???? 1 ????????
extern int MaxPosifMoreThenOne=5;// ???????????? ?????????? ??????? ???? ONlyOnePosbySignal=false
extern string autolot_="????????? ????????";
extern double Lots=0.1; // ????????????? ???
extern bool DynamicLot=false; // ???????????? ???
extern double LotBalancePcnt=20; // % ?? ????????
extern double MaxLot=999; // ???????????? ??? ??? ???????
extern double Martin=1; // ???? 1 ?? ?? ????????????, ??????????? ??????? ?? ????????? ?????? ????? ?????????
extern string timetrade_="????????? ??????? ????????";
extern int OpenHour=0; // ??? ???????? ??????
extern int OpenMinute=0; // ?????? ???????? ??????
extern int CloseHour=23; // ??? ???????? ??????
extern int CloseMinute=59; // ?????? ???????? ??????
extern string Trailing_="????????? ?????????????";
extern bool TrailingStopUSE=false; // ???????????? ????????????
extern bool IfProfTrail=false; // ???????????? ?????? ??? ????????? ??????? - ????? ?????????
extern int TrailingStop=0; // ????????? ????????? = 0 - ?????????? ??????????
extern int TrailingStep=1; // ??? ?????????
extern string Trailing_SAR="????????? ????????????? SAR";
extern bool TrailingStopSAR=false; // ???????????? ????????????
extern double step=0.02;//- ?????????? ?????? ?????, ?????? 0.02.
extern double maximum=0.2;// - ???????????? ??????? ?????, ?????? 0.2.
extern string TrailingLOSS_="????????? ???????????? ????????????? ??????";
extern int TrailingStopLOSS=10;// - ??????? ??? ?????? ????????? 0 - ????????
extern int TrailingstepLOSS=10;// - ??????? ??? ?????? ??? ?????
extern bool LOSSOrderOnly=true;// ?????? ????????? ???????
extern string CloseProfitLoss=" ????????? ???????? ?? ?????? ???????";
extern string ?lose="= 1 - ??????, 2 -?????? ,3 -%?????? ,4 -%??????";
extern int TypeofClose=1; // ??? ???????? ?? ???????
extern bool CloseProfit=false;// ????????? ???? +
extern double prifitessss=10; // ?????????? ??????(? ??????????? ?? ?????? TypeofClose) ??? ???????? ???????
extern bool CloseLoss=false;// ????????? ???? -
extern double lossss=-10;// ?????????? ??????(? ??????????? ?? ?????? TypeofClose) ??? ???????? ??????
extern bool OFFAllEaAfterClosePROF=false;// ????????? ??? ????????? ? ??????? ????? ???????? ???????.
extern bool OFFAllEaAfterCloseLOSS=false;// ????????? ??? ????????? ? ??????? ????? ???????? ??????.
extern string BU_="????????? ?????????";
extern bool MovingInWLUSE=false; // ??????? ??????? ? ?????????
extern int LevelWLoss=0; // ????????? ???????? ? +LevelWLoss ???????
extern int LevelProfit=0;// ????? ?????? ????? ? ???? LevelProfit ???????
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal(), kp=0;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) kp++;
}
}
}
}
}
return(kp);
}
int TF;
double Prof,Loss;
bool printtime=false;
double timeCheckSignal; // ????? ???????? ???????
double sl,tp; // ??? ?????????? ??????
int sprea[];
double AverSpread=1;
double Spread()
{
if(ArraySize(sprea)>999)ArrayResize(sprea,1);
ArrayResize(sprea,ArraySize(sprea)+1);
sprea[ArraySize(sprea)-1]=(Ask-Bid)/Point;
double aver;
for(int i=0;i<ArraySize(sprea);i++)aver=aver+sprea[i];
AverSpread=aver/ArraySize(sprea);
if(AverSpread<1)AverSpread=1;
ObjectCreate("Original2",OBJ_LABEL,0,0,0);
ObjectSetText("Original2"," ??????? ??????? ????? ?? ?????? = "+DoubleToStr(AverSpread,8),12,"Arial Bold",Chartreuse);
ObjectSet("Original2",OBJPROP_CORNER,0);
ObjectSet("Original2",OBJPROP_XDISTANCE,0);
ObjectSet("Original2",OBJPROP_YDISTANCE,30);
}
int start()
{
// код доступен только после оплаты
}
void MovingInWL(string sy="",int op=-1,int mn=-1)
{
double po,pp;
int i,k=OrdersTotal();
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && (OrderMagicNumber()==mn || mn<0) && (OrderSymbol()==sy || sy==""))
{
po=MarketInfo(OrderSymbol(),MODE_POINT);
if(OrderType()==OP_BUY)
{
if(OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po)
{
pp=MarketInfo(OrderSymbol(),MODE_BID);
if(pp-OrderOpenPrice()>LevelProfit*po)
{
ModifyOrder(-1,OrderOpenPrice()+LevelWLoss*po,-1);
}
}
}
if(OrderType()==OP_SELL)
{
if(OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po)
{
pp=MarketInfo(OrderSymbol(),MODE_ASK);
if(OrderOpenPrice()-pp>LevelProfit*po)
{
ModifyOrder(-1,OrderOpenPrice()-LevelWLoss*po,-1);
}
}
}
}
}
}
bool TDt(string CloseHour,string CloseMinute,string OpenHour,string OpenMinute) // ??????? ????????? ?? ??????? ?? ??????? ?????
{
if(CloseHour=="23" && CloseMinute=="59" && OpenHour=="0" && OpenMinute=="0")return(true);
string Autor=" ????? ??????? ??? ??????? : A*********1*@mail.ru";
int TradingTime=false; // ?????????? ""?????""
if(StrToTime(CloseHour+":"+CloseMinute)>StrToTime(OpenHour+":"+OpenMinute))
{
if(TimeCurrent()<StrToTime(CloseHour+":"+CloseMinute) && TimeCurrent()>=StrToTime(OpenHour+":"+OpenMinute)) //
TradingTime=true;
}
if(StrToTime(CloseHour+":"+CloseMinute)<StrToTime(OpenHour+":"+OpenMinute))
{
if(TimeCurrent()<StrToTime(CloseHour+":"+CloseMinute) || TimeCurrent()>=StrToTime(OpenHour+":"+OpenMinute)) //
TradingTime=true;
} //
return(TradingTime); //
}
bool DxO(string sy="",int op=-1,int mn=-1,datetime ot=0)
{
int i,k=OrdersTotal(),ty;
string Autor=" ????? ??????? ??? ??????? : A*********1*@mail.ru";
if(sy=="0") sy=Symbol();
for(i=k-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
ty=OrderType();
if(ty>1 && ty<6)
{
if((OrderSymbol()==sy || sy=="") && (op<0 || ty==op))
{
if(mn<0 || OrderMagicNumber()==mn)
{
if(ot<=OrderOpenTime()) {OrderDelete(OrderTicket(),0);}
}
}
}
}
}
return(False);
}
void ModifyOrder(double pp=-1,double sl=0,double tp=0,datetime ex=0)
{
bool fm;
double op,pa,pb,os,ot;
int dg=MarketInfo(OrderSymbol(),MODE_DIGITS),er,it;
string Autor=" ????? ??????? ??? ??????? : A*********1*@mail.ru";
if(pp<=0) pp=OrderOpenPrice();
if(sl<0 ) sl=OrderStopLoss();
if(tp<0 ) tp=OrderTakeProfit();
pp=NormalizeDouble(pp, dg);
sl=NormalizeDouble(sl, dg);
tp=NormalizeDouble(tp, dg);
op=NormalizeDouble(OrderOpenPrice() , dg);
os=NormalizeDouble(OrderStopLoss() , dg);
ot=NormalizeDouble(OrderTakeProfit(), dg);
if(pp!=op || sl!=os || tp!=ot)
{
for(it=1; it<=3; it++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
RefreshRates();
fm=OrderModify(OrderTicket(),pp,sl,tp,ex);
if(fm)
{
break;
} else {
er=GetLastError();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
}
}
}
}
bool ExO(string sy="",int op=-1,int mn=-1,datetime ot=0)
{
int i,k=OrdersTotal(),ty;
string Autor=" ????? ??????? ??? ??????? : A*********1*@mail.ru";
if(sy=="0") sy=Symbol();
for(i=0;i<k;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
ty=OrderType();
if(ty>1 && ty<6)
{
if((OrderSymbol()==sy || sy=="") && (op<0 || ty==op))
{
if(mn<0 || OrderMagicNumber()==mn)
{
if(ot<=OrderOpenTime()) return(True);
}
}
}
}
}
return(False);
}
int SetOrder(string sy,int op,double ll,double pp,
double sl=0,double tp=0,int mn=0,string lsComm="",datetime ex=0)
{
color clOpen;
datetime ot;
double pa,pb,mp;
int err,it,ticket,msl;
string Autor=" ????? ??????? ??? ??????? : A*********1*@mail.ru";
if(sy=="" || sy=="0") sy=Symbol();
msl=MarketInfo(sy,MODE_STOPLEVEL);
if(ex>0 && ex<TimeCurrent()) ex=0;
for(it=1; it<=5; it++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped()))
{
Print("SetOrder(): ????????? ?????? ???????");
break;
}
while(!IsTradeAllowed())if(!IsTesting() && !IsOptimization()) Sleep(5000);
RefreshRates();
ot=TimeCurrent();
if(!MarketWatch)ticket=OrderSend(sy,op,ll,NormalizeDouble(pp,MarketInfo(sy,MODE_DIGITS)),Slippage,NormalizeDouble(sl,MarketInfo(sy,MODE_DIGITS)),NormalizeDouble(tp,MarketInfo(sy,MODE_DIGITS)),lsComm,mn,ex,clOpen);
if(MarketWatch)
{
ticket=OrderSend(sy,op,ll,NormalizeDouble(pp,MarketInfo(sy,MODE_DIGITS)),Slippage,0,0,lsComm,mn,ex,clOpen);
if(SBT(ticket)) ModifyOrder(-1,sl,tp);
}
if(ticket>0)
{
if(!IsTesting()) WindowScreenShot(WindowExpertName()+"\\"+op+WindowExpertName()+Symbol()+Period()+TimeCurrent()+"_.gif",1024,768);
return(ticket);
break;
} else {
err=GetLastError();
Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",op,
" pp=",pp," sl=",sl," tp=",tp," mn=",mn);
if(pa==0 && pb==0) Print("????????? ? ?????? ????? ??????? ??????? "+sy);
mp=MarketInfo(sy,MODE_POINT);
pa=MarketInfo(sy, MODE_ASK);
pb=MarketInfo(sy, MODE_BID);
if(pa==0 && pb==0) Alert("SetOrder(): ????????? ? ?????? ????? ??????? ??????? "+sy);
if(err==130)
{
switch(op)
{
case OP_BUYLIMIT:
if(pp>pa-msl*mp) pp=pa-msl*mp;
if(sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
if(tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
break;
case OP_BUYSTOP:
if(pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;
if(sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
if(tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
break;
case OP_SELLLIMIT:
if(pp<pb+msl*mp) pp=pb+msl*mp;
if(sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
if(tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
break;
case OP_SELLSTOP:
if(pp>pb-msl*mp) pp=pb-msl*mp;
if(sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
if(tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
break;
}
Alert("SetOrder(): ??????????????? ??????? ??????"+sy+"--op-"+op+"--ll-"+ll+"--pp-"+pp+"---"+Slippage+"--sl-"+sl+"--tp-"+tp+"---"+lsComm+"---"+mn+"---"+ex+"---"+clOpen);
}
Print("?????? "+err+" ???????? "+ErrorDescription(err));
if(err==2 || err==64 || err==65 || err==133)
{
break;
}
if(err==128 || err==142 || err==143)
{
Sleep(1000*66.666);
}
Alert("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
Alert("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",op,
" pp=",pp," sl=",sl," tp=",tp," mn=",mn);
if(pa==0 && pb==0) Alert("????????? ? ?????? ????? ??????? ??????? "+sy);
if(err==2 || err==64 || err==65 || err==133)
{
break;
}
if(err==4 || err==131 || err==132)
{
Sleep(1000*30); 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);
}
}
}
bool SBT(int ti,string sy="",int op=-1,int mn=-1)
{
int i,k=OrdersTotal();
string Autor=" ????? ??????? ??? ??????? : A*********1*@mail.ru";
if(sy=="0") sy=Symbol();
for(i=0;i<k;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
{
if((mn<0 || OrderMagicNumber()==mn) && OrderTicket()==ti) return(True);
}
}
}
return(False);
}
int OPs(string sy,int op,double ll,double sl=0,double tp=0,int mn=0,string coomment="")
{
color clOpen;
datetime ot;
double pp,pa,pb;
int dg,err,it,ticket=0;
string lsComm="";
if(sy=="" || sy=="0") sy=Symbol();
if(op==OP_BUY) clOpen=Green; else clOpen=Red;
string Autor=" ????? ??????? ??? ??????? : A*********1*@mail.ru";
for(it=1;it<=3;it++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while(!IsTradeAllowed()) if(!IsTesting() && !IsOptimization())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();
if(!MarketWatch) ticket=OrderSend(sy,op,ll,pp,Slippage,sl,tp,coomment,mn,0,clOpen);
if(MarketWatch)
{
ticket=OrderSend(sy,op,ll,pp,Slippage,0,0,coomment,mn,0,clOpen);
if(SBT(ticket)) ModifyOrder(-1,sl,tp);
}
if(ticket>0)
{
if(!IsTesting()) WindowScreenShot(WindowExpertName()+"\\"+op+WindowExpertName()+Symbol()+Period()+TimeCurrent()+"_.gif",1024,768);
break;
} else {
err=GetLastError();
Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",op,
" pp=",pp," sl=",sl," tp=",tp," mn=",mn);
if(pa==0 && pb==0) Print("????????? ? ?????? ????? ??????? ??????? "+sy);
Print("?????? "+err+" ???????? "+ErrorDescription(err));
if(err==2 || err==64 || err==65 || err==133)
{
break;
}
if(err==128 || err==142 || err==143)
{
Sleep(1000*66.666);
}
Alert("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
Alert("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",op,
" pp=",pp," sl=",sl," tp=",tp," mn=",mn);
if(pa==0 && pb==0) Alert("????????? ? ?????? ????? ??????? ??????? "+sy);
if(err==2 || err==64 || err==65 || err==133)
{
break;
}
if(err==4 || err==131 || err==132)
{
Sleep(1000*30); 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);
}
bool EPs(string sy="",int op=-1,int mn=-1,int ticket=0)
{
string Autor=" ????? ??????? ??? ??????? : A*********1*@mail.ru";
int i,k=OrdersTotal();
if(sy=="0") sy=Symbol();
for(i=0;i<k;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==sy || sy=="")
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(op<0 || OrderType()==op)
{
if(mn<0 || OrderMagicNumber()==mn)
{
if(ticket==OrderTicket() || ticket==0) return(True);
}
}
}
}
}
}
return(False);
}
double lastlot;
double GetSizeLot(double ll=1) //??????? ?????????? ???????? ?????,
{
string Autor=" ????? ??????? ??? ??????? : A*********1*@mail.ru";
string lotcalc;
string Valdepo=AccountCurrency();
double Lot2,MinLots,MaxLots;
int lotdig;
if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.01)lotdig=2; else lotdig=1;
if(Valdepo=="USD")
{
if(StringSubstr(Symbol(),0,3)=="USD")Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*AccountLeverage()/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
else if(StringSubstr(Symbol(),3,3)=="USD")Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*AccountLeverage()/Ask/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
else
{
double pr=MarketInfo(StringSubstr(Symbol(),0,3)+"USD",MODE_ASK);
if(pr!=0)Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*AccountLeverage()/pr/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
else Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*AccountLeverage()/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
}
}
if(Valdepo=="EUR")
{
if(StringSubstr(Symbol(),0,3)=="EUR")Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*AccountLeverage()/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
else
{
pr=MarketInfo("EUR"+StringSubstr(Symbol(),0,3),MODE_BID);
if(pr!=0)Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*AccountLeverage()*pr/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
else Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*AccountLeverage()/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
}
}
MinLots=MarketInfo(Symbol(),MODE_MINLOT);
MaxLots=MaxLot;
lotcalc=" Autolot="+Lot2;
if(!DynamicLot)Lot2=Lots;
if(Martin!=1)
{
if(isCloseLastPosByStop(Symbol(),-1,Magic)==1)lastlot=OrderLots()*Martin;
if(isCloseLastPosByStop(Symbol(),-1,Magic)==2)lastlot=OrderLots();
if(isCloseLastPosByStop(Symbol(),-1,Magic)==0)lastlot=Lot2;
lotcalc=lotcalc+" Martinlot="+lastlot;
Lot2=lastlot;
}
if(Lot2 < MinLots) Lot2 = MinLots;
if(Lot2 > MaxLots) Lot2 = MaxLots;
lotcalc=lotcalc+" MinLots="+MinLots+" LOT="+NormalizeDouble(Lot2,lotdig);
Print(lotcalc);
return(NormalizeDouble(Lot2,lotdig));
}
void CPBS()
{
bool fc;
color clClose;
double ll,pa,pb,pp;
int err,it;
string Autor=" ????? ??????? ??? ??????? : A*********1*@mail.ru";
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for(it=1; it<=5; it++)
{
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if(OrderType()==OP_BUY)
{
pp=pb;
} else {
pp=pa;
}
ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, 1, clClose);
if(fc)
{
break;
} else {
err=GetLastError();
Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
}
}
}
}
void CPD(string sy="",int op=-1,int mn=-1)
{
int i,k=OrdersTotal();
string Autor=" ????? ??????? ??? ??????? : A*********1*@mail.ru";
if(sy=="0") sy=Symbol();
for(i=k-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(mn<0 || OrderMagicNumber()==mn)
if(SpreadMinimumToCloseLOSS==0||GetProfitOpenPosInPoint(sy,op,mn)<=0-SpreadMinimumToCloseLOSS*AverSpread){Print(" Tiket="+OrderTicket()+" Profit="+OrderProfit()+" AverSpread="+AverSpread);OrderSelect(i,SELECT_BY_POS,MODE_TRADES);CPBS();}
if(SpreadMinimumToClosePROF==0||GetProfitOpenPosInPoint(sy,op,mn)>=SpreadMinimumToClosePROF*AverSpread){Print(" Tiket="+OrderTicket()+" Profit="+OrderProfit()+" AverSpread="+AverSpread);OrderSelect(i,SELECT_BY_POS,MODE_TRADES);CPBS();}
}
}
}
}
}
int GetProfitOpenPosInPoint(string sy="", int op=-1, int mn=-1) {
double p;
int i, k=OrdersTotal(), pr=0;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
p=MarketInfo(OrderSymbol(), MODE_POINT);
if (p==0) if (StringFind(OrderSymbol(), "JPY")<0) p=0.0001; else p=0.01;
if (OrderType()==OP_BUY) {
pr+=(MarketInfo(OrderSymbol(), MODE_BID)-OrderOpenPrice())/p;
}
if (OrderType()==OP_SELL) {
pr+=(OrderOpenPrice()-MarketInfo(OrderSymbol(), MODE_ASK))/p;
}
}
}
}
}
return(pr);
}
void SimpleTrailingSAR(string sy="",int op=-1,int mn=-1)
{
double po,pp;
double SAR=iSAR(sy,0,step,maximum,0);
int i,k=OrdersTotal();
string Autor=" ????? ??????? ??? ??????? : A*********1*@mail.ru";
if(sy=="0") sy=Symbol();
if(TrailingStop==0)TrailingStop=MarketInfo(Symbol(),MODE_STOPLEVEL);
for(i=0;i<k;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
{
po=MarketInfo(OrderSymbol(),MODE_POINT);
if(mn<0 || OrderMagicNumber()==mn)
{
if(OrderType()==OP_BUY)
{
pp=MarketInfo(OrderSymbol(),MODE_BID);
if(OrderStopLoss()<SAR)
{
ModifyOrПоказано первые 50% кода (символов: 36640)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.