Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 457

 

Ничего не понимаю. Мой вопрос перекинул модератор с МКЛ5 на МКЛ4. Перешел по ссылке - да, мой вопрос висит, но там последний ответ 5.02.2018. Зашел сюда - тоже МКЛ4 и жизнь кипит...Так чего модератор кидает в мёртвую ветку? Ладно, проехали. Теперь по существу: перекидываю сюда свою "проблему".


Vladimir Karputov:

Для условия 1 выставляйте идентификатор magic number +1, для условия 2 magic number +2 и так далее. Таким образом потом можно понять, что эта позиция была открыта по условию 1 или по условию 2 ...

Добрый день. Получилось только для одной позиции БАЙ. Выставленный для СЕЛЛ  магик не работает почему-то. Всё абсолютно идентично, за исключением самого магика конечно. Что я сделал не так?

 

int total=OrdersTotal();

      for(int i=OrdersTotal()-1;i>=0;i--)

      {

        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

         {

         if(TimeCurrent()>OrderOpenTime()+100 && OrderTicket() && OrderType()==OP_BUY && (MathAbs(WPR1)<5))

         rez =  OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); 

        

         if(TimeCurrent()>OrderOpenTime()+100 && OrderTicket() && OrderType()==OP_BUY && OrderMagicNumber==111 && MathAbs(WPR1)<20)

         rez =  OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow);

      

         if(TimeCurrent()>OrderOpenTime()+100 && OrderTicket() && OrderType()==OP_SELL && OrderMagicNumber==222 && MathAbs(WPR1)>97.55)

         rez =  OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow); 

           

         if(TimeCurrent()>OrderOpenTime()+100 && OrderTicket() && OrderType()==OP_SELL && MathAbs(WPR1)>96)

         rez =  OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,Yellow);               

         }

       continue;  

      } 
 
novichok2018:

Ничего не понимаю. Мой вопрос перекинул модератор с МКЛ5 на МКЛ4. Перешел по ссылке - да, мой вопрос висит, но там последний ответ 5.02.2018. Зашел сюда - тоже МКЛ4 и жизнь кипит...Так чего модератор кидает в мёртвую ветку? Ладно, проехали. Теперь по существу: перекидываю сюда свою "проблему".


Добрый день. Получилось только для одной позиции БАЙ. Выставленный для СЕЛЛ  магик не работает почему-то. Всё абсолютно идентично, за исключением самого магика конечно. Что я сделал не так?

 

1. Он не знает mql4.

2. Чтобы закрыть ордер магиком 222 его надо сначала открыть с магиком 222. Посмотрите с каким магиком открываются ордера SELL

3. После OrderMagicNumber обязательно должны быть скобки ()

if(TimeCurrent()>OrderOpenTime()+100 && OrderTicket() && OrderType()==OP_SELL && OrderMagicNumber==222 && MathAbs(WPR1)>97.55)

4. К чему в условии выделенное?

if(TimeCurrent()>OrderOpenTime()+100 && OrderTicket() && OrderType()==OP_BUY && (MathAbs(WPR1)<5))
 

Народ такой вопрос есть - как в одномерный массив засунуть значения переменной?

В хелп не отправляйте - там для подобной задачи примера НЕТ.


Допустим есть переменная a, которая меняется при определённых условиях.

Мне нужно, что-бы в массив записывались 3 последних значения этой переменной. Как это реализуется в mql4 ?


Пишу    int mas[3];

mas[]=a;    внутри цикла после условия, при котором а меняется,

но нифига не работает, хотя логически должно.  компилятор выдаёт    ']' - expression expected, хочет что-бы я в mas[]=a  внутри скобок засунул какое-то неведомое выражение.

Есть ли вообще в MQL4 какая-то функция, что-бы массив заполнялся значением переменной при каждой итерации цикла?


 
John Smith:

Народ такой вопрос есть - как в одномерный массив засунуть значение переменной?

В хелп не отправляйте - там для подобной задачи примера НЕТ.


Допустим есть переменная a, которая меняется при определённых условиях.

Мне нужно, что-бы в массив записывались 3 последних значения этой переменной. Как это реализуется в mql4 ?


Пишу    int mas[3];

mas[]=a;    внутри цикла после условия, при котором а меняется,

но нифига не работает, хотя логически должно.  компилятор выдаёт    ']' - expression expected, хочет что-бы я в mas[]=a  внутри скобок засунул какое-то неведомое выражение.

Есть ли вообще в MQL4 какая-то функция, что-бы массив заполнялся значением переменной при каждой итерации цикла?


Как считаете, в какую ячейку массива вы помещаете значение переменной 'a' таким вот образом: mas[]=a; ?

Я бы вас в хелп отправил, читать с самого его начала :)

 
John Smith:

Народ такой вопрос есть - как в одномерный массив засунуть значения переменной?

В хелп не отправляйте - там для подобной задачи примера НЕТ.


Допустим есть переменная a, которая меняется при определённых условиях.

Мне нужно, что-бы в массив записывались 3 последних значения этой переменной. Как это реализуется в mql4 ?


Пишу    int mas[3];

mas[]=a;    внутри цикла после условия, при котором а меняется,

но нифига не работает, хотя логически должно.  компилятор выдаёт    ']' - expression expected, хочет что-бы я в mas[]=a  внутри скобок засунул какое-то неведомое выражение.

Есть ли вообще в MQL4 какая-то функция, что-бы массив заполнялся значением переменной при каждой итерации цикла?


Наверное читать надо не только примеры кодов, а ещё и другие буковки.

Вот цитата из документации:

Группа функций для работы с массивами

Допускаются не более чем четырехмерные массивы. Индексация каждого измерения производится от 0 до размер_измерения-1. В частном случае одномерного массива из 50 элементов обращение к первому элементу будет выглядеть как array[0], к последнему элементу - array[49].

 
Alexey Viktorov:

1. Он не знает mql4.

2. Чтобы закрыть ордер магиком 222 его надо сначала открыть с магиком 222. Посмотрите с каким магиком открываются ордера SELL

3. После OrderMagicNumber обязательно должны быть скобки ()

4. К чему в условии выделенное?

Спасибо за ответ. Понятно, что сначала надо открыть с магиком. И ордертикет убрал, и комментариями проверил логику. Оказалось, что закрытие позиций происходит по условиям закрытия первой открытой позиции. То есть, если сначала открыли БАЙ или СЕЛЛ с условием на закрытие 1, а потом открылась вторая такая же позиция, но с условием на закрытие 2, то это условие закрытия игнорируется и вторая позиция, не смотря на другой магик, закрывается тоже по условию 1. 

 Применил break после закрытия ордера, но получилось решение наполовину: только если открываются однотипные позиции. Если же например, сначала открылась СЕЛЛ и ещё не закрылась, а в это время открывается и закрывается БАЙ то СЕЛЛ уже не видит условий для своего закрытия до того момента, как откроется и закроется (по своим условиям) другая СЕЛЛ. И если вдруг опять откроются и закроются БАЙ, то она опять пропускает свои условия закрытия. И как быть?

 
Всем добрый день. Уважаемые программисты, помогите пожалуйста вставить в индикатор строку с возможностью указания звукового файла, для каждого Alert3.Lv1;2;3, чтобы срабатывал разный звук, который укажешь. Сам я не соображаю коде и программировании.
Файлы:
 
Добрый день господа программисты и знатоки MQL! Необходим советник останавливающий автоторговлю по новостям, может есть у когото? То что нашел в сети либо уже не работает, либо работаетт каряво. Или может кто написать на основе индикатора urdala?
 
Привет ребята. Подскажите как избавиться от ошибки [Trade context is busy]
 
Rustam Bikbulatov:
Привет ребята. Подскажите как избавиться от ошибки [Trade context is busy]
if(!IsTradeContextBusy())   //торговый поток свободен
  {
 // здесь оформляем запрос
 // на торговую операцию

  }
Причина обращения: