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

Leonup

Новичок форума
Это почему вдруг? Машки могут быть расположены в любом порядке, в зависимости от истории.

qqmber, сейчас проветрил мозги свои – прогулялся на свежем воздухе, и у меня возник такой же вопрос. Так, возможно ли, все-таки написать код с ПОСЛЕДОВАТЕЛЬНЫМ пересечением или нет?
 

ansol

Местный знаток
qqmber, сейчас проветрил мозги свои – прогулялся на свежем воздухе, и у меня возник такой же вопрос. Так, возможно ли, все-таки написать код с ПОСЛЕДОВАТЕЛЬНЫМ пересечением или нет?

Ну дык тогда надо кучу If'ов со сравнениями кто чего больше, т.е. не только МА5 сравнивать с остальными но и остальные между собой.
Типа, написать неравенство на бумажке МА5>МА11> МА31>МА21
а потом раскладывать на if(MA5>MA11 && MA11>MA31... и т.д.)
 

qqmber

Почетный гражданин
qqmber, сейчас проветрил мозги свои – прогулялся на свежем воздухе, и у меня возник такой же вопрос. Так, возможно ли, все-таки написать код с ПОСЛЕДОВАТЕЛЬНЫМ пересечением или нет?

Код можно написать почти всегда, особенно если дело касается пересечений чего-то чем-то. Проверяй последовательно, что времена последнего пересечения каждой пары машек расположены в нужном порядке. Если машек фиксированное количество, типа 4, то сойдет if(t5x11>t5x21 && t5x21>t5x31), где t5x11-время последнего пересечения 5 и 11 машки и т.п. Функцию типа tx(5,11) удобно иметь.
 

hoz

Активный участник
qqmber, сейчас проветрил мозги свои – прогулялся на свежем воздухе, и у меня возник такой же вопрос. Так, возможно ли, все-таки написать код с ПОСЛЕДОВАТЕЛЬНЫМ пересечением или нет?

Пишишь как хочешь. Может даже написать условие, что мол при каждом пересечении переменная инкриментируется какая-нибудь. Т.е. счётчик пересечений. И типа после какого-то пересечения что-то сделать..
 

hoz

Активный участник
Понадобилось на выходных узнать некоторые вещи. Проверить которые сразу не выйдет.
Интересуют некоторые рыночные идентификаторы. Вот эти:
1. MODE_STOPLEVEL
2. MODE_FREEZELEVEL
Я так понимаю они оба динамичны, верно? На новостях и ещё когда пленный рынок, их могут расширять значительно, так?
 

Ugar

Гуру форума
Понадобилось на выходных узнать некоторые вещи. Проверить которые сразу не выйдет.
Интересуют некоторые рыночные идентификаторы. Вот эти:
1. MODE_STOPLEVEL
2. MODE_FREEZELEVEL
Я так понимаю они оба динамичны, верно? На новостях и ещё когда пленный рынок, их могут расширять значительно, так?
Зависит от ДЦ. Обычно если стоплевел гулящий в ДЦ где гуляет спред. Но не всегда. На некоторых может спред гулять а стоп нет.
Заморозку ордеров вообще редко кто применяет. Это прошлый век.
 

eevviill

Заблокирован
По моему до 500 билда было нормально, а сейчас?

Как было.

Если файл индикатор.
Пишем в глобальных переменных
double buf1[];
Компилятор автоматически устанавливает величину буфера и порядок как в таймсерии.

Как сейчас.
Написал.
double buf1[];
Присваиваю скажем 300 элементам буфера значения. И вуаля. Везде 0.
Пришлось писать в Инит
ArrayResize(buf1,300);
ArrauSetAsSeries(buf1,true);


Всё так как написал или я где то втыкнул?
 

qqmber

Почетный гражданин
По моему до 500 билда было нормально, а сейчас?

Как было.

Если файл индикатор.
Пишем в глобальных переменных
double buf1[];
Компилятор автоматически устанавливает величину буфера и порядок как в таймсерии.

Как сейчас.
Написал.
double buf1[];
Присваиваю скажем 300 элементам буфера значения. И вуаля. Везде 0.
Пришлось писать в Инит
ArrayResize(buf1,300);
ArrauSetAsSeries(buf1,true);


Всё так как написал или я где то втыкнул?
SetIndexBuffer(0,buf1) в init().
 
Последнее редактирование:

qqmber

Почетный гражданин
Та не. Мне не нужно чтобы он выводил какие либо данные. Просто для подсчётов внутри индикатора. А если мне надо будет таких буферов 17 например?
Сколько буферов выводить регулируется #property indicator_buffers
Внутренних буферов можно иметь больше, как раз для расчетов, типа как в ATR сделано.
Если надо больше 8, то ты прав, ArraySetAsSeries() и ArrayResize() для каждого нового элемента.
Автоматики тут не было никогда.
 

hoz

Активный участник
Зависит от ДЦ. Обычно если стоплевел гулящий в ДЦ где гуляет спред. Но не всегда. На некоторых может спред гулять а стоп нет.
Заморозку ордеров вообще редко кто применяет. Это прошлый век.

Я просто думал, достаточно ли один раз за тик получать эти значения, или всё же лучше в каждой функции в которой они используются?
 

Ugar

Гуру форума
Я просто думал, достаточно ли один раз за тик получать эти значения, или всё же лучше в каждой функции в которой они используются?
Достаточно на каждом тике. Но если есть функции с длительным выполнением, то могут пройти несколько тиков пока они выполняются. Тогда, после выполнения этой длительной функции лучше обновить данные RefreshRates() и получить эти стопы и заморозки заново.
 

Leonup

Новичок форума
Пишишь как хочешь. Может даже написать условие, что мол при каждом пересечении переменная инкриментируется какая-нибудь. Т.е. счётчик пересечений. И типа после какого-то пересечения что-то сделать..

Написал все условия для каждого пересечения. Ввел переменные для каждого условия. Получилось всего 6 переменных: для Buy - int Crossed1; int Crossed2; int Crossed3; для Sell - int Crossed4; int Crossed5; int Crossed6.
Раньше не сталкивался со счетчиками (я – начинающий), попытался найти более-менее подробную информацию в инете, но что-то у меня не получилось.
Подскажите, пожалуйста, как можно создать счетчик пересечений?
 

hoz

Активный участник
Достаточно на каждом тике. Но если есть функции с длительным выполнением, то могут пройти несколько тиков пока они выполняются. Тогда, после выполнения этой длительной функции лучше обновить данные RefreshRates() и получить эти стопы и заморозки заново.

Я так понимаю, тут логично будет замерить время исполнения функции и от этого плясать? Тока вот скока времени до следующего тика пройдёт в каждом конкретном случае, опять же вопрос открытый постоянно..
 

hoz

Активный участник
Написал все условия для каждого пересечения. Ввел переменные для каждого условия. Получилось всего 6 переменных: для Buy - int Crossed1; int Crossed2; int Crossed3; для Sell - int Crossed4; int Crossed5; int Crossed6.
Раньше не сталкивался со счетчиками (я – начинающий), попытался найти более-менее подробную информацию в инете, но что-то у меня не получилось.
Подскажите, пожалуйста, как можно создать счетчик пересечений?

А легко. Буду писать чтоб проще так:

PHP:
Expand Collapse Copy
IsCrossed()
{
    int cnt; // Создаём счётчик
   
    // Тело функции
    for (i=Bars-1; i>=0; i--)
    {
        if (машки пересеклись)
        {
            // Можно выполнить какое-то условие...
            cnt++; // А тут инкремент к счётчику, т.е. значение cnt
                       //.. увеличится на 1
         } 
    }
}

Тут получается что будет проход по всем барам в истории и прибавлять к счётчику 1, если на каком-то баре есть пересечение.
 

Ugar

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

eevviill

Заблокирован
В терминал посупают не нормализированые цены(стопы) ордеров?
 
Верх