Отправлено: 16.10.14 08:37. Заголовок: Помогите еще раз дорогой мастер?!
Добрый день уважаемый Игорь! Я еще к вам по просьбу. Короче, есть индикатор корреляции и его коде использован формулу типа FastMA - SlowMA, но я хотел изменить его на FastMA / SlowMA. Сам попробовал но ни как не получилось(в принципе похоже элементарно легкий но у меня не получилось). Пожалуйста, покажите как заменит формулу?!
Отправлено: 16.10.14 20:36. Заголовок: Во-первых, в индикат..
Во-первых, в индикаторе не предусмотрена проверка на элементарные ошибки - деление на ноль. В итоге при запуске, когда не открыты соответствующие графики, индикатор завершается аварийно. Для предотвращения ошибки необходимо переписать код в блоке, следующем после
Во-вторых, сами данные индикатор выдает очень неоднозначно, т. к. коэффициент "корреляции" между парами вычисляется на основании последней известной свечи каждого из символов. Получаем, что показания индикатора будут зависеть от момента его первого запуска. Так, запустив его в один момент времени, получим одну картину, в другой момент времени - другую. Причем в процессе работы индикатор изменять свои исторические показания не будет. Это очень странный алгоритм.
Для изменения формулы необходимо знак "-" при МА заменить на знак "/". Только не забыть перед этим осуществить проверку деления на ноль следующим образом:
Задуманное изменение формулы ни к чему хорошему не приведет. На экране будут отображены лишь горизонтальные линии, т. к. величина значений разных линий отличается на порядки.
Добрый вечер мой дорогой преподаватель! Еще к вам по просьбами обращаю. Пробовал написать советник работающие по мартингейлу, но не получилось корректировать порядочности открывание ордеры. Правила стратегии советника такого: Откроется 1 ордер на продажу с SL 10 и TP 10 пункта. Если сработал TP, тогда повторяется первый шаг. Если сработал SL, тогда откроем противоположный ордер(покупка) с SL 20 и TP 20 пунктам. Если сработал опять SL, теперь откроем тоже противоположный ордер(продажа) с SL 30 и TP 30 пунктам. Этот цикл продолжается до срабатывание TP и потом повторяется первый шаг. Здесь проблема только с открывание противоположный ордеры после стоп лосса и повторение первый шаг после тейкпрофита. Пожалуйста, помогите с кодом?! Заранее спасибо большое!!! Вот и сам советник: http://qclk.ru/k6/57gs или http://file.qip.ru/arch/ZxPS-Tfc/EA.html
Отправлено: 03.11.14 19:52. Заголовок: Добрый вечер. В Ваш..
Добрый вечер.
В Вашем коде есть такие замечательные функции, как FindLastHistoryOrderParameter и ей подобные. Но тем не менее, в коде Вы повторяете их функционал. Зачем? Всего то нужно: 1. Определить величину профита последнего ордера в истории. Это лучше сделать через тикет:
цитата:
int lastTicket = FindLastHistoryOrderParameter(MAGIC_NUM, "ticket"); if (!OrderSelect(lastTicket, SELECT_BY_TICKET)) return 0;
2. Если профит положительный, то открыть ордер с SL 10 и TP 10.
3. Если профит отрицательный, то посмотреть, какой размер профита/стопа был у последнего закрытого ордера. К этой величине добавить 10 и открыть новый ордер.
Отправлено: 03.11.14 23:12. Заголовок: Спасибо большое, но ..
Спасибо большое, но почему то не работает?! Там проблема не с ТП или СЛ, а открытие противоположный ордеры по очереди(если сработал СЛ продажу тогда открываем покупку). Сделал так: //----------------------------------------------------------------------------------------------------------------------------//
int lastTicket = FindLastHistoryOrderParameter(MAGIC_NUM, "ticket"); if (!OrderSelect(lastTicket, SELECT_BY_TICKET)) return 0;
Там проблема не с ТП или СЛ, а открытие противоположный ордеры по очереди(если сработал СЛ продажу тогда открываем покупку).
Вместе с проверкой прибыльности Вы зачем-то проверяете значение параметра StartWithBuy. Для какой цели? Ведь нужно проверять тип закрытого ордера, и открывать противоположный ему:
цитата:
if (OrderProfit > 0) { if (StartWithBuy) { // открыть Buy с профитом/стопом 10 } else { // открыть Sell с профитом/стопом 10 } } else { if (OrderType() == OP_BUY) { // открыть Sell с увеличенными профитом/стопом } else { // открыть Buy с увеличенными профитом/стопом } }
Вместе с проверкой прибыльности Вы зачем-то проверяете значение параметра StartWithBuy. Для какой цели? Ведь нужно проверять тип закрытого ордера, и открывать противоположный ему:
цитата: if (OrderProfit > 0) { if (StartWithBuy) { // открыть Buy с профитом/стопом 10 } else { // открыть Sell с профитом/стопом 10 } } else { if (OrderType() == OP_BUY) { // открыть Sell с увеличенными профитом/стопом } else { // открыть Buy с увеличенными профитом/стопом } }
Извиняюсь?! Опять не получилось(не откроется ни какого ордера)!
Для легкости понимание удаляем из кода StartWithBuy.
Теперь начнем с началу: - Сразу после запуск советника откроем одна ордер на покупку(Buy) с 10п ТП и СЛ; - Если сработал ТП тогда откроем ордер на покупка(Buy) тоже с 10п ТП и СЛ(то есть каждый раз после срабатывание ТП повторяется первый шаг); - Если сработал СЛ тогда откроем противоположный ордер то есть продажу(Sell) с 20п(удвоенным) ТП и СЛ; - Если опять сработал СЛ, теперь тоже откроем противоположный ордер(Buy) с удвоенным ТП и СЛ; - Если теперь сработал ТП тогда повторяется первый шаг(не зависимо на типу последного ордера откроем ордер на покупку с начальном ТП и СЛ); Пожалуйста, еще раз помогите с кодам?!
Извиняюсь?! Опять не получилось(не откроется ни какого ордера)!
Конечно, не откроется. Откроется только в том случае, если не получилось выбрать ордер. Именно такое условие Вы поставили в начало блока:
цитата:
if (!OrderSelect(lastTicket, SELECT_BY_TICKET))
Читается так: если НЕ удалось выбрать ордер с тикетом lastTicket, то выполнить следующее. Там, где я в примерах использовал такую конструкцию, после условия следовал оператор:
цитата:
return (0);
то есть выход из обработки тика. Таким образом, Вам нужно обрабатывать ситуацию, когда выбран ордер.
Конечно, не откроется. Откроется только в том случае, если не получилось выбрать ордер. Именно такое условие Вы поставили в начало блока:
цитата: if (!OrderSelect(lastTicket, SELECT_BY_TICKET))
Читается так: если НЕ удалось выбрать ордер с тикетом lastTicket, то выполнить следующее. Там, где я в примерах использовал такую конструкцию, после условия следовал оператор:
цитата: return (0);
то есть выход из обработки тика. Таким образом, Вам нужно обрабатывать ситуацию, когда выбран ордер.
Да сначала поставил это как вы написали(if (!OrderSelect(lastTicket, SELECT_BY_TICKET)) return 0; ), но все равно не открылся ордер и потом удалял эту из кода и опять не работал. Вот сделал так, но все равно не работает:
Отправлено: 08.11.14 21:14. Заголовок: Все получилось! Сам ..
Все получилось! Сам поправил и это работает. Но теперь появилось другого просьба к вам - как прописать в советнике, чтобы закрытие сделок при работе на реальных счетах отображалось так же, как при визуальном тестировании (стрелками и пунктиром, соединяющим точки открытия и закрытия ордеров)?
Все даты в формате GMT
2 час. Хитов сегодня: 1
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет