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

ansol

Местный знаток
неточный вопрос,выше или ниже на 10 пунктов???
если допускается вниз 10 пунктов и вверх 10 пунктов,то я бы написал так:

PHP:
if((High[1]<=High[2]+10*Point)||(High[1]>=High[2]-10*Point))
{
ваше действие;
}

А почему вы решили, что нужны Хай первого и второго бара?
1. Нужно зафикисровать 1 хай
2. Сравнивать текущий, нулевой хай, с зафиксенным ранее
3. Зафиксировать новый хай, сравнить и далее по обстоятельствам.

Т.е. задачка чуть сложнее, чем простой if
 

Ugar

Гуру форума
А почему вы решили, что нужны Хай первого и второго бара?
Partizan64 так описал. В прямоуголник на картинке включил по 2 бара с близкими хаями. Я то же сначала так подумал. Потом понял что вряд ли он спрашивает про соседние бары, это ведь слишком просто.
1. Нужно зафикисровать 1 хай
2. Сравнивать текущий, нулевой хай, с зафиксенным ранее
3. Зафиксировать новый хай, сравнить и далее по обстоятельствам.

Т.е. задачка чуть сложнее, чем простой if
Судя по картинке, хай может быть и не на текщем баре, они оба могут быть в истории на неопределённом расстоянии от текущего бара.
Если так то задачка ещё чуть сложнее чем Вы описали. Конечно, любая задачка решаема, при том несколькими способами. Но прежде чем что то решать, нужно что бы Partizan64 сам понял что хочет и описал подробнее.
 

ansol

Местный знаток
Судя по картинке, хай может быть и не на текщем баре, они оба могут быть в истории на неопределённом расстоянии от текущего бара.
Т.е. искать какие-то отдаленные бары, когда речь идет о дневных хаях? :)
Ну, может быть. Ждем уточнений
 

olcik

Активный участник
Друзья подскажите ,как вычислить мах мin индикатора MACD за определенный промежуток времени ,например за Азиатскую сессию.Я знаю что с помощью ArrayMaximum и ArrayMinimum но дальше темный лес.
 

Ugar

Гуру форума
Друзья подскажите ,как вычислить мах мin индикатора MACD за определенный промежуток времени ,например за Азиатскую сессию.Я знаю что с помощью ArrayMaximum и ArrayMinimum но дальше темный лес.
Сначала надо определить границы сессии в барах, и вычислить количество баров в сессии. Потом можно ArrayMaximum и ArrayMinimum.
 

olcik

Активный участник
b1-b2 это будет количество баров.А как оформить ??:please:
//+------------------------------------------------------------------+
//| Прорисовка объектов на графике |
//| Параметры: |
//| dt - дата торгового дня |
//| no - наименование объекта |
//| tb - время начала сессии |
//| te - время окончания сессии |
//+------------------------------------------------------------------+
void DrawObjects(datetime dt, string no, string tb, string te) {
datetime t1, t2;
double p1, p2;
int b1, b2;

t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
b1=iBarShift(NULL, 0, t1);
b2=iBarShift(NULL, 0, t2);
p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2, b2)];
p2=Low [Lowest (NULL, 0, MODE_LOW , b1-b2, b2)];
ObjectSet(no, OBJPROP_TIME1 , t1);
ObjectSet(no, OBJPROP_PRICE1, p1);
ObjectSet(no, OBJPROP_TIME2 , t2);
ObjectSet(no, OBJPROP_PRICE2, p2);
 

Milord

Местный знаток
А почему вы решили, что нужны Хай первого и второго бара?
1. Нужно зафикисровать 1 хай
2. Сравнивать текущий, нулевой хай, с зафиксенным ранее
3. Зафиксировать новый хай, сравнить и далее по обстоятельствам.

Т.е. задачка чуть сложнее, чем простой if
ждем уточнений автора вопроса, многие не умеют ясно сформулировать что хотят...
на счет текущего Хая(High) 0-го бара,как мы его можем узнать до закрытия бара???оО
по моему никак, это будет известно только после закрытия бара, а после закрытия он и будет как раз 1-м, как я и написал..или я не прав?))
опытные программеры, вопрос к вам - я верно понимаю про 0 и 1 бар???
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
Не правильно. High[0] есть и будет есть. В какое-то время он равен и Bid, и Close[0], а когда цена откатится от максимального значения то хай будет хаем, а Bid будет всё ещё равен Close[0]
То-же самое происходит с Low[0]
 

Milord

Местный знаток
Не правильно. High[0] есть и будет есть. В какое-то время он равен и Bid, и Close[0], а когда цена откатится от максимального значения то хай будет хаем, а Bid будет всё ещё равен Close[0]
То-же самое происходит с Low[0]
бар - время между открытием и закрытием бара, за это время цена проходит от Open,до Close,самые низкие значения за время бара(ТФ) будут иметь название Low, самые высокие называются High, так я непонял откуда известны на текущем 0-м баре значения Хая и Лоу, у нас разве есть машина времени на форексе?)):D
 

ansol

Местный знаток
бар - время между открытием и закрытием бара, за это время цена проходит от Open,до Close,самые низкие значения за время бара(ТФ) будут иметь название Low, самые высокие называются High, так я непонял откуда известны на текущем 0-м баре значения Хая и Лоу, у нас разве есть машина времени на форексе?)):D

Напиши в скрипте Comment(High[0]) и посмотри, что он выдаст.
Можешь просто на текущую часовую свечку посмотреть, надеюсь увидишь там такую шпилечку сверху :D до того, как час завершится
 

qqmber

Почетный гражданин
ждем уточнений автора вопроса, многие не умеют ясно сформулировать что хотят...
Придется подождать, человек 8 лет на форексе и 2 с половиной года на форуме, и только вот первый вопрос задал. Уточнения будут к лету, вероятно.
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
бар - время между открытием и закрытием бара, за это время цена проходит от Open,до Close,самые низкие значения за время бара(ТФ) будут иметь название Low, самые высокие называются High, так я непонял откуда известны на текущем 0-м баре значения Хая и Лоу, у нас разве есть машина времени на форексе?)):D
Да машина времени тут не при чём. Бар - время между открытием и текущим временем до закрытия бара. На текущем баре High и Low меняются вместе с изменением цены. Можешь удивиться, но в момент открытия бара Open[0] = High[0] = Low[0] = Close[0] а потом они начинают расходиться.Пока цена растёт High[0] меняется вместе с изменением цены. Как только цена начала откатываться вниз High[0] остаётся на прежнем уровне.

ps; Поставь в сов такой код
Код:
static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar != curbar)
    {
     lastbar = curbar;
     Print("Open[0] = ", Open[0], "High[0] = ", High[0], "Low[0] = ", Low[0], "Close[0] = ", Close[0]);
    }

Сразу получишь разные цены, а на новом баре уже будут одинаковые.
 
Последнее редактирование:

Milord

Местный знаток
Не правильно. High[0] есть и будет есть. В какое-то время он равен и Bid, и Close[0], а когда цена откатится от максимального значения то хай будет хаем, а Bid будет всё ещё равен Close[0]
То-же самое происходит с Low[0]

какие то странные Хай и Лоу)):facepalm:

P.S. кстати мой вариант кода оказался верным, даже после ваших уточнений, потому что по 0-му бару High меняется динамически,и фиксится только после закрытия текущего бара, поэтому и писать код лучше по 1-му бару и более старым, чтобы ничего не перерисовывалось...верно да?)
 
Последнее редактирование:

ansol

Местный знаток
какие то странные Хай и Лоу)):facepalm:

P.S. кстати мой вариант кода оказался верным, даже после ваших уточнений, потому что по 0-му бару High меняется динамически,и фиксится только после закрытия текущего бара, поэтому и писать код лучше по 1-му бару и более старым, чтобы ничего не перерисовывалось...верно да?)

Тебе и пишут, что он меняется, но тем не менее он есть :D
Это от стратегии зависит, как учитывать текущую свечу.
По крайней мере, текущий хай может оказаться уже выше дневного(или сессионного) и логично было бы делать на него поправку. Но это зависит от трейдера и его стратегии
 

Milord

Местный знаток
Надо найти два последних сегодняшних непустых значения индикатора iFractals(), сравнить их и выполнить действие, если модуль разности меньше 10 п.



Поторопился, Milord, if(true) написал.
непонял, при чем тут TRUE?:not-good:

P.S. уточнение для Partizan64, код пишется в 1 строку, просто на форуме есть ограничения длинны строки, автоматически делается перенос, то есть код должен выглядеть так:
if((High[1]<=High[2]+10*Point)||(High[1]>=High[2]-10*Point))
{
ваше действие;
}
 

qqmber

Почетный гражданин
непонял, при чем тут TRUE?:not-good:

P.S. уточнение для Partizan64, код пишется в 1 строку, просто на форуме есть ограничения длинны строки, автоматически делается перенос, то есть код должен выглядеть так:
if((High[1]<=High[2]+10*Point)||(High[1]>=High[2]-10*Point))
{
ваше действие;
}
Выражение в скобках if() будет истиной при любых значениях High[1] и High[2].
 

1comrad

Местный житель
Здравствуйте! Я сам не программист, но по мере надобности в код заглядываю, потому что варианты в очередь выстраиваются и не факт что они жизнеспособные. А если на каждый вариант "дёргать" мастера то это "не есть хорошо"...
А тут такой случай - при замене индикатора в советнике на нестандартный (indicator_separate_window) при помощи iCustom(Symbol() - тестер сильно тормозит из-за того что грузит 254 шт этого индикатора - каким образом возможно решить эту проблему?
 

Ugar

Гуру форума
Здравствуйте! Я сам не программист, но по мере надобности в код заглядываю, потому что варианты в очередь выстраиваются и не факт что они жизнеспособные. А если на каждый вариант "дёргать" мастера то это "не есть хорошо"...
А тут такой случай - при замене индикатора в советнике на нестандартный (indicator_separate_window) при помощи iCustom(Symbol() - тестер сильно тормозит из-за того что грузит 254 шт этого индикатора - каким образом возможно решить эту проблему?
Если в советнике используются значения индикатора на 254 барах, пожалуй стоит перенести алгоритм вычисления индикатора в код советника. Для этого нужно обратиться к специалисту.

Кстати indicator_separate_window означает что он в отдельном окне, а не то что он нестандартный.
 

1comrad

Местный житель
Если в советнике используются значения индикатора на 254 барах, пожалуй стоит перенести алгоритм вычисления индикатора в код советника. Для этого нужно обратиться к специалисту.

Кстати indicator_separate_window означает что он в отдельном окне, а не то что он нестандартный.

Дело в том, что на демо и реале(центовик) он в таком изменённом виде работает без проблем, пока исполняет команды чётко - как швейцарские часики.
Просто хотелось бы его по истории побыстрее прогонять с различными настройками, на всех возможных парах.... хоть по ТС и так видно "что куда, откуда, как", а это так для подстраховки - вдруг чего вылезет *hi*

o_o .... а для "Кстати...." так и читаем: ...нестандартный (в отдельном окне)... - это что б лишнего не писать
 

Milord

Местный знаток
Выражение в скобках if() будет истиной при любых значениях High[1] и High[2].

поясните почему при любых? там же написаны условия
PHP:
<= >=
подкорректируйте плиз, мой вариант кода, чтобы он выполнял логику как надо...
 
Верх