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

_SERG_

Активный участник
Доброго дня! Появились проблемы в советниках при переходе от одного брокера (ДЦ) к другому (ДЦ)
не работает такая конфига (функции открытия трала и безубытка)
STOPLEVEL= (int)MarketInfo(Symbol(),MODE_STOPLEVEL);
if (TrailingStop>=STOPLEVEL) TrailingStop();
if (NoLoss>=STOPLEVEL) NoLoss();
у предыдущего был =3 , у этого =6, и естественно показывает в инфо, всё равно не работает, так же как и ордер отложенный -тоже проблема... (начиная от 130 ошибки и т.д.) Что кто посоветует?

Напуржил, напуржил, чего три, чего шесть?!!
PHP:
STOPLEVEL= (int)MarketInfo(Symbol(),MODE_STOPLEVEL);
Print (IntegerToString((int)MarketInfo(Symbol(),MODE_STOPLEVEL))); // Советую
   if (TrailingStop>=STOPLEVEL) TrailingStop();
      if (NoLoss>=STOPLEVEL) NoLoss();

Цыферки не бъют, раз 130 ошибка, на MarketInfo(Symbol(),MODE_POINT), (int)MarketInfo(Symbol(),MODE_STOPLEVEL)) умножал?
 

RV_aka_rvn

Активный участник
Напуржил, напуржил, чего три, чего шесть?!!
PHP:
STOPLEVEL= (int)MarketInfo(Symbol(),MODE_STOPLEVEL);
Print (IntegerToString((int)MarketInfo(Symbol(),MODE_STOPLEVEL))); // Советую
   if (TrailingStop>=STOPLEVEL) TrailingStop();
      if (NoLoss>=STOPLEVEL) NoLoss();

Цыферки не бъют, раз 130 ошибка, на MarketInfo(Symbol(),MODE_POINT), (int)MarketInfo(Symbol(),MODE_STOPLEVEL)) умножал?
На Поинт умножал, проверка на 3-5ти и т.д. знак тоже есть
STOPLEVEL=6
Попробовал вручную ставить, не даёт (рычит :) ), получается поставить стоплевел только не ближе 8 пунктов
 

_SERG_

Активный участник
На Поинт умножал, проверка на 3-5ти и т.д. знак тоже есть
STOPLEVEL=6
Попробовал вручную ставить, не даёт (рычит :) ), получается поставить стоплевел только не ближе 8 пунктов

STOPLEVEL=6 - в пунктах, а в цене, 0,00006 ? И что со спрэдом? И есть ли там заморозка? Причём тут проверка на количество, цифры проверь.
Типа так: Print (IntegerToString((int)MarketInfo(Symbol(),MODE_STOPLEVEL))); и другие участвующие в расчёте.
Или запусти в отладчике на том ДЦ, которые "глючит", по твоему мнению.
 
Последнее редактирование:

Ugar

Гуру форума
Добрый день!

С днем победы!!

Ребят, можете на примере показать как найти виршинку и низинку в обратном порядке, скажем с начала торговой сессии 00:00:00 по десятый бар, скажем 30 минутного графика??
Надо для начала найти бар начала торговой сессии на М30.
Используется время открытия дневного бара.
Код:
int start_bar=iBarShift(NULL,PERIOD_M30,iTime(NULL,PERIOD_D1,0));
Далее можно найти минимум от бара начала торговой сессии и на 10 баров вглубь истории.
Код:
double low=iLow(NULL,PERIOD_M30,iLowest(NULL,PERIOD_M30,MODE_LOW,10,start_bar));
 

AskBid

Интересующийся
Надо для начала найти бар начала торговой сессии на М30.
Используется время открытия дневного бара.
Код:
int start_bar=iBarShift(NULL,PERIOD_M30,iTime(NULL,PERIOD_D1,0));
Далее можно найти минимум от бара начала торговой сессии и на 10 баров вглубь истории.
Код:
double low=iLow(NULL,PERIOD_M30,iLowest(NULL,PERIOD_M30,MODE_LOW,10,start_bar));
Спасибо, но это не то что мне хотелось бы увидеть. у Вас смещение баров уходит в прошлое, ( <--- 09.05.2017 00:00) а нужно в настоящее, к примеру от этой даты на 10 баров.. -->
 

Ugar

Гуру форума
Спасибо, но это не то что мне хотелось бы увидеть. у Вас смещение баров уходит в прошлое, ( <--- 09.05.2017 00:00) а нужно в настоящее, к примеру от этой даты на 10 баров.. -->
Ну так аналогично же. Только надо отсчитывать не от бара начала дня, а от бара начала дня - 10 баров. Только надо сначала убедиться что этот бар уже существует, то есть время появления этого бара уже настало.
 

RV_aka_rvn

Активный участник
STOPLEVEL=6 - в пунктах, а в цене, 0,00006 ? И что со спрэдом? И есть ли там заморозка? Причём тут проверка на количество, цифры проверь.
На пятизнаке было бы 60 ;)

Нашёл в чём причина, как только вывел на экран, всё встало на свои места, на разных валютных парах stoplevel разный оказался... Всё равно спасибо, что откликнулись!
 

AskBid

Интересующийся
Ну так аналогично же. Только надо отсчитывать не от бара начала дня, а от бара начала дня - 10 баров. Только надо сначала убедиться что этот бар уже существует, то есть время появления этого бара уже настало.

- (Минус) 10 баров? . если текущий бар это нулевой, то -10 это в самом начале истории.. Не получается, пробовал без проверки, т.к, кол-во баров уже было сформировано.
 

Ugar

Гуру форума
- (Минус) 10 баров? . если текущий бар это нулевой, то -10 это в самом начале истории.. Не получается, пробовал без проверки, т.к, кол-во баров уже было сформировано.
-10 баров от текущего это несуществующий бар в будущем, а не в начале истории.
Надо -10 баров от того бара на котором день начался, а не от текущего.
Код:
double low=0;
int start_bar=iBarShift(NULL,PERIOD_M30,iTime(NULL,PERIOD_D1,0))-10;
if(start_bar>=0)//Проверка на то что бар уже есть
{
low=iLow(NULL,PERIOD_M30,iLowest(NULL,PERIOD_M30,MODE_LOW,10,start_bar));
}
На выходе в low будет найденный минимум если стартовый бар существует, или 0 если время ещё не настало.
 
Последнее редактирование:

AskBid

Интересующийся
-10 баров от текущего это несуществующий бар в будущем, а не в начале истории.
Надо -10 баров от того бара на котором день начался, а не от текущего.
Код:
double low=0;
int start_bar=iBarShift(NULL,PERIOD_M30,iTime(NULL,PERIOD_D1,0))-10;
if(start_bar>=0)//Проверка на то что бар уже есть
{
low=iLow(NULL,PERIOD_M30,iLowest(NULL,PERIOD_M30,MODE_LOW,10,start_bar));
}
На выходе в low будет найденный минимум если стартовый бар существует, или 0 если время ещё не настало.

Спасибо большое!!
 

AskBid

Интересующийся
Здравствуйте! Ugar, можно ещё один вопрос, а как найти low НЕ в диапазоне 10 баров, а по всем сформированным барам М30 в том же обратном порядке, как Вы мне и показали до этого ?
 

Ugar

Гуру форума
Здравствуйте! Ugar, можно ещё один вопрос, а как найти low НЕ в диапазоне 10 баров, а по всем сформированным барам М30 в том же обратном порядке, как Вы мне и показали до этого ?
Тогда начинать надо с последнего сформированного бара 1, а количество Bars-1.
Код:
double low=iLow(NULL,PERIOD_M30,iLowest(NULL,PERIOD_M30,MODE_LOW,Bars-1,1));
 

frozen1989

Активный участник
Мувинги с Д1

Кто знает как сделать так чтобы мувинг с Д1 отображался на м5?:)
 

AskBid

Интересующийся
Тогда начинать надо с последнего сформированного бара 1, а количество Bars-1.
Код:
double low=iLow(NULL,PERIOD_M30,iLowest(NULL,PERIOD_M30,MODE_LOW,Bars-1,1));

извините, я новичок в этом деле, учусь..может я не правильно излагаю свою мысль, но, теперь в вашем коде исчезла переменная start_bar, как без нее, ведь она возвращает индекс бара по времени .. от которого и начинаем выборку.
 

Ugar

Гуру форума
извините, я новичок в этом деле, учусь..может я не правильно излагаю свою мысль, но, теперь в вашем коде исчезла переменная start_bar, как без нее, ведь она возвращает индекс бара по времени .. от которого и начинаем выборку.
Теперь в качестве индекса 1, это и есть последний среди сформированных баров. Получается 0, не сформированный бар пропустить, а по всем остальным барам будет поиск.
 

AskBid

Интересующийся
Теперь в качестве индекса 1, это и есть последний среди сформированных баров. Получается 0, не сформированный бар пропустить, а по всем остальным барам будет поиск.

Не получается понять, почему бар открытия по времени прошедших суток является последним? Так, ещё раз попробую обяснить, вот ваша часть кода:

PHP:
double low=0;
int start_bar=iBarShift(NULL,PERIOD_M30,iTime(NULL,PERIOD_D1,0))-10;
if(start_bar>=0)//Проверка на то что бар уже есть
{
low=iLow(NULL,PERIOD_M30,iLowest(NULL,PERIOD_M30,MODE_LOW,10,start_bar));
}

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

Ugar

Гуру форума
Не получается понять, почему бар открытия по времени прошедших суток является последним?

Здравствуйте! Ugar, можно ещё один вопрос, а как найти low НЕ в диапазоне 10 баров, а по всем сформированным барам М30 в том же обратном порядке, как Вы мне и показали до этого ?
По всем сформированным барам это значит по всем кроме 0, который не сформированный.
 

AskBid

Интересующийся
По всем сформированным барам это значит по всем кроме 0, который не сформированный.

Не по всем, не по всей истории, а от нужного нам времени..Пересмотрите пожалуйста мое сообщение!! Отредактировал...
 
Последнее редактирование:

Ugar

Гуру форума
Не по всем, не по всей истории, а от нужного нам времени..Пересмотрите пожалуйста мое сообщение!! Отредактировал...
Если нужно искать минимум от начала дня до последнего сформированного бара, то это поиск слева направо. Это придётся писать по другому, а именно тупо в цикле перебирать бары и искать минимум.
iLowest ищет справа налево. Ему нужно задавать бар справа от которого начинать и количество баров.
Бар с которого начинать это последний сформированный 1.
А количество баров это индекс бара начала дня.
Код:
  int bars=iBarShift(NULL,PERIOD_M30,iTime(NULL,PERIOD_D1,0));       
double low=0;
if(bars>0)//Если есть хотя бы 1 сформированный бар от начала дня
{
low=iLow(NULL,PERIOD_M30,iLowest(NULL,PERIOD_M30,MODE_LOW,bars,1));
}
 
Последнее редактирование:

AskBid

Интересующийся
Если нужно искать минимум от начала дня до последнего сформированного бара, то это поиск слева направо. Это придётся писать по другому, а именно тупо в цикле перебирать бары и искать минимум.
iLowest ищет справа налево. Ему нужно задавать бар справа от которого начинать и количество баров.
Бар с которого начинать это последний сформированный 1.
А количество баров это индекс бара начала дня.
Код:
  int bars=iBarShift(NULL,PERIOD_M30,iTime(NULL,PERIOD_D1,0));       
double low=0;
if(bars>0)//Если есть хотя бы 1 сформированный бар от начала дня
{
low=iLow(NULL,PERIOD_M30,iLowest(NULL,PERIOD_M30,MODE_LOW,bars,1));
}

Ну теперь понятно мне, что придется в цикле перебирать все бары, однако, покаместь я не знаю как это сделать.. полагаю, что разберусь..Спасибо Вам огромное, что доходчиво показали мне на примерах.
 
Верх