B_Dima: если значение CCI стало больше 100 то открывать позицию на покупку до того момента пока значение не станет меньше -100, а когда станет меньше -100 открывать продажи до момента пока не станет больше 100.
Вам, Дима, я могу предложить такую вот функцию:
intCCI_period=14;
intApplied_Price=PRICE_CLOSE;
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.24.2008 |//| Описание : Возвращает торговый сигнал: |//| 1 - покупай |//| 0 - сиди, кури бамбук |//| -1 - продавай |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| nb - номер бара ( 0 - текущий номер бара) |//+----------------------------------------------------------------------------+intGetTradeSignal(stringsy="", inttf=0, intnb=0){if(sy=="" || sy=="0")sy=Symbol();
doublecci0=iCCI(sy, tf, CCI_period, Applied_Price, nb);
doublecci1=iCCI(sy, tf, CCI_period, Applied_Price, nb+1);
intbs=0;
if(cci1<=+100 && cci0>+100)bs=+1;
if(cci1>=-100 && cci0<-100)bs=-1;
return(bs);
}
Эта функция возвращает 1, когда нужно покупать и -1, когда нужно продавать. Условия покупки/продажи соответствуют Вашим пожеланиям. Вам теперь нужно всего лишь на каждом тике выполнять следующее:
1. Получать значение функции GetTradeSignal().
2. Если полученное значение ==0, то ничего не делать.
3. Если полученное значение >0, то закрывать все продажи и покупать.
4. Если полученное значение <0, то закрывать все покупки и продавать.
:))) конечно спасибо за помощь, но моя ошибка, я не достаточно точно объяснил, индикатор CCI с интервалом в 50 показывает направление и смену тренда, а открытие происходит при касании ценой EMA 8, а также используется стоп-лосс и тейк-профит и другие индикаторы для определения коррекции. Картина такая, когда CCI пробивает +100 открытие позиции на покупку происходит при касании ЕMA и не важно где находится CCI (+10 или-20), главное, что при пересечении -100 начинаются продажи. За промежуток времени между CCI>=+100 и CCI<=-100 может пройти 100 свечек и открыто 10 и более позиций. Надеюсь понятно. Если сможете подсказать буду рад.
Самыми первыми я решил дать примеры, о которых меня уже спрашивали неоднократно. Это открытие позиций в условиях рыночного исполнения торговых заявок Market Watch. Это когда нельзя одновременно отдать приказ на открытие позиции по рыночной цене и прикрепить к ней отложенный ордер. Такое открытие в условиях Market Watch нужно выполнять в два этапа: сначала открывать позицию, а потом прикреплять к ней отложенные ордера, то есть устанавливать ценовые уровни StopLoss и TakeProfit.
1. Купить 0.1 лота текущего инструмента и установить стоп 30 пунктов
Столько полезных функций выложили... Может есть желание написать некий шаблон для написания торгующего советника, который сможет открывать и закрывать отложенные ордера, позиции, выставлять тейк и стоплос, модифицировать ордера и позиции, в зависимости от заданных пользователем условий... такой шаблон позволит быстро написать советник, в котором меняется только блок условий (естественно, эта часть будет вставлена пользователем в зависимости от стратегии)...
Если есть полезные функции от Кима, т.е. некий стандарт универсальности в использовании, то почему бы не выложить код шаблона для торгующего советника от Кима...
Set777 писал (а): Игорь, пожалуйста, проверьте еще раз - скрипт не работает: 1) В обычных ДЦ нет ограничения по количеству открытых ордеров (бесконечно открывается) 2) В ДЦ, у которых ордера открываются по маркету - (Error131). Можете протестировать, например у НортФинанс.
1. В скрипте нет проверки на количество открытых позиций. Сколько раз Вы запустите скрипт, столько позиций он и откроет.
2. Ошибка 131 - Неправильный объём, размер лота. Возможно, дело в числе 0.15. Замените его на 0.2
kharko писал (а): Столько полезных функций выложили...
Ещё даже одной пятой части не выложил из того, что задумал... Я тут до осени буду всем надоедать. Так что терпите...
kharko писал (а): Может есть желание написать некий шаблон для написания торгующего советника, который сможет открывать и закрывать отложенные ордера, позиции, выставлять тейк и стоплос, модифицировать ордера и позиции, в зависимости от заданных пользователем условий...
шаблон... шаблон... Хорошая мысль! Спасибо! Но сначала функции...
Ну вот! Пошли функции поинтереснее! Например, такая, которая возвращает расстояние в пунктах между рынком и ближайшей позицей. Более точный отбор проверяемых позиций задаётся внешними параметрами:
sy - Наименование инструмента. Если задать этот параметр, то функция проверит позиции только заданного инструмента. "" или NULL означает текущий инструмент.
op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 - означает любую позицию.
mn - Идентификатор позиции (MagicNumber). Значение по умолчанию -1 - любой магик.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает расстояние в пунктах между рынком и ближайшей |//| позицей |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| op - торговая операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+intDistMarketAndPos(stringsy="", intop=-1, intmn=-1){doubled, p;
inti, k=OrdersTotal(), r=1000000;
if(sy=="" || sy=="0")sy=Symbol();
p=MarketInfo(sy, MODE_POINT);
if(p==0)if(StringFind(sy, "JPY")<0)p=0.0001; elsep=0.01;
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if((OrderSymbol()==sy) && (op<0 || OrderType()==op)){if(mn<0 || OrderMagicNumber()==mn){if(OrderType()==OP_BUY){d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
if(r>d)r=NormalizeDouble(d, 0);
}if(OrderType()==OP_SELL){d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
if(r>d)r=NormalizeDouble(d, 0);
}}}}}return(r);
}
Зачем может понадобиться функция, которая определяет, как далеко находится рынок от ближайшей к нему позиции? Я вижу, как минимум, четыре основных варианта:
Купили или продали. Рынок пошёл в нашу сторону. И как только он проходит некоторое расстояние, существующие позиции набрали определённую прибыль, так сразу же делаем доливку - входим ещё раз в ту же сторону.
Купили или продали. Рынок пошёл в нашу сторону. И как только он проходит некоторое расстояние, а существующие позиции набрали определённую прибыль, так сразу же мы понимаем, что всё! Разворот близок! Пора переворачиваться. Закрываем текущие позиции и открываемся в противоположную сторону.
Купили или продали. Рынок пошёл против нас. Но мы почему-то уверены в своей правоте и на некотором расстоянии от точки ближайшего входа, то есть на некотором уровне убытка усредняемся - открываемся в ту же сторону.
Купили или продали. Рынок пошёл против нас. И мы поняли, что со входом вышла ошибочка. Поэтому фиксируемся на определённом уровне убытка и открываемся в другую сторону.
ЗЫ. Если кому-то нужна конкретная реализация любого из перечисленных вариантов, пишите сюда заявки. Выполню все пожелания в рамках того, что я перечислил выше.
ЗЫ-ЗЫ. В прицепе скрипт-заготовка для экспериментирования с функцией DistMarketAndPos().
Уважаемый KimIV, в функции bool idPriceLevel(), входящей в Ваш советник e-TFL_v2 есть ошибка: в последнем по тексту условии дважды повторяется gdUpPrice==0, наверно, во втором случае Вы хотели написать gdDnPrice==0. Почему то это советник работает у меня в тестере в визуальном режиме, но на демо-счёте позиции не открывает, хотя в комментариях сообщает об уровнях продажи и покупки. Может подскажете в чём дело.
в функции bool idPriceLevel(), входящей в советник e-TFL_v2 есть ошибка: в последнем по тексту условии дважды повторяется gdUpPrice==0, наверно, во втором случае Вы хотели написать gdDnPrice==0.
Благодарю! Исправленную версию советника e-TFL_v2 залил на сайт.
khorosh:
Почему то это советник работает у меня в тестере в визуальном режиме, но на демо-счёте позиции не открывает, хотя в комментариях сообщает об уровнях продажи и покупки. Может подскажете в чём дело.
Не знаю... этот советник я только-что закончил тестировать на демо НортФинанс. Вчера звонил знакомый из Москвы. Пожаловался на этот же советник. Мол он открывает позицию от линии, а потом ещё, и ещё, пока его не остановишь, может много поз наоткрывать. Поэтому целей проверки было две:
1. По Вашему вопросу. Проверка общей работоспособности.
2. По вопросу моего знакомого. Открытие от одной линии только одной позиции.
Для проверки я поставил советник e-TFL_v2 на 5-ти минутные ТФ EURUSD, GBPUSD, USDCHF и USDJPY. Трендовыми линиями нарисовал каналы по последним 20-30 барам. В результате советник отработал, как и должен был. Евра была куплена от нижней линии, а йена продана от верхней. По фунту и чифу тоже всё правильно было отработано. Так что проверяйте у себя. Советник рабочий.
если значение CCI стало больше 100 то открывать позицию на покупку до того момента пока значение не станет меньше -100, а когда станет меньше -100 открывать продажи до момента пока не станет больше 100.
Вам, Дима, я могу предложить такую вот функцию:
Эта функция возвращает 1, когда нужно покупать и -1, когда нужно продавать. Условия покупки/продажи соответствуют Вашим пожеланиям. Вам теперь нужно всего лишь на каждом тике выполнять следующее:
1. Получать значение функции GetTradeSignal().
2. Если полученное значение ==0, то ничего не делать.
3. Если полученное значение >0, то закрывать все продажи и покупать.
4. Если полученное значение <0, то закрывать все покупки и продавать.
:))) конечно спасибо за помощь, но моя ошибка, я не достаточно точно объяснил, индикатор CCI с интервалом в 50 показывает направление и смену тренда, а открытие происходит при касании ценой EMA 8, а также используется стоп-лосс и тейк-профит и другие индикаторы для определения коррекции. Картина такая, когда CCI пробивает +100 открытие позиции на покупку происходит при касании ЕMA и не важно где находится CCI (+10 или-20), главное, что при пересечении -100 начинаются продажи. За промежуток времени между CCI>=+100 и CCI<=-100 может пройти 100 свечек и открыто 10 и более позиций. Надеюсь понятно. Если сможете подсказать буду рад.
моя ошибка, я не достаточно точно объяснил,
Ну что ж... Ваша ошибка - Вам и исправлять :-)
Направление я Вам указал точное. К цели оно приведёт. Так что дерзайте...
Примеры использования функции ModifyOrder().
Самыми первыми я решил дать примеры, о которых меня уже спрашивали неоднократно. Это открытие позиций в условиях рыночного исполнения торговых заявок Market Watch. Это когда нельзя одновременно отдать приказ на открытие позиции по рыночной цене и прикрепить к ней отложенный ордер. Такое открытие в условиях Market Watch нужно выполнять в два этапа: сначала открывать позицию, а потом прикреплять к ней отложенные ордера, то есть устанавливать ценовые уровни StopLoss и TakeProfit.
1. Купить 0.1 лота текущего инструмента и установить стоп 30 пунктов
2. Продать 0.15 лота текущего инструмента и установить SL=45, TP=99
В прицепе работающий скрипт с примерами.Игорь, пожалуйста, проверьте еще раз - скрипт не работает:
1) В обычных ДЦ нет ограничения по количеству открытых ордеров (бесконечно открывается)
2) В ДЦ, у которых ордера открываются по маркету - (Error131). Можете протестировать, например у НортФинанс.
Столько полезных функций выложили... Может есть желание написать некий шаблон для написания торгующего советника, который сможет открывать и закрывать отложенные ордера, позиции, выставлять тейк и стоплос, модифицировать ордера и позиции, в зависимости от заданных пользователем условий... такой шаблон позволит быстро написать советник, в котором меняется только блок условий (естественно, эта часть будет вставлена пользователем в зависимости от стратегии)...
Если есть полезные функции от Кима, т.е. некий стандарт универсальности в использовании, то почему бы не выложить код шаблона для торгующего советника от Кима...
Игорь, пожалуйста, проверьте еще раз - скрипт не работает:
1) В обычных ДЦ нет ограничения по количеству открытых ордеров (бесконечно открывается)
2) В ДЦ, у которых ордера открываются по маркету - (Error131). Можете протестировать, например у НортФинанс.
1. В скрипте нет проверки на количество открытых позиций. Сколько раз Вы запустите скрипт, столько позиций он и откроет.
2. Ошибка 131 - Неправильный объём, размер лота. Возможно, дело в числе 0.15. Замените его на 0.2
Столько полезных функций выложили...
Ещё даже одной пятой части не выложил из того, что задумал... Я тут до осени буду всем надоедать. Так что терпите...
Может есть желание написать некий шаблон для написания торгующего советника, который сможет открывать и закрывать отложенные ордера, позиции, выставлять тейк и стоплос, модифицировать ордера и позиции, в зависимости от заданных пользователем условий...
Функция DistMarketAndPos().
Ну вот! Пошли функции поинтереснее! Например, такая, которая возвращает расстояние в пунктах между рынком и ближайшей позицей. Более точный отбор проверяемых позиций задаётся внешними параметрами:
Примеры использования функци DistMarketAndPos().
Зачем может понадобиться функция, которая определяет, как далеко находится рынок от ближайшей к нему позиции? Я вижу, как минимум, четыре основных варианта:
ЗЫ. Если кому-то нужна конкретная реализация любого из перечисленных вариантов, пишите сюда заявки. Выполню все пожелания в рамках того, что я перечислил выше.
ЗЫ-ЗЫ. В прицепе скрипт-заготовка для экспериментирования с функцией DistMarketAndPos().
Благодарю! Исправленную версию советника e-TFL_v2 залил на сайт.
Не знаю... этот советник я только-что закончил тестировать на демо НортФинанс. Вчера звонил знакомый из Москвы. Пожаловался на этот же советник. Мол он открывает позицию от линии, а потом ещё, и ещё, пока его не остановишь, может много поз наоткрывать. Поэтому целей проверки было две:
1. По Вашему вопросу. Проверка общей работоспособности.
2. По вопросу моего знакомого. Открытие от одной линии только одной позиции.
Для проверки я поставил советник e-TFL_v2 на 5-ти минутные ТФ EURUSD, GBPUSD, USDCHF и USDJPY. Трендовыми линиями нарисовал каналы по последним 20-30 барам. В результате советник отработал, как и должен был. Евра была куплена от нижней линии, а йена продана от верхней. По фунту и чифу тоже всё правильно было отработано. Так что проверяйте у себя. Советник рабочий.