Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 121
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Напишите хотя бы один блок и покажите. Дальше тут подскажут в таком случае.
По массивам: вот я объявил на глобальном уровне 4 массива:
Затем в функции открытия позиций я их обнулил:
А как их теперь заполнить? В примере, по которому я пытаюсь это делать, применена дополнительная переменная, но как ею пользоваться я не понимаю:
Хотя не совсем понятно, зачем все эти массивы, когда значения тикета, типа позиции, цены открытия и времени открытия я могу получить соответствующей функцией.
По массивам: вот я объявил на глобальном уровне 4 массива:
Затем в функции открытия позиций я их обнулил:
А как их теперь заполнить? В примере, по которому я пытаюсь это делать, применена дополнительная переменная, но как ею пользоваться я не понимаю:
Хотя не совсем понятно, зачем все эти массивы, когда значения тикета, типа позиции, цены открытия и времени открытия я могу получить соответствующей функцией.
Попробуйте писать с нуля, выводя все промежуточные данные с помощью функции Alert(. Например
А уж если берете чей-то пример, берите его полностью и изучайте. Кто же знает для чего автор примера массивы приплел
По массивам: вот я объявил на глобальном уровне 4 массива:
Используйте массив структур. К нему будет намного проще обращаться. Привожу вариант со статическим массивом. Он проще в понимании. Хотя сам использую динамические массивы. Но с ними код получится немного больше.
Затем в функции открытия позиций я их обнулил:
Нет, не обнулили. Ведь объявлены динамические массивы, которые по умолчанию имеют нулевой размер. Поэтому в данном случае эти четыре строки кода ничего не делают.
А как их теперь заполнить? В примере, по которому я пытаюсь это делать, применена дополнительная переменная, но как ею пользоваться я не понимаю:
Далее - организуется цикл перебора ордеров, в котором каждый "свой" ордер сохраняется в массив:
Хотя не совсем понятно, зачем все эти массивы, когда значения тикета, типа позиции, цены открытия и времени открытия я могу получить соответствующей функцией.
С массивами работать удобнее и быстрее, т. к. в общем случае не все ордера, присутствующие на счете, нужно обрабатывать именно этим советником. В итоге получаем экономию сил и средств.
К тому же я привел, опять же, общий случай. А универсализм, конечно, далеко не всегда нужен. Обычно такие массивы составляются, исходя из требований стратегии. Например, можно сразу разделить ордера по типам: Buy, Sell, BuyStop, SellStop, BuyLimit, SellLimit. Тогда нам потребуется четыре таких массива. Но потом, при принятии торговых решений, не нужно будет снова проходить весь список открытых ордеров. Достаточно узнать количество ордеров определенного типа и обратиться к нужному массиву.
Еще один немаловажный момент, который стоит учитывать: изменение состава ордеров в процессе обработки одного тика. Вполне может случиться так, что на входе в OnTick был получен один список ордеров, а где-то в середине - другой. Получим трудно вылавливаемую ошибку работы программы. А массив ордеров, коорый был составлен при входе в OnTick уже не изменится (если, конечно, в ходе выполнения программы Вы его сами не измените).
string s=FileReadString(F1); // Чтение очередной строки текстового файла
StringSplit(s, "," , a); // Выделение разделенных запятой элементов строки в массив
datetime T1=StrToTime(a[4]); // Дальше у меня идут преобразования ...
int ord=StrToInteger(a[8]);
double Цена=StrToDouble(a[12]);
Спасиб, то что хотел
Далее, получается сделано штук 5 продуктов
кидаем в алерт показания (любые)
например уровень "200"
и при срабатывании алерта что - то открывает позу, что - то самоудаляется что - то делает другие действия. Я хочу реализовать механизм подачи сигнала таким способом
З.Ы
дописал то что хотел могу скинуть на рассмотрение. Сливает отлично. Но тут такое выкладывать запрещено.
Например, можно сразу разделить ордера по типам: Buy, Sell, BuyStop, SellStop, BuyLimit, SellLimit. Тогда нам потребуется четыре таких массива. Но потом, при принятии торговых решений, не нужно будет снова проходить весь список открытых ордеров. Достаточно узнать количество ордеров определенного типа и обратиться к нужному массиву.
Вот именно это мне и нужно, вернее только для Buy и Sell . Для моей простой стратегии главное, чтобы открытые позиции не мешали друг другу видеть условия для закрытия. Может, можно все-таки обойтись без массивов? Ну не врубаюсь я в них: как создать, как обратиться - тёмный лес. Может Вам станет понятней моя ситуация по скрину:
Вроде бы в коде всё просто и работает чётко, только вот это единственный случай непонятки.
Вот именно это мне и нужно, вернее только для Buy и Sell . Для моей простой стратегии главное, чтобы открытые позиции не мешали друг другу видеть условия для закрытия. Может, можно все-таки обойтись без массивов? Ну не врубаюсь я в них: как создать, как обратиться - тёмный лес. Может Вам станет понятней моя ситуация по скрину:
Вроде бы в коде всё просто и работает чётко, только вот это единственный случай непонятки.
Разумеется, в простейшей (да и средней сложности) без массивов удобнее. Вот когда дойдете до использования сотен ордеров - тогда ...
А не может быть причиной возникновения моей ситуации то, что журнал пишет: 2018.01.25 20:22:12 2018_WPR14_AMarkets EURUSD,M5: OrderClose error 138 и повторяет сплошь до
2018.01.26 16:38:12 2018_WPR14_AMarkets EURUSD,M5: Alert: Всего ордеров = 3 ? На скрине видно, что этот период захватывает два условия закрытия СЕЛЛ.
А сигналы на открытие позиции выдаются по комбинации нескольких индикаторов, а закрываются по одному. И срабатывают не так уж часто: на пятиминутке бывает, что несколько дней молчит. Например с 1 февраля с.г. всего 14 позиций сработало.
А не может быть причиной возникновения моей ситуации то, что журнал пишет: 2018.01.25 20:22:12 2018_WPR14_AMarkets EURUSD,M5: OrderClose error 138 и повторяет сплошь до
что у Вас за ситуация возникла? Вы хотите сказать, что терминал производит запись в журнал, что и вызывает ошибку? ... а что значит 138 ? знаете где посмотреть? Как Вы этого добились - это очень редкая ошибка. то что на скрине видно - это пол-дела. Вот как это советнику втолковать? надо написать какое-то математическое условие - советник же вместо рассматривания скрина оперирует числами
Вы хотите сказать, что терминал производит запись в журнал, что и вызывает ошибку? ... а что значит 138 ? знаете где посмотреть?
Нет, я хочу сказать, что в тестере на данном промежутке истории происходит сбой, который и не дает правильно сработать сигналам. Потому что не могут реквоты продолжаться сутками.
Нет, я хочу сказать, что в тестере на данном промежутке истории происходит сбой, который и не дает правильно сработать сигналам. Потому что не могут реквоты продолжаться сутками.
Реквоты в тестере? первый раз слышу... Тестер - это же идеал - в нем даже проскальзывание отсутствует
...что-то индикатор надрывается - тренд вверх. Прикуплю ... получилось... правда маловато будет хотел ТП вверх подвинуть - уже сработало...
Так поставьте в советнике что если так то выход и на следующем тике продолжим. И попробуйте на демо