Ваши вопросы по языку MQL4

gis63

Прохожий
Выдаются ошибки

Код:
int orders=0;
int Magic=33;
//Счётчик ордеров с маджиком
int total=OrdersTotal();
for(int i=total-1; i>=0; i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
         if(OrderMagicNumber()==Magic)orders++;
         }
//Если ордеров не найдено
if(orders==0)
{

}

При проверке выявляются две ошибки.
 

Ugar

Гуру форума
При проверке выявляются две ошибки.
int orders=0;
int Magic=33; //Счётчик ордеров с маджиком
int total=OrdersTotal();
for(int i=total-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderMagicNumber()==Magic)orders++;
}
}
//Если ордеров не найдено
if(orders==0)
{

}
Пропустил скобку.
 
Последнее редактирование:

gis63

Прохожий
Ничего не изменилось

int orders=0;
int Magic=33; //Счётчик ордеров с маджиком
int total=OrdersTotal();
for(int i=total-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderMagicNumber()==Magic)orders++;
}
}
//Если ордеров не найдено if(orders==0)
{

}
Пропустил скобку.
Все рано две ошибки.
 

Ugar

Гуру форума
Все рано две ошибки.
Код:
   int orders=0;
   int Magic=33;
   //Счётчик ордеров с маджиком
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
         if(OrderMagicNumber()==Magic)orders++;
         }
      }
   //Если ордеров не найдено
   if(orders==0)
      {

      }
Проверил. У меня нет ошибок при компиляции.
 

panand

Местный знаток
Добрый день!
В MQL существует такая вещь как фиксация профита стопового ордера?
Например, имеем несколько стоповых ордеров ,отделенные между собой, заданным количеством пунктов-шагом. От выбранного ордера задается фиксация прибыли через заданное количество пунктов,который ордер должен пройти ,либо заданный ценовой уровень другого ордера(колено) на котором должен зафиксироваться профит.
Понятие фиксации профита,это когда рыночная цена пройдя заданный ценовой уровень данного ордера фиксирует профит,где в дальнейшем прохождение рыночной цены далее или обратно в откат,не меняет саму уже фиксированную прибыль в увеличении профита или в уменьшении,далее в убыток.
Насколько я знаю,в коде существует пару функций- это либо закрытие по заданной цене , либо локирование путем встречного ордера.
Но меня не интересует закрытие или выставление встречного ордера для лока.
Скажите,кроме локирования или закрытия ордера при текущем цикле без фиксации по общему закрытию, существует ли алгоритм именно - фиксации профита ордера, без дальнейшего его изменения при любом движении рыночной цены и его сохранения до закрытия цикла и без помощи дополнительного ордера ?
Если существует,пожалуйста, назовите эту функцию или алгоритм, а если не существует,то опишите почему и возможно его создать.
Это вопрос задаю опытным,грамотным и изобретательным специалистам по программированию MQL.
Спасибо за внимание.
 

gis63

Прохожий
Проверил в двух терминалах

Код:
   int orders=0;
   int Magic=33;
   //Счётчик ордеров с маджиком
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
         if(OrderMagicNumber()==Magic)orders++;
         }
      }
   //Если ордеров не найдено
   if(orders==0)
      {

      }
Проверил. У меня нет ошибок при компиляции.

Проверил в двух терминалах Ошибки в следующих строках:
for(int i=total-1; i>=0; i--) и
if(orders==0)
 

mvn

Интересующийся
Никак не могу решить проблему с iMAOnArray()
Текст
//double STOX[ 100 ], MA_bar[100] ;
ArrayInitialize ( STOX, (double)0.0 );
ArrayInitialize ( MA_bar, (double)0.0 );
bool ee = ArraySetAsSeries( MA_bar, true );
int limit=100;
for(i=0; i<limit; i++)
{
m1 = 2
* NormalizeDouble(iStochastic(Symbol_t, TF, KK10, DD10, SS10, StochMode, StochPrice, MODE_MAIN,i)- 50, Digits+1);
m2 = 2* NormalizeDouble(iStochastic(Symbol_t, TF, KK11, DD11, SS11, StochMode, StochPrice, MODE_MAIN,i)- 50, Digits+1);
m3 = 2* NormalizeDouble(iStochastic(Symbol_t, TF, KK12, DD12, SS12, StochMode, StochPrice, MODE_MAIN,i)- 50, Digits+1);
m4 = 2* NormalizeDouble(iStochastic(Symbol_t, TF, KK13, DD13, SS13, StochMode, StochPrice, MODE_MAIN,i)- 50, Digits+1);
m5 = 2* NormalizeDouble(iStochastic(Symbol_t, TF, KK14, DD14, SS14, StochMode, StochPrice, MODE_MAIN,i)- 50, Digits+1);
m6 = 2* NormalizeDouble(iStochastic(Symbol_t, TF, KK15, DD15, SS15, StochMode, StochPrice, MODE_MAIN,i)- 50, Digits+1);
m7 = 2* NormalizeDouble(iStochastic(Symbol_t, TF, KK16, DD16, SS16, StochMode, StochPrice, MODE_MAIN,i)- 50, Digits+1);
m8 = 2* NormalizeDouble(iStochastic(Symbol_t, TF, KK17, DD17, SS17, StochMode, StochPrice, MODE_MAIN,i)- 50, Digits+1);

STOX = (m1+m2+m3+m4+m5+m6+m7+m8)/8;
} // for

for(i=0; i<limit; i++)
MA_bar[ i ] = iMAOnArray(STOX, 100, MASignal, 0, MAMode, i);

if( ticscount < 3)
{
Print(" i STOX MA_bar ");
for( i = 0; i < 10 ; i++) PrintFormat ( " %4i %8.2f %8.2f ", i, STOX, MA_bar[ i ] );
Print(" ");
for( i=90; i < 100; i++) PrintFormat ( " %4i %8.2f %8.2f ", i, STOX, MA_bar[ i ] );
}

Выдает на каждом тике:
STOX MA_bar
0 17.29 26.76
.........................
99 40.86 17.29
И MA_bar[0] = 26.76 на всех тиках, а вот MA_bar[99] всегда разные.
Поменял цикл на for(i=0; i<limit; i++). Ситуация практически не изменилась кроме самих значений MA_bar.
STOX MA_bar
0 10.43 6.77
.........................
99 7.66 10.43
И MA_bar[0] = 6.77 на всех тиках, а вот MA_bar[99] всегда разные.
Как вылезти из этой ситуации не пойму.
 

Ugar

Гуру форума
Кто в курсе про тестер МТ5? Интересует моделирует ли он тики на всех таймфреймах или только на текущем как в МТ4?
 

AlexeyVik

Программист mql4 mql5
Кто в курсе про тестер МТ5? Интересует моделирует ли он тики на всех таймфреймах или только на текущем как в МТ4?
Андрей, сам-то понял что сказал? Тики не зависят от таймфрема.
Если отговорился и хотел сказать инструмент, или валютная пара, то зачем это тебе? Ведь OnTick выполняется по приходу тика на текущем инструменте, а не на любом. Если-же нужны тики с другой валютной пары, то можно достать их функцией CopyTicks()
-https://www.mql5.com/ru/docs/series/copyticks
 

Ugar

Гуру форума
Андрей, сам-то понял что сказал? Тики не зависят от таймфрема.
Если отговорился и хотел сказать инструмент, или валютная пара, то зачем это тебе? Ведь OnTick выполняется по приходу тика на текущем инструменте, а не на любом. Если-же нужны тики с другой валютной пары, то можно достать их функцией CopyTicks()
-https://www.mql5.com/ru/docs/series/copyticks
Привет Алексей!
Я о другом. Допустим в советнике 2 МА, беру данные с текущего бара,
Один индикатор на текущем таймфрейме, другой на более старшем или более младшем.
В тестере МТ4. на текущем таймфрейме тики моделируются и МА на текущем будет менять значение с каждым тиком.
А МА не на текущем таймфрейме считается по барам из истории, без моделирования тиков и будет менять значение только при смене бара.
А как дела обстоят в тестере МТ5? Там тики для обоих МА будут моделироваться или как в МТ4 только для МА на текущем?
 

AlexeyVik

Программист mql4 mql5
Привет Алексей!
Я о другом. Допустим в советнике 2 МА, беру данные с текущего бара,
Один индикатор на текущем таймфрейме, другой на более старшем или более младшем.
В тестере МТ4. на текущем таймфрейме тики моделируются и МА на текущем будет менять значение с каждым тиком.
А МА не на текущем таймфрейме считается по барам из истории, без моделирования тиков и будет менять значение только при смене бара.
А как дела обстоят в тестере МТ5? Там тики для обоих МА будут моделироваться или как в МТ4 только для МА на текущем?
Теперь даже я понял. Не очень уверен, но кажется после долгих обсуждений всё-же сделали что последний бар пересчитывается.
А что мешает проверить? Выводишь в комментарий последние значения индикаторов и смотришь...
 

Ugar

Гуру форума
Теперь даже я понял. Не очень уверен, но кажется после долгих обсуждений всё-же сделали что последний бар пересчитывается.
А что мешает проверить? Выводишь в комментарий последние значения индикаторов и смотришь...
Я пока общаюсь с заказчиком. Он вообще сегодня впервые установил МТ5, до этого всегда торговал в квике.
Я ему рассказал про тестер, он заинтересовался. Вот возник вопрос, а я на него не смог ответить. Начну писать сов, первым делом выясню этот момент.
 

AlexeyVik

Программист mql4 mql5
Я пока общаюсь с заказчиком. Он вообще сегодня впервые установил МТ5, до этого всегда торговал в квике.
Я ему рассказал про тестер, он заинтересовался. Вот возник вопрос, а я на него не смог ответить. Начну писать сов, первым делом выясню этот момент.
У меня есть сов с двумя МА, исправить надо было только в одном период и вывести в коммент, я проверил. Тест на М15 с двумя МА с PERIOD_CURRENT и PERIOD_H1 в комментарии значения меняются на каждом тике.
 
  • Like
Реакции: Ugar

avr52

Новичок форума
Помогите, люди добрые советом! Учусь писать сова. Есть три индикаторных буфера, смотрю их значения через Comment. Когда срабатывает условие в сове, в буфере появляются цены - это нормально, нет условия - буферы заполнены одинаковыми большими числами, но это тоже подподает под условие. Как бы заменить числа на ноль. Смотрел в индюке, вроде бы инициализация на месте.
 

vladradon

Программист
Помогите, люди добрые советом! Учусь писать сова. Есть три индикаторных буфера, смотрю их значения через Comment. Когда срабатывает условие в сове, в буфере появляются цены - это нормально, нет условия - буферы заполнены одинаковыми большими числами, но это тоже подподает под условие. Как бы заменить числа на ноль. Смотрел в индюке, вроде бы инициализация на месте.
В индюке наверняка инициализация EMPTY_VALUE (пустые ячейки) и если заменить на нули, то индюк может работать не правильно. Можно в промежуточные переменные заносить данные из буферов индикаторов и обнулять эти переменные, если в них данные, выходящие за рамки допустимых значений. А дальше уже, если значения этих переменных не нулевые, можно использовать как сигнальные для дальнейшей работы сова.
 

mobidik

-----
Помогите, люди добрые советом! Учусь писать сова. Есть три индикаторных буфера, смотрю их значения через Comment. Когда срабатывает условие в сове, в буфере появляются цены - это нормально, нет условия - буферы заполнены одинаковыми большими числами, но это тоже подподает под условие. Как бы заменить числа на ноль. Смотрел в индюке, вроде бы инициализация на месте.

Если Вам нужно "Как бы заменить числа на ноль" в отображении comment-а, тогда сделайте так: для каждого значения, что выводится со значением EMPTY_VALUE - добавьте еще по одной переменной и нужно задать условие: если значение не равно EMPTY_VALUE, тогда новой переменной присвоить значение индикатора, иначе присвоить "0". Теперь в Comment выводить новые переменные.
 

avr52

Новичок форума
Спасибо всем кто ответил! Буду пробовать. Учиться, учиться и еще раз учиться ...
 

djasper

Интересующийся
Ребята как прописать сл. условие:
Произошло пересечение ма, ждём когда рси пересекает уровень 50 снизу вверх и входим. А в следующем пересечении рси уровня 50 не входим, а ждём пока ма опять пересекутся. Т.Е. входим на откате после первого пересечения ма.
 

Вложения

  • EURUSDH1.png
    EURUSDH1.png
    9,3 КБ · Просмотры: 28

AlexeyVik

Программист mql4 mql5
Ребята как прописать сл. условие:
Произошло пересечение ма, ждём когда рси пересекает уровень 50 снизу вверх и входим. А в следующем пересечении рси уровня 50 не входим, а ждём пока ма опять пересекутся. Т.Е. входим на откате после первого пересечения ма.
Используй флаг. МА пересеклись флаг = true, открыл ордер по пересечению RSI флаг = false и так далее.
 
Верх