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

fs256

Местный знаток
Уважаемые программисты, подскажите пожалуйста как написать функцию нахождения последней точки, ArrUp, или ArrDn для советника.

Судя по коду, стрелки появляются на предыдущем(1) баре.

Если есть верхняя стрелка:
if(iCustom(NULL,0,"FastZZ_Point",300,true,2,1)!=EMPTY_VALUE)
нижняя:
if(iCustom(NULL,0,"FastZZ_Point",300,true,3,1)!=EMPTY_VALUE)
 

vladradon

Программист
Задолбали меня эти "подводные камни": кто-нибудь считывал пинги функцией TerminalInfoInteger()? Типа:
PHP:
int Ping=TerminalInfoInteger(TERMINAL_PING_LAST);
У меня выдает постоянное значение, которое, не знаю даже, к чему отнести - постоянка 28000 типа. Пишу здесь, т.к. все где-то пропали...:D
 

Violetta

Новичок форума
Спасибо, только мне надо как раз в режиме false, тогда эти точки появляются редко
 

Violetta

Новичок форума
Судя по коду, стрелки появляются на предыдущем(1) баре.

Если есть верхняя стрелка:
if(iCustom(NULL,0,"FastZZ_Point",300,true,2,1)!=EMPTY_VALUE)
нижняя:
if(iCustom(NULL,0,"FastZZ_Point",300,true,3,1)!=EMPTY_VALUE)

А такой вопрос, на 1 баре у меня например находится точка ArrUp, и мне в этот момент надо определить нахождение последней точки ArrDn (в режиме false) когда она находится несколько баров назад
 

Violetta

Новичок форума
Уважаемые программисты, помогите пожалуйста, мне надо в момент появления точки

if(iCustom(NULL,0,"FastZZ_Point",300,false,2,1)!=EMPTY_VALUE)
ArrUP=(iCustom(NULL,0,"FastZZ_Point",300,false,2,1);

узнать где в этом моменте находится последняя точка ArrDN. Это как-то с временем надо связать, не знаю как только учусь. Спасибо
 

Вложения

  • FastZZ_Point.mq4
    3,8 КБ · Просмотры: 21

AlexeyVik

Программист mql4 mql5
Задолбали меня эти "подводные камни": кто-нибудь считывал пинги функцией TerminalInfoInteger()? Типа:
PHP:
int Ping=TerminalInfoInteger(TERMINAL_PING_LAST);
У меня выдает постоянное значение, которое, не знаю даже, к чему отнести - постоянка 28000 типа. Пишу здесь, т.к. все где-то пропали...:D
Вполне нормальное значение. В 1 секунде 1000 миллисекунд или 1 миллион микросекунд. Соответственно 1 миллисекунда = 1000 микросекунд. Получается пинг 28 миллисекунд. Всё нормально, мне кажется.
 

fs256

Местный знаток
Уважаемые программисты, помогите пожалуйста, мне надо в момент появления точки

if(iCustom(NULL,0,"FastZZ_Point",300,false,2,1)!=EMPTY_VALUE)
ArrUP=(iCustom(NULL,0,"FastZZ_Point",300,false,2,1);

узнать где в этом моменте находится последняя точка ArrDN. Это как-то с временем надо связать, не знаю как только учусь. Спасибо


Во-первых: вы ошиблись веткой, в следующий раз вам сюда - https://forexsystemsru.com/yazyk-programmirovaniya-mql4/65289-vashi-voprosy-po-yazyku-mql4.html.
Во-вторых: ничего, если я как новичку распишу?
В-третьих: усиленно читаем учебник :D. Там много примеров.

Код:
// На текущей свече (в этот момент ;)
if(iCustom(NULL,0,"FastZZ_Point",300,false,2,1)!=EMPTY_VALUE)  // если есть UP(верхняя точка) на пред. баре
{
   for(i=1; i<Bars-1; i++) // поиск в истории
   {
      if(iCustom(NULL,0,"FastZZ_Point",300,false,3,i)!=EMPTY_VALUE) // если нашли DN (нижняя точка)
      {
         j =i; //  j  - индекс бара с нижней точкой (текущий=0)
         break; // хватит искать, раз нашли
      } // выход из условия "if(iCus...,3,i)"
   } // выход из цикла "for"
} // выход из условия "if(iCus...,2,1)"

//если нужно значение DN
ArrDN=iCustom(NULL,0,"FastZZ_Point",300,false,3,j);
 

Violetta

Новичок форума
Во-первых: вы ошиблись веткой, в следующий раз вам сюда - https://forexsystemsru.com/yazyk-programmirovaniya-mql4/65289-vashi-voprosy-po-yazyku-mql4.html.
Во-вторых: ничего, если я как новичку распишу?
В-третьих: усиленно читаем учебник :D. Там много примеров.

Код:
// На текущей свече (в этот момент ;)
if(iCustom(NULL,0,"FastZZ_Point",300,false,2,1)!=EMPTY_VALUE)  // если есть UP(верхняя точка) на пред. баре
{
   for(i=1; i<Bars-1; i++) // поиск в истории
   {
      if(iCustom(NULL,0,"FastZZ_Point",300,false,3,i)!=EMPTY_VALUE) // если нашли DN (нижняя точка)
      {
         j =i; //  j  - индекс бара с нижней точкой (текущий=0)
         break; // хватит искать, раз нашли
      } // выход из условия "if(iCus...,3,i)"
   } // выход из цикла "for"
} // выход из условия "if(iCus...,2,1)"

//если нужно значение DN
ArrDN=iCustom(NULL,0,"FastZZ_Point",300,false,3,j);

О! СПАСИБО ОГРОМНОЕ! А то как слепой котенок. Теперь буду вопросы по адресу задавать.
 

fs256

Местный знаток
О! СПАСИБО ОГРОМНОЕ! А то как слепой котенок. Теперь буду вопросы по адресу задавать.

Раз интересуетесь кодом, подниму вам чуть-чуть репутацию спасибками (у вас = 1), - пригодится для кнопки "спасибо" в будущем (меня один добрый человек отблагодарил - буду раздавать :D, возвращать не надо).
 
Последнее редактирование:

Violetta

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

RV_aka_rvn

Активный участник
По тралу за "быстрой" ценой вылетает ошибка 145 - Модификация запрещена, так как ордер слишком близок к рынку.
- трал переписал, ошибка осталась... Какие соображения?
 

RV_aka_rvn

Активный участник
По тралу за "быстрой" ценой вылетает ошибка 145 - Модификация запрещена, так как ордер слишком близок к рынку.
- трал переписал, ошибка осталась... Какие соображения?
Все наверно сильно заняты... :)
Попробую сам посоображать...

Ответы с сайта MQL5:
1) Ваш счет открыт в группе ECN (ЕЦН) или NDD (НДД) - нет, и к тралу это отношения не имеет :)
2) Ваш брокер использует Рыночное исполнение позиций - у меня универсальное и к тралу это тоже отношения не имеет ;)
3) Быстрый рынок, при выходе важных новостей - уровень минимального стопа на сервере может подниматься в несколько раз - вот это может быть, только у моего ДЦ по спецификации stoplevel=4, а у меня трал в 20-30 пунктов ;) не в 5-ть же раз!

Решение пока не найдено... Прогнал на другом ДЦ, тоже самое в том же месте. Копаю дальше
 

mobidik

-----
По тралу за "быстрой" ценой вылетает ошибка 145 - Модификация запрещена, так как ордер слишком близок к рынку.
- трал переписал, ошибка осталась... Какие соображения?

Так отодвиньте дальше SL от цены при модификации - тем самым выясните что код рабочий. Перед тем как произвести модификацию ордера проверить на соответствие значения MODE_STOPLEVEL, величина значения может плавать.
 

RV_aka_rvn

Активный участник
Возможные объяснения -резкий прыжок цены назад, скорее с скрытым Гэпом и цена оказалась в другом месте, а потом опять прыгнула вперёд, стоплосс не срабатывает или действительно уровень сильно задран но не в пять же раз!
Проверил на М1 - Гэп был...

Логически вытекают 2 мысли и обе "плохие":
1) увеличить уровень трала, потеря профита
2) пробовать тралить по закрытой свече- тоже много денег потерять можно! :)
Последняя мысль - оставить всё как есть, просто опять же меньше денег будет...
 

RV_aka_rvn

Активный участник
Так отодвиньте дальше SL от цены при модификации - тем самым выясните что код рабочий. Перед тем как произвести модификацию ордера проверить на соответствие значения MODE_STOPLEVEL, величина значения может плавать.
Код рабочий, и 1-й и второй, простой трал как в МТ, просто написан по-разному :) 1-й просто расстояние в пунктах между ценой и SL, второй с шагом в 1 пункт.
Мысль по поводу проверки на MODE_STOPLEVEL при трале интересна :)
Но с такой конструкцией SL = NormalizeDouble(Bid-TrailingStop*Point,Digits); где TrailingStop=35 (пунктов) не поспоришь!
 
Последнее редактирование:

RV_aka_rvn

Активный участник
Прямо чудеса какие-то, даже самому интересно стало :) Прогнал оба варианта на 5-тизнаке в Инсте и 4-хзнаке во Фрэше, всё чисто
 

AlexeyVik

Программист mql4 mql5
По тралу за "быстрой" ценой вылетает ошибка 145 - Модификация запрещена, так как ордер слишком близок к рынку.
- трал переписал, ошибка осталась... Какие соображения?
Стоплевел здесь совсем не при делах. Надо проверять SymbolInfoInteger(_Symbol, SYMBOL_TRADE_FREEZE_LEVEL)
 
Верх