Ricedeni Опубликовано 5 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 ноября, 2013 Я много раз читал о том, что код должен быть по-возможности лаконичным. В роботе, мне потребовалось сделать так, что бы он начал торговать крупным лотом, только после того, как прошло 8 неудачных сделок подряд. Моих знаний, хватило только на то, что бы создать вот такого монстра: Спойлер if(OrderSelect(HistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-2,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-3,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-4,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-5,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-6,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-7,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-8,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() { sell(); } } } } } } } } } } } } } } } } Как можно сделать более лаконично? рекомендую посмотреть урок №2после просмотра моментально сможете уложиться в 5 строк кода вместо этого монстра... :) А можете немного намекнуть, какими циклами можно обойтись, что бы решить задачу с минимумом кода? :) for? while? switch? Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 5 ноября, 2013 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 ноября, 2013 Цитата А можете немного намекнуть, какими циклами можно обойтись, что бы решить задачу с минимумом кода? :) for? while? switch? можно использовать for..., а можно и while...switch - это условный оператор Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 5 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 ноября, 2013 Всем начинающим и не очень кодерам привет!Заинтересовался программингом на mql, дабы проверить некоторые свои идеи, постепенно втягиваюсь в это увлекательное дело:) Отдельное спасибо xbms за уроки, с ними процесс обучения веселее и приятней, а главное понятней!:)Не пинайте сильно за нубский вопрос, который возможно и был, так как только начинаю осваивать mql.:Допустим у меня открыты рыночные ордера и sell и buy, их нужно закрыть, когда общий профит этих ордеров выходит в определенный плюс. Если использовать if (AccountProfit() >= Profit) - то закрываемся, сами понимаете, закрытие в реальном рынке будет безумно долго, особенно если ордеров много.Есть ли какой способ вычислить общий ТП висящих buy и sell ордеров, отталкиваясь от нужного значения в валюте депо, допустим Profit = 5 usd? Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 5 ноября, 2013 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 ноября, 2013 Всем начинающим и не очень кодерам привет!Заинтересовался программингом на mql, дабы проверить некоторые свои идеи, постепенно втягиваюсь в это увлекательное дело:) Отдельное спасибо xbms за уроки, с ними процесс обучения веселее и приятней, а главное понятней!:)Не пинайте сильно за нубский вопрос, который возможно и был, так как только начинаю осваивать mql.:Допустим у меня открыты рыночные ордера и sell и buy, их нужно закрыть, когда общий профит этих ордеров выходит в определенный плюс. Если использовать if (AccountProfit() >= Profit) - то закрываемся, сами понимаете, закрытие в реальном рынке будет безумно долго, особенно если ордеров много.Есть ли какой способ вычислить общий ТП висящих buy и sell ордеров, отталкиваясь от нужного значения в валюте депо, допустим Profit = 5 usd? ну это проще простого... также рекомендую и Вам обратиться к уроку №2 ( в частности циклы :), чтобы просуммировать профит всех ордеров )ну и дополнительно использовать функцию OrderProfit, чтобы получить профит каждого ордера в отдельности :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Baggins Опубликовано 5 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 ноября, 2013 Будут ещё видео уроки? Хотелось бы видео по написанию индикаторов. Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 5 ноября, 2013 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 ноября, 2013 Будут ещё видео уроки? Хотелось бы видео по написанию индикаторов. вполне возможно, что ещё будут...но индикаторов ещё немного не дошли, есть несколько не рассмотренных тем. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ricedeni Опубликовано 5 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 ноября, 2013 Я много раз читал о том, что код должен быть по-возможности лаконичным. В роботе, мне потребовалось сделать так, что бы он начал торговать крупным лотом, только после того, как прошло 8 неудачных сделок подряд. Моих знаний, хватило только на то, что бы создать вот такого монстра: Спойлер if(OrderSelect(HistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-2,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-3,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-4,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-5,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-6,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-7,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-8,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() { sell(); } } } } } } } } } } } } } } } } Как можно сделать более лаконично? рекомендую посмотреть урок №2после просмотра моментально сможете уложиться в 5 строк кода вместо этого монстра... :) Честно, посмотрел несколько раз. Сначала думал, что ситуация с циклом for 1 в 1 как моя, но, так и не хватило ума, как реализовать это в моем случае. Попробовал с циклом while. Вроде бы, все просто и логично, но тоже не работает.Подскажите, где собака зарыта? Спойлер int a=1;int b=8;while (OrderProfit() if(OrderSelect(HistoryTotal()-a,SELECT_BY_POS,MODE_HISTORY)) a ++; if (a >= b) sell(); } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Levenbraun Опубликовано 5 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 ноября, 2013 Друзья, помогите найти индикатор ТМА с кодом как в 3ем уроке. У меня все какие то другие. из за этого не могу третий урок сделать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 5 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 ноября, 2013 Друзья, помогите найти индикатор ТМА с кодом как в 3ем уроке. У меня все какие то другие. из за этого не могу третий урок сделать. Вроде этот:Tma.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ricedeni Опубликовано 6 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 ноября, 2013 Я много раз читал о том, что код должен быть по-возможности лаконичным. В роботе, мне потребовалось сделать так, что бы он начал торговать крупным лотом, только после того, как прошло 8 неудачных сделок подряд. Моих знаний, хватило только на то, что бы создать вот такого монстра: Спойлер if(OrderSelect(HistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-2,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-3,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-4,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-5,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-6,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-7,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() {if(OrderSelect(HistoryTotal()-8,SELECT_BY_POS,MODE_HISTORY)) { if (OrderProfit() { sell(); } } } } } } } } } } } } } } } } Как можно сделать более лаконично? рекомендую посмотреть урок №2после просмотра моментально сможете уложиться в 5 строк кода вместо этого монстра... :) Честно, посмотрел несколько раз. Сначала думал, что ситуация с циклом for 1 в 1 как моя, но, так и не хватило ума, как реализовать это в моем случае. Попробовал с циклом while. Вроде бы, все просто и логично, но тоже не работает.Подскажите, где собака зарыта? Спойлер int a=1;int b=8;while (OrderProfit() if(OrderSelect(HistoryTotal()-a,SELECT_BY_POS,MODE_HISTORY)) a ++; if (a >= b) sell(); } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 6 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 ноября, 2013 Ricedeni Цитата while(выражение)оператор;Значение выражения определяется до выполнения оператора. Следовательно, если выражение ложно с самого начала, то оператор вообще не выполняется. Может попробовать сравнить a и b, а не OrderProfit() и 0? Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 7 ноября, 2013 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 ноября, 2013 Цитата Честно, посмотрел несколько раз. Сначала думал, что ситуация с циклом for 1 в 1 как моя, но, так и не хватило ума, как реализовать это в моем случае. Попробовал с циклом while. Вроде бы, все просто и логично, но тоже не работает.Подскажите, где собака зарыта? Итак, функция для подсчёта суммарного профита в валюте депозита://---------------------------------------------------------------------------------------------------------double CalculateProfit() { double Profit = 0; for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) if (OrderMagicNumber() == MagicNumber) if (OrderType() == OP_BUY || OrderType() == OP_SELL) Profit += (OrderProfit() + OrderSwap() + OrderCommission()); } return (Profit);} Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ricedeni Опубликовано 7 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 ноября, 2013 Огромное спасибо!Добавлено: 07-11-2013 03:21:04А вы, в будущих уроках, планируете рассматривать создание мультивалютных роботов? Изменено 7 ноября, 2013 пользователем Ricedeni Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 7 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 ноября, 2013 Итак, функция для подсчёта суммарного профита в валюте депозита... - а чем она отличается от AccountProfit()? Ссылка на сообщение Поделиться на другие сайты More sharing options...
mzk_3om6u Опубликовано 7 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 ноября, 2013 Итак, функция для подсчёта суммарного профита в валюте депозита... - а чем она отличается от AccountProfit()? Этой строчкой Profit += (OrderProfit() + OrderSwap() + OrderCommission() и циклом, который выбирает ордера совы.AccountProfit() - общий профит счёта. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 7 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 ноября, 2013 Всем начинающим и не очень кодерам привет!Заинтересовался программингом на mql, дабы проверить некоторые свои идеи, постепенно втягиваюсь в это увлекательное дело:) Отдельное спасибо xbms за уроки, с ними процесс обучения веселее и приятней, а главное понятней!:)Не пинайте сильно за нубский вопрос, который возможно и был, так как только начинаю осваивать mql.:Допустим у меня открыты рыночные ордера и sell и buy, их нужно закрыть, когда общий профит этих ордеров выходит в определенный плюс. Если использовать if (AccountProfit() >= Profit) - то закрываемся, сами понимаете, закрытие в реальном рынке будет безумно долго, особенно если ордеров много.Есть ли какой способ вычислить общий ТП висящих buy и sell ордеров, отталкиваясь от нужного значения в валюте депо, допустим Profit = 5 usd? Если нужно выставить TP у брокера:1. Фильтр по инструменту (если нужно).2. Фильтр по магику (если нужно).3. Вычислить разницу в общих объёмах бай и селл (куда объём больше - туда и будем работать). 4. Посчитать общий безубыток.5. Перевести наши 5 usd в пункты, относительно разницы объёмов.6. Посчитать TP = безубыток + посчитанные пункты (учесть спред)7. Модифицировать ордера.Если спред плавающий, может вылезти бяка...mzk_3om6u,я думал, этой: if (OrderMagicNumber() == MagicNumber)и мне интересно, учитывает-ли AccountProfit(), своп и комиссию... Ссылка на сообщение Поделиться на другие сайты More sharing options...
JR Опубликовано 8 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 ноября, 2013 Vorchunozavr , спс, буду пробовать.и мне интересно, учитывает-ли AccountProfit(), своп и комиссию... Мне тоже :) Если нет, получается функцию CalculateProfit(), приведенную выше, можно заменить на Profit = AccountProfit() + OrderSwap() + OrderCommission() ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 8 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 ноября, 2013 Vorchunozavr , спс, буду пробовать.Мне тоже :) Если нет, получается функцию CalculateProfit(), приведенную выше, можно заменить на Profit = AccountProfit() + OrderSwap() + OrderCommission() ? Нет, немного не так. OrderSwap() и OrderCommission() нужно вытаскивать из каждого ордера, а это всё-равно функция получается.Т.е., лучше использовать функцию xbms (и если фильтр по магику не нужен - можно убрать...)PS. Набросал скрипт, теперь знаю, что AccountProfit() комиссию учитывает. Про своп, буду знать в понедельник.2013-11-08_133053.png Изменено 8 ноября, 2013 пользователем Vorchunozavr Ссылка на сообщение Поделиться на другие сайты More sharing options...
mzk_3om6u Опубликовано 8 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 ноября, 2013 Всем добрый вечер!У меня вопрос(в интернете не нашел ответа), какие отношения у mql4 и .txt?Задача найти в .txt нужную строчку и её вытащить.Из функций самая близкая FileReadString(), но она возвращает только первую строчку, как перейти ко второй?Функция FileSeek() так же передвигает значение по первой строчке.В общем я в замешательстве. :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
elruso Опубликовано 9 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 ноября, 2013 Всем добрый вечер!У меня вопрос(в интернете не нашел ответа), какие отношения у mql4 и .txt?Задача найти в .txt нужную строчку и её вытащить.Из функций самая близкая FileReadString(), но она возвращает только первую строчку, как перейти ко второй?Функция FileSeek() так же передвигает значение по первой строчке.В общем я в замешательстве. :) А может цикл поможет! Цитата while(FileIsEnding(File)==false) //с начала файла Text =FileReadString(File); if(FileIsEnding(File)==true) //до конца break; а потом может StringSubstr() поможет или StringFind()! Изменено 9 ноября, 2013 пользователем elruso Ссылка на сообщение Поделиться на другие сайты More sharing options...
Vorchunozavr Опубликовано 9 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 ноября, 2013 Итак, эксперимент завершён, теперь точно знаю, что AccountProfit(), учитывает и своп и комиссию.Ricedeni, Вы решили свою задачку с циклом? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Tatyana59 Опубликовано 9 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 ноября, 2013 Очень понравился, работает хорошо, прибыль норма, но просадка ну очень до неприличных размеров, по тесту 67%, за 2 недели, 2700 зелени накосил, Но просадка как слон все съела. Пыталась S/L вставить, не слушается, нужно(как я думаю) S/L=6 или 10 поставить. А еще открытые ордера с увел. лотом без стопа и профита, вот и висят. Заранее большое спасибо! CrazyScalper-full_ver_1.0MM+.mq4CrazyScalper-full_ver_1.0MM+.ex4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
FOREX-kun777 Опубликовано 9 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 ноября, 2013 Очень понравился, работает хорошо, прибыль норма, но просадка ну очень до неприличных размеров, по тесту 67%, за 2 недели, 2700 зелени накосил, Но просадка как слон все съела. Пыталась S/L вставить, не слушается, нужно(как я думаю) S/L=6 или 10 поставить. А еще открытые ордера с увел. лотом без стопа и профита, вот и висят. Заранее большое спасибо! Вы что, специально зарегистрировались на этом форуме вчера 8 ноября, чтобы вам этот сливатор полечили?! :-? Изменено 9 ноября, 2013 пользователем FOREX-kun777 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ricedeni Опубликовано 9 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 ноября, 2013 Итак, эксперимент завершён, теперь точно знаю, что AccountProfit(), учитывает и своп и комиссию.Ricedeni, Вы решили свою задачку с циклом? Еще пока нет :( Ссылка на сообщение Поделиться на другие сайты More sharing options...
mzk_3om6u Опубликовано 9 ноября, 2013 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 9 ноября, 2013 такие не "стабильные" мартышки, лечатся голоданием и голом в сердце :d Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти