Обучение языку MQL4 под MetaTrader 4📌

От xbms, 13 апреля, 2013 в Уголок Программиста

#1301

Искать все отложки как-то не подумал)

bool пишу, чтобы эдитор не выдавал предупреждения типа return value of "OrderSelect" should be checked
Смотрел урок по переносу на новые билды, но писать else Print"" (что-то такое) как-то не очень удобно.
Хотя, если эти предупреждения, думаю, можно игнорировать просто

#1302
oleguitar, ну теперь понятно для чего вам нужны булевые переменные, а то когда просматриваешь код, интуитивно начинаешь искать к чему они ещё привязаны и в каких зависимостях ещё участвуют, к тому же нет уверенности, что перед тобой весь код. Насколько понимаю, то предупреждения игнорировать нельзя, потому как при компиляции не произойдёт сборка файла ex4.
#1303


Насколько понимаю, то предупреждения игнорировать нельзя, потому как при компиляции не произойдёт сборка файла ex4.

Предупреждения можно игнорировать. всё компилируется. неоднократно проверял.
#1304



Насколько понимаю, то предупреждения игнорировать нельзя, потому как при компиляции не произойдёт сборка файла ex4.

Предупреждения можно игнорировать. всё компилируется. неоднократно проверял.

Еще хороший способ добавить #property strict чтобы потенциально "слабые" места найти
#1305

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

nixxer, а можно поподробней, куда и как его добавить, а так же что это даст в итоге?

#1306


nixxer, а можно поподробней, куда и как его добавить, а так же что это даст в итоге?

Я думаю Никсер не будет против. Почитай здесь.
#1307
0ll, то есть я правильно понимаю, #property strict нужно прописать в самом начале, за пределами специальных функций и это позволит выявить при компиляции все возможные несоответствия, которые могут возникнуть в связи с последними изменениями в MQL4?

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

//--------------------------------------------------------------------
int Tick; // Глобальная переменная
//--------------------------------------------------------------------

Изменено 12 сентября, 2014 пользователем chistaia-rodina

#1308


0ll, то есть я правильно понимаю, #property strict нужно прописать в самом начале, за пределами специальных функций и это позволит выявить при компиляции все возможные несоответствия, которые могут возникнуть в связи с последними изменениями в MQL4?

Да, сов. верно.

Правило присвоенного типа, такое же как и с обычными переменными, в зависимости от того что нам нужно. Можно ли их тоже объявлять через запятую если нужно несколько или каждая должна иметь свой блок?

Да точно также как и с локальными, можно через запятую и с присвоением начальных значений и массивы - всё до кучи и всё работает. Отделять не нужно, главное за пределами функций (когда Вы спрашивали - думал про переменные уровня терминала, поэтому не писал).
Пример из моей проги:
float C, H1, L1, HF=0, LF=0, prcExt, Pw, kf_Acu, Count[];
#1309

Привет. Сегодня первый день изучаю "язык". Сергею - БОЛЬШОЕ Спасибо!!!
Писал "Martin" вслед за объяснениями, в конце получил 23!!!!! ошибки, проковырялся несколько часов и сдался. Прошу помощи у тех кто сам помнит как начинал)) в приложении картинка моего "блина". Спасибо.

Martin1.png

#1310
Дмитрий_2008, ну Вы тогда хотя бы код выложите посмотреть. На вскидку, похоже проблемы с аккуратностью и внимательностью.
#1311

Да конечно!!!, я чес говоря и не рассчитывал))

Martin.mq412 скач.

#1312
chistaia-rodina оказался прав...
Дмитрий_2008 основная ошибка - невнимательность. Редактор не считает эквивалентными названия переменных, написанных на разных регистрах.
Поправил. Оставшиеся предупреждения можно игнорировать или исправить (получить или обработать возвращаемые функцией значения, например: bool res = OrderModify())

Martin.mq417 скач.

#1313

Юхуууу!!! Работает!!!))))
Спасибо!!!!! буду рад быть полезным.

#1314

Добрый день!

Можно узнать время закрытой сделки (OrderCloseTime), а как узнать дату?

#1315

А вы попробуйте вывести в Print или Alert TimeToString(OrderCloseTime()). Думаю вопросы отпадут.
Формат данных datetime включает в себя дату и время.

#1316

Спасибо

#1317

Всем привет! :-H

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

#1318
oleguitar
В индюке скорее всего 2 буфера - с миним. и макс., там как-раз значения экстремумов. Их нужно переписать в массив типа double или float. Чтоб подсказать оптимальное решение нужно знать что Вы дальше с этим планируете делать. Искать так:
- начало периода YstDay0 = iTime(NULL, PERIOD_D1, 1);
- конец периода YstDay1 = iTime(NULL, PERIOD_D1, 0);
- перебираешь бары на рабочем ТФ и проверяешь буфера индикатора
- если буфер имеет значение, то проверяешь дату текущего бара
- если попадает в рабочий период - пишем значение в массив (для этого ещё счетчик надо)
- всё

Кстати все свечи пронумерованы
#1319
Цитата

Чтоб подсказать оптимальное решение нужно знать что Вы дальше с этим планируете делать.



Я хочу использовать эти значения в качестве уровней поддержки/сопротивления для следующего торгового дня, и в одном из условия открытия ордера проверять, находится ли цена в диапазоне такого уровня (диапазон +/- 5 пунктов, допустим, от значения цены на экстремуме свечи, которую индикатор отметил как фрактальную).
#1320
oleguitar Ну, я так и думал. После заполнения массива его нужно отсортировать. Тут ещё такая тонкость есть - будут моменты, когда разные фракталы почти на одном уровне - надо это как-то отсортировывать. имхо более свежий уровень надо оставлять... Тема "как торговать уровни" слишком обширна для этого раздела...
#1321
Цитата

перебираешь бары на рабочем ТФ и проверяешь буфера индикатора



не понимаю, как проверить буфер индикатора(

можно ли так получить значения low последних 30 баров? или надо по-другому начинать
for (int i =0, i{
double [ i ] = Low[ i ];
}
#1322


не понимаю, как проверить буфер индикатора(

У фрактального индюка в буфере либо "0" либо цена фрактала. т.е. если не "0" то значение буфера в массив (как-то так). Могут быть 2 буфера для верха и низа.


можно ли так получить значения low последних 30 баров? или надо по-другому начинать
for (int i =0, i{
double [ i ] = Low[ i ];
}

Вы массив опишите правильно (типа: double мой_массив[30]; ), потом мой_массив[ i ] = Low[ i ]; и будет работать. (только если Вам нужен лоу 0-бара)

Изменено 19 сентября, 2014 пользователем 0ll

#1323

В этом индикаторе два буфера : 0 и 1 - для нижних и для верхних фракталов, проблема в том, что я не знаю как записать буфер в массив и как проверить его значение, так как не совсем понимаю чем является буфер...

#1324

Буфер это тот-же массив, только он находится в памяти индюка, а мы хотим получить его значения в сове...
значения этого массива следует получать через iCustom (если индюк не стандартный МТ) перебирая их в цикле, типа:
- сначала находим диапазон рабочих баров СтартБар и СтопБар (вчерашний день)
double МИ0, МИ1, массив[100];
int и, м=0;
фор (и = СтартБар; и МИ0 = iCustom(..., и, ... , 0);
МИ1 = iCustom(..., и, ... , 1);
если (МИ0 > 0 ) { массив[м] = МИ0; м++; }
если (МИ1 > 0 ) { массив[м] = МИ1; м++; }
}
Можно обрезать хвост массива по значению м. (через ArrayResize)
Потом сортировка ArraySort(массив);
всё.

#1325

Ребят, подскажите как реализовать смещение по GMT, которое в дальнейшем во внешних параметрах задаётся.

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025