Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Советники

Simple advisor - эксперт для MetaTrader 5

Просмотров:
5604
Рейтинг:
(13)
Опубликован:
2023.01.26 11:10
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Написано по просьбе и описанию тут.

Код для МТ4

/********************************************************************\
|                                                 Simple advisor.mq4 |
|                                            © 2023, Alexey ViktoroV |
|                       https://www.mql5.com/ru/users/alexeyvik/news |
\********************************************************************/
#property copyright "© 2023, Alexey ViktoroV"
#property link      "https://www.mql5.com/ru/users/alexeyvik/news"
#property version   "1.00"
#property strict
//---
input string    flatStart    =       "14:00";   // начало «флета»
input string    flatStop     =       "14:30";   // конец «флета»
input string    endRun       =       "20:00";   // завершение работы
input double    lot          =       0.01;      // размер контракта
input int       expID        =       13;        // магик советника
//---
datetime timeStart,
         timeStop,
         runStop;
int     ticketBuy = 0,
    ticketSell = 0,
    bars;
double contract = 0.0;
//---
/*******************Expert initialization function*******************/
int OnInit()
 {
  double volume_min = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN),
         volume_max = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
  contract = lot < volume_min ? volume_min : lot > volume_max ? volume_max : lot;
  return(INIT_SUCCEEDED);
 }/*******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
  static bool ordOpen = false;
  MqlTick tick;
  SymbolInfoTick(_Symbol, tick);
  double flatHigh,
         flatLow,
         tp,
         open,
         otstup = (tick.ask-tick.bid)*2;
  if(NewBar(PERIOD_D1))
   {
    timeStart = StringToTime(flatStart);
    timeStop    = StringToTime(flatStop);
    runStop             =       StringToTime(endRun);
    ordOpen     = false;
   }
  if(!ordOpen && TimeCurrent() > timeStop)
   {
    ordOpen = true;
    int shift = iBarShift(_Symbol, PERIOD_M5, timeStart)+1,
        indexHigh = iHighest(_Symbol, PERIOD_M5, MODE_HIGH, shift),
        indexLow = iLowest(_Symbol, PERIOD_M5, MODE_LOW, shift);
    flatHigh = iHigh(_Symbol, PERIOD_M5, indexHigh);
    flatLow  = iLow(_Symbol, PERIOD_M5, indexLow);
    datetime timeHigh = iTime(_Symbol, PERIOD_M5, indexHigh),
             timeLow = iTime(_Symbol, PERIOD_M5, indexLow);
    tp = flatHigh-flatLow;
    if(AccountFreeMarginCheck(_Symbol, OP_BUY, contract) <= 0.0)
      return;
    open = NormalizeDouble(flatHigh+otstup, _Digits);
    ticketBuy  = OrderSend(_Symbol, OP_BUYSTOP, contract, open, INT_MAX, flatLow,
                           NormalizeDouble(flatHigh+tp, _Digits), TimeToString(timeHigh), expID);
    if(AccountFreeMarginCheck(_Symbol, OP_BUY, contract) <= 0.0)
      return;
    open = NormalizeDouble(flatLow-otstup, _Digits);
    ticketSell = OrderSend(_Symbol, OP_SELLSTOP, contract, open, INT_MAX, flatHigh,
                           NormalizeDouble(flatLow-tp, _Digits), TimeToString(timeLow), expID);
   }
  if(ordOpen)
   {
    //if(OrderSelect(ticketBuy, SELECT_BY_TICKET) && OrderType() == OP_BUY)
    //  if(OrderSelect(ticketSell, SELECT_BY_TICKET) && OrderType() == OP_SELLSTOP && OrderCloseTime() == 0)
    //    if(!OrderDelete(ticketSell))
    //      Print(GetLastError());
    //if(OrderSelect(ticketSell, SELECT_BY_TICKET) && OrderType() == OP_SELL)
    //  if(OrderSelect(ticketBuy, SELECT_BY_TICKET) && OrderType() == OP_BUYSTOP && OrderCloseTime() == 0)
    //    if(!OrderDelete(ticketBuy))
    //      Print(GetLastError());
    if(TimeCurrent() >= runStop)
      for(int i = OrdersTotal(); i-- > 0;)
       {
        if(OrderSelect(i, SELECT_BY_POS))
         {
          if(OrderType() > OP_SELL)
           {
            if(OrderDelete(OrderTicket()))
              Print("Delete ", OrderTicket());
            else
              if(OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), INT_MAX))
                Print("Close ", OrderTicket());
           }
         }
       }
   }
 }/******************************************************************/

/**********************Expert OnDeinit function**********************/
void OnDeinit(const int reason)
 {
  Comment("");
 }/******************************************************************/
bool NewBar(ENUM_TIMEFRAMES tf)
 {
  static datetime nt = 0;
  datetime tm = iTime(_Symbol, tf, 0);
  if(tm == 0)
    return false;
  if(tm != nt)
   {
    nt = tm;
    return true;
   }
  return false;
 }/******************************************************************/
    Simple_Symbol_Spread Simple_Symbol_Spread

    Простой скрипт для быстрого вывода информации о спредах валютных пар, имеющихся в окне MarketWatch.

    StdDev Volatility StdDev Volatility

    Индикатор Standard Deviation Volatility использует исторические ценовые данные для определения высокой и низкой волатильности, определяя потенциальные точки входа и выхода для сделок. Он использует стандартное отклонение и скользящее среднее для создания полос, и трейдеры могут использовать эту информацию для принятия решений о покупке или продаже.

    Simple_Profit_Loss_Percentage Simple_Profit_Loss_Percentage

    Простой советник, который в ходе торгов выводит комментарий о текущем проценте прибыли или убытка на счёту трейдера.

    Обобщенная скользящая средняя Хала Обобщенная скользящая средняя Хала

    Скользящая средняя Хала является полезным индикатором, который дает хорошие сигналы для момента разворота цены, для входа и выхода из рынка. Также ее можно применять в качестве фильтра.