0ll Опубликовано 12 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 октября, 2015 JR заметил этот косяк и вообще перестал пользоваться функциями, обращающимися к данным другого ТФ - тупо считаю значения баров из текущего ТФ. У Вас тиковая история М1 присутствует? Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 12 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 октября, 2015 0ll, да, конечно присутствует - экспорт всех таймфреймов делаю. Я бы тоже не пользовался другими ТФ, но как быть, если к примеру в сове рассчитываются входы на м15, а данные по тренду берутся, ну пусть даже с машки с H4? Или например хотел получить размер свечи с другого ТФ как доп фильтр... Ну и таких ситуевин может быть много. А в обычном терминале с котирами брокера это вроде работает, в тикстори - нет.З.Ы. и это..меня можно и на ТЫ :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 12 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 октября, 2015 JR с машкой проблем меньше всего - нужно пропорционально ТФ изменить период. А свечи другого ТФ пересчитываю. В общем борюсь с МТ по всякому... Заметил, что это даёт результат - совы меньше глючить на реале стали. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 12 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 октября, 2015 Ок, спасибо за подсказки, буду тоже продолжать бороться с МТ :) 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
ASugler Опубликовано 15 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 октября, 2015 Вариант с переносом в безубыток после преодоления расстояния одного стопа TPSLHelper.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
ASugler Опубликовано 15 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 октября, 2015 Исправил ошибку в логике безубытка (безубыток всегда считался от заданного в параметрах стопа внезависимости менялся он или нет).Просьба проверить работу безубытка кому не сложно. TPSLHelper02.ex4 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 16 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 октября, 2015 Ребят, вот еще такая задачка. Нужна функция, считающая количество валютных пар, на которых есть открытые ордера.Т.е. первое что приходит на ум это при переборе в цикле открытых ордеров создать массив, заполнить его названиями пар с открытыми ордерами, а потом сделать сравнение и выборку с подсчетом (собственно что-то подобное сейчас и пишу). Но может есть более изящный и менее ресурсо-затратный алгоритм? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 октября, 2015 JR - создай пустую строку- ищи название пары в строке - если нет пиши его туда, добавляй счетчик - если есть - следующий- после перебора ордеров количество символов в счетчике.более простого алгоритма в голову не приходит... 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 16 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 октября, 2015 :d перфекционизируем по случаю пятницы?! Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 октября, 2015 :d перфекционизируем по случаю пятницы?!Веришь - на ходу придумал, экспромт однако... :d 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 16 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 октября, 2015 О, спасибо, со строкой пожалуй попроще будет. А то я начал заморачиваться с динамическим массивом, но там начинается каша с его индексами и размерами, слишком громоздко выходит. Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 17 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 октября, 2015 Вобщем у меня получилось такая функция (спасибо Oll), возможно кому пригодится. Зачем она нужна? Как многие уже догадались, для контроля рисков - если открыты ордера по определенному количеству пар (задаем в настройках), то дальше ставим запрет на открытие. int CountTradesSymbol() //Считаем количество пар с открытыми ордерами { if (OrdersTotal() == 0) return(0); int count = 0; string sym = ""; for (int i = OrdersTotal() - 1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (StringFind(sym, OrderSymbol(), 0)) { sym += OrderSymbol(); count++; } } } return (count); } В тестере работает, на реале проверю в понедельник. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 17 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 октября, 2015 JR обязательно добавь разделитель сюда: sym += OrderSymbol() + ","; !иначе может найти составленный из соседних пар кросс ;)Сортируй по типу, а то и отложки посчитает...Контроль риска можно через маржу оценивать (я так обычно делаю), но в мультивалютных совах, возможно, другие задачи... Изменено 17 октября, 2015 пользователем 0ll 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 17 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 октября, 2015 Спасибо за подсказку про разделитель. Отложки я пока не использую, а функция, да, предназначена для мультивалютной торговли. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 17 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 октября, 2015 Молодцы, парни - действительно красивое решение!Фигня вроде - а летает. :d 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 17 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 октября, 2015 Вобщем у меня получилось такая функция (спасибо Oll), возможно кому пригодится. Зачем она нужна? Как многие уже догадались, для контроля рисков - если открыты ордера по определенному количеству пар (задаем в настройках), то дальше ставим запрет на открытие. int CountTradesSymbol() //Считаем количество пар с открытыми ордерами { if (OrdersTotal() == 0) return(0); int count = 0; string sym = ""; for (int i = OrdersTotal() - 1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (StringFind(sym, OrderSymbol(), 0)) { sym += OrderSymbol(); count++; } } } return (count); } В тестере работает, на реале проверю в понедельник. Мне кажется или тут ошибка? if (StringFind(sym, OrderSymbol(), 0)) => if (!StringFind(sym, OrderSymbol(), 0)) 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 17 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 октября, 2015 Да, все правильно, забыл что у StringFind возвращаемое значение типа int ( -1 если не найдено). Вот так сейчас оставил: int CountTradesSymbol() //Считаем количество пар с открытыми ордерами { if (OrdersTotal() == 0) return(0); int count = 0; string sym = ""; for (int i = OrdersTotal() - 1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUY || OrderType() == OP_SELL) { if (StringFind(sym, OrderSymbol(), 0) sym += OrderSymbol() + ","; count++; } } } } return(count); } 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 17 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 октября, 2015 Тест на внимательность из всей команды условно прошел только Qj :)Но всё равно кодик полезный весьма и весьма - скопипастил! :d 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 17 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 октября, 2015 Да просто глаза уже замылились когда писал, если бы в рынке проверить - сразу бы заметил, а так жду понедельника.З.Ы. Я тоже подобные полезные короткие и эффективные функции собираю. Потом все это облегчает создание и проверку разных идей - копипастишь бота из готовых блоков... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Evilmaker Опубликовано 19 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2015 Народ, здравия!Никак не могу решить такую задачку (только начал программить в MQL4):Есть две МА. Надо найти количество баров с момента их последнего пересечения. Я округляю их до Digits(через NormolizeDouble), сравниваю их, а вот как посчитать количество баров - фиг его знает. И до конца непонятно, как работают сдвиги в этих МА. double aa, bb; int counted_candles = 0; for ( int i=1; i { aa = iMA(Symbol(), 0, 13, 0, MODE_SMA, PRICE_CLOSE, i); bb = iMA(Symbol(), 0, 26, 0, MODE_SMA, PRICE_CLOSE, i); if ( NormalizeDouble(aa, Digits) == NormalizeDouble(bb, Digits { counted_candles++; Print ("i=", i, "; aa=", NormalizeDouble(aa, Digits), "; bb=", NormalizeDouble(bb, Digits)); break; } }Он мне выводит i какой-то и показывает, что при этом i значения моих МА были равны. Но как эту инфу привязать к количеству баров? Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 19 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2015 Так тут i и будет количество баров. Код перебирает в цикле значения двух машек на каждом баре от 1-го (0 - текущий) до 1000-го. Как только значения совпадают (машки пересекаются) печается i - на каком баре от 1-го это произошло. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Evilmaker Опубликовано 19 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2015 Неа. i не обязательно будет совпадать с количеством баров и пересечение машек тоже не всегда лежит на конкретном баре. i показывает что-то, при котором произошло совпадение значений. А как бар вытащить? Изменено 19 октября, 2015 пользователем Evilmaker Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 19 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2015 Вам наверное стоит посмотреть видеоуроки по MQL в блоге.Если вы исполняете приведенный код в функции OnTick() советника, то весь цикл перебора баров будет проходить за один тик.И почитайте описание iMA. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Evilmaker Опубликовано 19 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2015 Вам наверное стоит посмотреть видеоуроки по MQL в блоге.Если вы исполняете приведенный код в функции OnTick() советника, то весь цикл перебора баров будет проходить за один тик.И почитайте описание iMA. Это не советник. Это пока скрипт. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Qj Опубликовано 19 октября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 октября, 2015 Спойлер Народ, здравия!Никак не могу решить такую задачку (только начал программить в MQL4):Есть две МА. Надо найти количество баров с момента их последнего пересечения. Я округляю их до Digits(через NormolizeDouble), сравниваю их, а вот как посчитать количество баров - фиг его знает. И до конца непонятно, как работают сдвиги в этих МА. double aa, bb; int counted_candles = 0; for ( int i=1; i { aa = iMA(Symbol(), 0, 13, 0, MODE_SMA, PRICE_CLOSE, i); bb = iMA(Symbol(), 0, 26, 0, MODE_SMA, PRICE_CLOSE, i); if ( NormalizeDouble(aa, Digits) == NormalizeDouble(bb, Digits { counted_candles++; Print ("i=", i, "; aa=", NormalizeDouble(aa, Digits), "; bb=", NormalizeDouble(bb, Digits)); break; } }Он мне выводит i какой-то и показывает, что при этом i значения моих МА были равны. Но как эту инфу привязать к количеству баров? Не уверен конечно, но попробуйте это Спойлер double aa, bb;int counted_candles = 0; for ( int i=1; i { aa = iMA(Symbol(), 0, 13, 0, MODE_SMA, PRICE_CLOSE, i); bb = iMA(Symbol(), 0, 26, 0, MODE_SMA, PRICE_CLOSE, i); if ( NormalizeDouble(aa, Digits) != NormalizeDouble(bb, Digits)) { counted_candles++; break; } }counted_candles - кол-во свечей с последнего пересечения Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти