Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано
3 минуты назад, Евгений72 сказал:

Это будет работать для вычисления профита ордера с минимальным тикетом????????

а что не так? 
На первом проходе будет выбран первый попавшийся тикет, т.к. его значение гарантированно меньше INT_MAX. Запишется его профит.
Если на следующей итерации попадется ордер с меньшим тикетом, чем предыдущий, то и переменная min_ticket и переменная profit_min_ticket обновят свои значения.
п.с. Вы можете проверять все эксперименты через Принты...

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
1 минуту назад, usver73 сказал:

а что не так? 
На первом проходе будет выбран первый попавшийся тикет, т.к. его значение гарантированно меньше INT_MAX. Запишется его профит.
Если на следующей итерации попадется ордер с меньшим тикетом, чем предыдущий, то и переменная min_ticket и переменная profit_min_ticket обновят свои значения.
п.с. Вы можете проверять все эксперименты через Принты...

Если можно я лучше допишут советника и если будут проблемы я к ВАМ обращусь 

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
33 минуты назад, usver73 сказал:

а что не так? 
На первом проходе будет выбран первый попавшийся тикет, т.к. его значение гарантированно меньше INT_MAX. Запишется его профит.
Если на следующей итерации попадется ордер с меньшим тикетом, чем предыдущий, то и переменная min_ticket и переменная profit_min_ticket обновят свои значения.
п.с. Вы можете проверять все эксперименты через Принты...

Вот я и дошел до закрытия ордеров Вот моя функция 

void ClosseAll()
{
  for(int i = OrdersTotal()-1; i>=0; i--)
  {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
       if (OrderType() == OP_BUY)
         { 
         if (!OrderClose(OrderTicket(), OrderLots(), Bid, slip))
             Print("Не удалось закрыть ордера на покупку!");
         }
       if (OrderType() == OP_SELL)
         { 
         if (!OrderClose(OrderTicket(), OrderLots(), Ask, slip))
             Print("Не удалось закрыть ордер на продажу!");
         }
     }
  }
}

Ещё  мне нужно закрыть ордера с минимальным и максимальным тикетом 

Предварительно эти ордера выбраны, суммарный тейкпрофит достиг определенного значения ушла команда но закрытие этих ордеров 

Вопрос что нужно изменить в этом коде чтобы они и только они закрылись одновременно или через несколько тиков?????  

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
40 минут назад, Евгений72 сказал:

Вопрос что нужно изменить в этом коде чтобы они и только они закрылись одновременно или через несколько тиков????? 

нужно собрать все, что две страницы обсуждали...
 

Спойлер
int max_ticket=0;
int min_ticket=INT_MAX;
double max_ticket_profit = 0;
double min_ticket_profit = 0;

void FindLastOrderPrice()
{
     max_ticket=0;
     min_ticket=INT_MAX;
  
     for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) 
     {
        if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
        {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
            {
                if(OrderTicket() > max_ticket) { max_ticket = OrderTicket(); max_ticket_profit = OrderProfit() + OrderComission() + OrderSwap();
                if(OrderTicket() < min_ticket) { min_ticket = OrderTicket(); min_ticket_profit = OrderProfit() + OrderComission() + OrderSwap();
            }
        }
     }
     return;
}
bool CloseOrderTicket(int max_ticket, int min_ticket)
{  
    for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) 
     {
        if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
        {
            if(OrderTicket()== max_ticket || OrderTicket()==min_ticket) 
            {
                double pr=0.0;
                  if(OrderType()==OP_BUY) pr = Bid;
                  else                    pr = Ask;
                
                 if (!OrderClose(OrderTicket(), OrderLots(), pr, slip))
                       Print("Не удалось закрыть ордер # ",OrderTicket(), " Error ", GetLastError());
            }
        }
     }
   return(false);   
} 

 


Для тестера пойдет, для реала нужно делать кучу проверок.

Изменено пользователем usver73
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
5 часов назад, usver73 сказал:

Во первых, в функцию нужно передать PriceType.  В таком виде выдаст ошибку при компиляции.

Во вторых, в функцию нужно передать массив, в который будет скопированы значения цены, которые в последствии будут усредняться. Нужно снаружи объявить double Price[] и по ссылке её воткнуть в объявление функции.

В третьих, в каждом case  нужно писать ArrayCopy(), с помощью которой будет копироваться из источников (например, close[]) в получателя price[] набор значений цены

Как то так, что ли?

 

 

 

 

double Price[]; 

...

double Price_ma(const double&open[],const double &high[],const double &low[],const double &close[])
  {
   double res;
   switch(PriceType) //"Во первых PriceType..." Вроде как здесь передана
      {
      case PRICE_CLOSE: res=ArrayCopy(Price, close, 0, 0, WHOLE_ARRAY); break; 
      case PRICE_OPEN:  res=ArrayCopy(Price, open, 0, 0, WHOLE_ARRAY); break; 
      case PRICE_HIGH:  res=ArrayCopy(Price, high, 0, 0, WHOLE_ARRAY); break;
      case PRICE_LOW:   res=ArrayCopy(Price, low, 0, 0, WHOLE_ARRAY); break; 
      case PRICE_MEDIAN:  res=(ArrayCopy(Price, high, 0, 0, WHOLE_ARRAY)+ArrayCopy(Price, low, 0, 0, WHOLE_ARRAY))/2.0; break;
      case PRICE_TYPICAL: res=(ArrayCopy(Price, high, 0, 0, WHOLE_ARRAY)+ArrayCopy(Price, low, 0, 0, WHOLE_ARRAY)+ArrayCopy(Price, close, 0, 0, WHOLE_ARRAY))/3.0; break;
      case PRICE_WEIGHTED:res=(ArrayCopy(Price, high, 0, 0, WHOLE_ARRAY)+ArrayCopy(Price, low, 0, 0, WHOLE_ARRAY)+2*ArrayCopy(Price, close, 0, 0, WHOLE_ARRAY))/4.0; break;
      }
   return(res);
  }

 

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
14 минут назад, Ar4i сказал:

Как то так, что ли?

посмотри в справке раздел "Доступ к таймсериям и данным индикаторов", в частности CopyClose, CopyRates.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Всем доброго дня! Помогите начинающему программисту, "пишу"(собираю по блокам, если понимаю код блока) советник.

Советник выставляет по обе стороны от цены сетку из ордеров байлимит и селлимит, по 4 с каждой стороны, при срабатывании в одном из направлении, противоположные отложенные ордера удаляются. Теперь у меня задача: так как это лимитки, то мне необходимо, если первый (самый ближний к цене закрылся по тейкпрофиту, то несработанные лимитки этого же типа удалялись).

Коротко:

Если любой из ордеров закрылся по тейкпрофиту, то все отложенные необходимо удалить, подскажите пожалуйста код

Спасибо!

 

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Всем привет! Возник такой вопрос, может и бредовый.

Хочу создать советника, который будет торговать по областям поддержки/сопротивления. При этом области поддержки/сопротивления я буду рисовать ему сам, а советник при достижении ценой этих областей, будет совершать сделки, а так же сопровождать их по тому алгоритму, который я ему задам. Возможно ли такое реализовать? Сможет ли советник видеть объекты на графике, границы этих объектов, и ориентироваться на эти данные. Либо же советник может брать данные только из буфера индикатора? Области поддержки/сопротивления можно было бы отмечать на графике с помощью обычных линий или прямоугольников. На скринах показал каким образом я это вижу. 

Дело в том, что написать толковый индикатор, который будет строить области Поддержки/сопротивления не так просто. Зачастую руками приходится строить области П/С в тех местах, где индикатор их никогда не построит.

Если торговать руками, и все делать руками, то построить области П/С нет проблемы. Но! Выжидать точку входа зачастую нет времени (есть работа, нужно спать когда-то), а задать советнику алгоритм, что делать на этих областях я могу. Вот и появилась идея полуавтоматической торговой системы.  

2021-09-25_11-36-35.png

2021-09-25_11-39-37.png

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
5 часов назад, Vovan777 сказал:

Сможет ли советник видеть объекты на графике, границы этих объектов, и ориентироваться на эти данные.

Сможет.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
14 часов назад, usver73 сказал:

Сможет.

Спасибо. Где порыть информацию? Что для этого нужно? Дайте пожалуйста, хоть какую-нибудь зацепку.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
33 минуты назад, Vovan777 сказал:

Где порыть информацию?

В первую очередь в справке в разделе Работа с объектами.

Там есть примеры поиска объектов на чарте.

После нахождения можно прочитать их свойства, в частности, цена (или цены в случае с прямоугольником)

На mql5 поищите в cobebase, наверняка есть примеры. https://www.mql5.com/ru/code/20178

Первый попавшийся

 

 

Изменено пользователем usver73
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
//+------------------------------------------------------------------+
//|                                                     MACD 288.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict



extern string    MACDMA  = "Параметры MACD";
extern int FastEMA    = 12;
extern int SlowEMA    = 26;
extern int SignalEMA  = 9;
//+------------------------------------------------------------------+
extern string    Slope  = "Параметры Slope";
extern int       period = 163; 
extern int       method = 3;                         
extern int       price  = 0;
//+------------------------------------------------------------------+
extern bool   p           = true;    // задействовать паузу или нет
extern string TimeStart   = "18:30"; // время старта паузы
extern string TimeEnd     = "6:00";  // конец паузы
extern bool   TimeClose   = false;   // закрытия по времени

//+------------------------------------------------------------------+
double SL163, SL288;
static datetime lastbar;
 bool NewBar;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   if (Digits == 3 || Digits == 5)///для 3 и 5 значьных брокеров
   {

   }
   return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+    |
//+------------------------------------------------------------------+
void OnTick()
{///время работы
  datetime StartPause,EndPause;
  StartPause = StrToTime(TimeStart);  
  EndPause   = StrToTime(TimeEnd);
         if((p && StartPause < EndPause && (TimeCurrent() > StartPause &&  TimeCurrent() < EndPause)))
           {
            Comment("Пауза в работе советника");
            return;
           }
         if((p && StartPause > EndPause && (TimeCurrent() > StartPause ||  TimeCurrent() < EndPause)))
           {
            Comment("Пауза в работе советника");
            return;
           }
           
 ///индикаторы
SL163 = iCustom(NULL, 0, "Slope Direction Line", period,  method, price, 1,0)

///условия сигнала
   NewBar=isNewBar();
  if (   SL163 > Bid && SellSignal()==true &&  NewBar)
   { 
       PlaySound("alert.wav");
   }
  if (  SL163 < Ask &&  BuySignal()==true &&  NewBar )
   {
      PlaySound("alert.wav");
   }
  
}
bool isNewBar()
{
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
}  
//+------------------------------------------------------------------+

  //возвращает данные красного буфера 
double Reds(int shift)
{
  double buf = iCustom(NULL, 0, "MACD 2Line", FastEMA,  SlowEMA, SignalEMA, 3, shift); 
  return(buf);
}
  //возвращает данные зеленого буфера 
  double Greens(int shift)
{
  double buf = iCustom(NULL, 0, "MACD 2Line", FastEMA,  SlowEMA, SignalEMA, 2, shift);
  return(buf);
}

bool SellSignal()
{
  //если последний столбик красный, а предпоследний зеленый
  if(Reds(1)!=0 && Greens(2)!=0) return(true);

  else return (false);
}
bool BuySignal()
{
  //если последний столбик зеленый, а предпоследний красный
  if(Greens(1)!=0 && Reds(2)!=0) return(true);

  else return (false);
}

Добрый вечер, в чем я тут затупил? Направьте на истины)

 

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
38 минут назад, d1w4m3 сказал:

Добрый вечер, в чем я тут затупил?

на такой вопрос хочется ответить- Везде! :)
Неужели трудно сформулировать конкретную проблему?
А вообще, если правильно понял хотелки, то должно быть примерно так:
 

bool Sell_signal = false;
bool Buy_signal  = false;

void OnTick()
{///время работы
  datetime StartPause,EndPause;
  StartPause = StrToTime(TimeStart);  
  EndPause   = StrToTime(TimeEnd);
         if((p && StartPause < EndPause && (TimeCurrent() > StartPause &&  TimeCurrent() < EndPause)))
           {
            Comment("Пауза в работе советника");
            return;
           }
         if((p && StartPause > EndPause && (TimeCurrent() > StartPause ||  TimeCurrent() < EndPause)))
           {
            Comment("Пауза в работе советника");
            return;
           }
           
 ///индикаторы
SL163 = iCustom(NULL, 0, "Slope Direction Line", period,  method, price, 1,0)

///условия сигнала
   NewBar=isNewBar();
   
   if(NewBar)
   {
      Sell_signal = SellSignal();
      Buy_signal = BuySignal();
   }  
  if (   SL163 > Bid && Sell_signal)
   { 
       PlaySound("alert.wav");
   }
  else if (  SL163 < Ask &&  Buy_signal)
   {
      PlaySound("alert.wav");
   }
  
}

п.с. Реально по логике есть необходимость каждый тик рассчитывать SL163? Это сильно тормозит работу.
Обычно индикаторы смотрят на закрытых свечах при поступлении нового бара...

  • Огонь! 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
13 часов назад, usver73 сказал:
      Sell_signal = SellSignal();
      Buy_signal = BuySignal();

Объясните пожалуйста, почему в таком виде запись, а так не льзя 

SellSignal()==true 
BuySignal()==true

В чем разница не пойму?

 

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
1 минуту назад, d1w4m3 сказал:

В чем разница не пойму?

Обращение к функциям SellSignal() происходит один раз в свечу.

Если бар уже не новый (на втором тике бара и далее), то значение функций мы не получим. Поэтому в начале нового бара мы проверяем индикаторы, делаем выводы о наличии сигнала и запоминаем в глобальных переменных

  • Лайк 1
  • Спасибо 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
1 час назад, usver73 сказал:

Обращение к функциям SellSignal() происходит один раз в свечу.

Если бар уже не новый (на втором тике бара и далее), то значение функций мы не получим. Поэтому в начале нового бара мы проверяем индикаторы, делаем выводы о наличии сигнала и запоминаем в глобальных переменных

Тогда звук поступает на каждом баре после сформирования  условия SellSignal(), извиняюсь что не дал точное определение, задача стояла, чтобы звук был только в момент формирования условия, 1 раз

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
2 минуты назад, d1w4m3 сказал:

Тогда звук поступает на каждом баре после сформирования  условия SellSignal()

вообще то он должен сигнализировать каждый тик пока соблюдается условие. 

 if (   SL163 > Bid && Sell_signal)

Sell_signal держится в течение свечи в одном значении. Если это true, то каждый тик, пока будет условие SL163 > Bid выполняться, будет поступать сигнал. Это точно соответствует ТЗ?
Если все таки логика верна, то можно добавить флаг новой свечи, наподобие логики ф.isNewBar()

datetime last_sell_time; //на глобальном уровне

  if (   SL163 > Bid && Sell_signal)
   { 
       if(last_sell_time != TimeCurrent())
       {  
          last_sell_time = TimeCurrent()   
          PlaySound("alert.wav");
       } 
   }


п.с. не знаю индикатор MACD 2Line, но подозреваю, что вы пытаетесь поймать смену цвета (знака гистограммы). Такое условие не может происходить в одном направлении два раза подряд. Если все таки такое имеет место быть, то  разбирайтесь с лоикой чтения буферов.
п.п.с.
функции Reds() и Greens() идентичны.
Добавьте в входные параметры номер буфера и сделайте единую функцию

  • Спасибо 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
В 27.09.2021 в 18:04, d1w4m3 сказал:
double Reds(int shift)
{
  double buf = iCustom(NULL, 0, "MACD 2Line", FastEMA,  SlowEMA, SignalEMA, 3, shift); 
  return(buf);
}
  //возвращает данные зеленого буфера 
  double Greens(int shift)
{
  double buf = iCustom(NULL, 0, "MACD 2Line", FastEMA,  SlowEMA, SignalEMA, 2, shift);
  return(buf);
}

Они идентичны но буфера подобранны правильно, другая сова по тому же принципу открывает ордера все гуд, но вот звук постоянно идет на каждом новом тике, после формирования условия, но все ок, спасибо за путь наставления, самому интересно разобраться, за одно и подучиться

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
16 минут назад, d1w4m3 сказал:

но вот звук постоянно идет на каждом новом тике

то решение, которое предложил разве не блокирует лишний сигнал?
 

double GetMACD(int shift, int buffer)
{
  return(iCustom(NULL, 0, "MACD 2Line", FastEMA,  SlowEMA, SignalEMA, buffer, shift)); 
}
// вызываем:
double reds_1 = GetMACD(1,2);
double reds_2 = GetMACD(2,2);
double greens_1 = GetMACD(1,3);
double greens_2 = GetMACD(2,3);
//номера буферов и номера свечей написал по памяти, мог ошибиться

 

 

  • Спасибо 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
4 минуты назад, usver73 сказал:

то решение, которое предложил разве не блокирует лишний сигнал?

Помогло конечно, спасибо

 

4 минуты назад, usver73 сказал:
double GetMACD(int shift, int buffer)

до такой записи еще не дорос, по старому  привык(но буду учиться заново, еще раз спасибо

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Доброго времени суток подскажите пожалуйста Вот две функции: калькуляции  профита сетки ордеров и функция закрытия всех ордеров  а также условие при котором закрываются ордера.

//+------------------------------------------------------------------+
void ClosseAll()
{
  for(int i = OrdersTotal()-1; i>=0; i--)
  {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
       if (OrderType() == OP_BUY)
         { 
         if (!OrderClose(OrderTicket(), OrderLots(), Bid, slip))
             Print("Не удалось закрыть ордера на покупку!");
         }
       if (OrderType() == OP_SELL)
         { 
         if (!OrderClose(OrderTicket(), OrderLots(), Ask, slip))
             Print("Не удалось закрыть ордер на продажу!");
         }
     }
  }
}
//+------------------------------------------------------------------+
double CalculiteProfit()
{
    double oProfit = 0;
    for(int i = OrdersTotal()-1; i>=0; i--)
    {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
        if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
        {
          if (OrderType() == OP_BUY || OrderType() == OP_SELL)
          {
            oProfit += OrderProfit();
          }
        }
      }
    }
    return(oProfit);
}

 

double op = CalculiteProfit(); 
     if (op >= Profit)
     {
       ClosseAll();
     }

Вопрос состоит в том можно ли с минимальной доработкой калькулировать и закрывать не все прибыльные на все убыточные ордера а закрывать всеми прибыльными ордерами только определенный процент от каждого убыточного ордера

image.thumb.png.8bc07c152bd662af6f8e805be10572c1.png 

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Всем доброго времени! Кто может поделиться понятным кодом для открытия ордеров при противоположном сигнале индикатора? Допустим была покупка, индикатор показал продажу, тут же закрываем покупку и открываем продажу и наоборот.

 

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
2 часа назад, diodio сказал:

Допустим была покупка, индикатор показал продажу, тут же закрываем покупку и открываем продажу и наоборот.

а в чем именно сложность?
Алгоритм примерно такой:
1. Получили сигнал на СЕЛЛ.
1.1. Если в рынке есть ордер БАЙ, то закрываем его.
1.2. Открываем ордер на СЕЛЛ. (дополнительно проверяем- есть ли ордер СЕЛЛ в рынке на случай, если по логике допускается только один ордер по направлению).

Возможен вариант, когда открываем СЕЛЛ двойной лотностью, а потом через OrderCloseBy делаем закрытие БАЙ. Справка:  https://docs.mql4.com/ru/trading/ordercloseby

  • Спасибо 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
2 часа назад, usver73 сказал:

а в чем именно сложность?

В том то и дело что сложности никакой не должно быть, просто ордера неправильно открывались по индикатору, и стояла настройка на открытие по индикатору на нулевом баре. Теперь исправил сигнал индикатора на открытие по первому бару, и здесь всё пошло так как задумано. Только теперь я не понимаю почему нулевой бар не давал сигнал на открытие ордера, хотя при этом рисовалась стрелочка у индикатора?! ((

Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...