← К каталогу
Исходный код · ID 2959

Overdraft_Spazm

overdraftspazm v6.mq4

Похожие материалы по тегам

#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 2 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 2 общих теговgeniusv101-ecn.mq4MQL4 / MetaTrader 4 · 2 общих теговmarket crusher ea guidlines.txtMQL · 2 общих тегов2 to 1 strategy with signals.pineTradingView · 2 общих теговfresh algo signals & overlays v25_6334471093901859175.pineTradingView · 2 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

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 и перейдите к оплате.

Стоимость полного кода
3 664₽ ≈ $44.79