в функции 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 барам. В результате советник отработал, как и должен был. Евра была куплена от нижней линии, а йена продана от верхней. По фунту и чифу тоже всё правильно было отработано. Так что проверяйте у себя. Советник рабочий.
KimIV:
khorosh:
в функции 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 барам. В результате советник отработал, как и должен был. Евра была куплена от нижней линии, а йена продана от верхней. По фунту и чифу тоже всё правильно было отработано. Так что проверяйте у себя. Советник рабочий.
Я может не совсем понял логику советника, но мне кажется, если используется одна линия, то условие, в котором была ошибка, выполнится и функция idPriceLevel() примет значение False, а это не позволит открыть позицию. Поясните,если я не прав.
если используется одна линия, то условие, в котором была ошибка, выполнится и функция idPriceLevel() примет значение False, а это не позволит открыть позицию.
Да, всё верно. Советнику для нормальной работы нужны две линии: одна выше цены, а вторая - ниже текущей цены. На сайте описание я поправил. Спасибо!
если используется одна линия, то условие, в котором была ошибка, выполнится и функция idPriceLevel() примет значение False, а это не позволит открыть позицию.
Да, всё верно. Советнику для нормальной работы нужны две линии: одна выше цены, а вторая - ниже текущей цены. На сайте описание я поправил. Спасибо!
Вот поэтому у меня позиция не открывалась, так как я работал с одной линией. Теперь стало всё понятно. Спасибо за Ваш бескорыстный труд. Ваши функции сделаны очень чётко и ясно описаны. Наверно в большинстве, создаваемых в настоящее время советников, теперь используются Ваши функции.
Данная функция возвращает флаг существования ордера или позиции около рынка (на заданном расстоянии в пунктах от рынка). Более точный отбор проверяемых ордеров или позиций задаётся внешними параметрами:
sy - Наименование инструмента. Если задать этот параметр, то функция проверит ордера или позиции только заданного инструмента. "" или NULL означает текущий инструмент.
op - Торговая операция, тип ордера или позиции. Допустимые значения: OP_BUY, OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP или -1. Значение по умолчанию -1 означает любую торговую операцию.
mn - Идентификатор ордера или позиции (MagicNumber). Значение по умолчанию -1 - любой идентификатор.
ds - Расстояние от рынка в пунктах. Значение по умолчанию 1000000.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает флаг существования позиции или ордера около рынка |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| op - торговая операция ( -1 - любая операция) |//| mn - MagicNumber ( -1 - любой магик) |//| ds - расстояние в пунктах от рынка ( 1000000 - по умолчанию) |//+----------------------------------------------------------------------------+boolExistOPNearMarket(stringsy="", intop=-1, intmn=-1, intds=1000000){inti, k=OrdersTotal(), ot;
if(sy=="" || sy=="0")sy=Symbol();
doublep=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)){ot=OrderType();
if((OrderSymbol()==sy) && (op<0 || ot==op)){if(mn<0 || OrderMagicNumber()==mn){if(ot==OP_BUY || ot==OP_BUYLIMIT || ot==OP_BUYSTOP){if(MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())<ds*p)return(True);
}if(ot==OP_SELL || ot==OP_SELLLIMIT || ot==OP_SELLSTOP){if(MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))<ds*p)return(True);
}}}}}return(False);
}
ЗЫ. В прицепе скрипт для экспериментов с функцией ExistOPNearMarket().
Данная функция возвращает флаг существования позиции по заданной цене открытия. Более точный отбор проверяемых позиций задаётся внешними параметрами:
sy - Наименование рыночного инструмента. Если задать этот параметр, то функция проверит позиции только заданного инструмента. Значение по умолчанию "" означает любой рыночный инструмент. NULL означает текущий инструмент.
op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
pp - Цена открытия позиции. Значение по умолчанию 0 означает любую цену.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает флаг существования позиций по цене открытия |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - торговая операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| pp - цена ( 0 - любая цена) |//+----------------------------------------------------------------------------+boolExistPosByPrice(stringsy="", intop=-1, intmn=-1, doublepp=0){doublepx, py;
intd, i, k=OrdersTotal();
if(sy=="0")sy=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)){if(OrderType()==OP_BUY || OrderType()==OP_SELL){if(mn<0 || OrderMagicNumber()==mn){d=MarketInfo(OrderSymbol(), MODE_DIGITS);
px=NormalizeDouble(pp, d);
py=NormalizeDouble(OrderOpenPrice(), d);
if(pp<=0 || px==py)return(True);
}}}}}return(False);
}
ЗЫ. В прицепе скрипт для тестирования функции ExistPosByPrice().
Данная функция возвращает сумму лотов открытых позиций. Более точный отбор учитываемых позиций задаётся внешними параметрами:
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 - любой магик) |//+----------------------------------------------------------------------------+doubleGetAmountLotFromOpenPos(stringsy="", intop=-1, intmn=-1){doublel=0;
inti, k=OrdersTotal();
if(sy=="0")sy=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if(OrderSymbol()==sy || sy==""){if(OrderType()==OP_BUY || OrderType()==OP_SELL){if(op<0 || OrderType()==op){if(mn<0 || OrderMagicNumber()==mn){l+=OrderLots();
}}}}}}return(l);
}
ЗЫ. В аттаче скрипт для тестирования функции GetAmountLotFromOpenPos().
Эта функция возвращает индекс ордера или позиции по тикету. Более точный отбор перебираемых ордеров или позиций задаётся внешними параметрами:
ti - Тикет ордера, позиции. Значение данного параметра не может быть пустым или нулевым.
sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
op - Торговая операция, тип ордера или позиции. Допустимые значения: OP_BUY, OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP или -1. Значение по умолчанию -1 означает любую позицию.
mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает индекс ордера или позиции по тикету. |//+----------------------------------------------------------------------------+//| Параметры: |//| ti - тикет ордера, позиции |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+intGetIndexByTicket(intti, stringsy="", intop=-1, intmn=-1){inti, k=OrdersTotal();
if(sy=="0")sy=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)){if((mn<0 || OrderMagicNumber()==mn) && OrderTicket()==ti)return(i);
}}}return(-1);
}
PS. Во вложении скрипт для тестирования функции GetIndexByTicket().
Хотелось бы узнать у тебя есть ли у тебя функции определения корреляции двух рядов, переданных в качестве параметров ей?
нет... но у меня есть интерес к этой теме. Если Вы предоставите формулы расчёта корреляции, то я напишу функцию.
ЗЫ. Сам искать формулы я не буду. По ссылкам с материалами тоже не пойду. То есть у меня нет желания разбираться в теме. Есть только желание по готовым формулам написать функцию.
Хотелось бы узнать у тебя есть ли у тебя функции определения корреляции двух рядов, переданных в качестве параметров ей?
нет... но у меня есть интерес к этой теме. Если Вы предоставите формулы расчёта корреляции, то я напишу функцию.
ЗЫ. Сам искать формулы я не буду. По ссылкам с материалами тоже не пойду. То есть у меня нет желания разбираться в теме. Есть только желание по готовым формулам написать функцию.
Благодарю! Исправленную версию советника e-TFL_v2 залил на сайт.
Не знаю... этот советник я только-что закончил тестировать на демо НортФинанс. Вчера звонил знакомый из Москвы. Пожаловался на этот же советник. Мол он открывает позицию от линии, а потом ещё, и ещё, пока его не остановишь, может много поз наоткрывать. Поэтому целей проверки было две:
1. По Вашему вопросу. Проверка общей работоспособности.
2. По вопросу моего знакомого. Открытие от одной линии только одной позиции.
Для проверки я поставил советник e-TFL_v2 на 5-ти минутные ТФ EURUSD, GBPUSD, USDCHF и USDJPY. Трендовыми линиями нарисовал каналы по последним 20-30 барам. В результате советник отработал, как и должен был. Евра была куплена от нижней линии, а йена продана от верхней. По фунту и чифу тоже всё правильно было отработано. Так что проверяйте у себя. Советник рабочий.
Благодарю! Исправленную версию советника e-TFL_v2 залил на сайт.
Не знаю... этот советник я только-что закончил тестировать на демо НортФинанс. Вчера звонил знакомый из Москвы. Пожаловался на этот же советник. Мол он открывает позицию от линии, а потом ещё, и ещё, пока его не остановишь, может много поз наоткрывать. Поэтому целей проверки было две:
1. По Вашему вопросу. Проверка общей работоспособности.
2. По вопросу моего знакомого. Открытие от одной линии только одной позиции.
Для проверки я поставил советник e-TFL_v2 на 5-ти минутные ТФ EURUSD, GBPUSD, USDCHF и USDJPY. Трендовыми линиями нарисовал каналы по последним 20-30 барам. В результате советник отработал, как и должен был. Евра была куплена от нижней линии, а йена продана от верхней. По фунту и чифу тоже всё правильно было отработано. Так что проверяйте у себя. Советник рабочий.
Я может не совсем понял логику советника, но мне кажется, если используется одна линия, то условие, в котором была ошибка, выполнится и функция idPriceLevel() примет значение False, а это не позволит открыть позицию. Поясните,если я не прав.
если используется одна линия, то условие, в котором была ошибка, выполнится и функция idPriceLevel() примет значение False, а это не позволит открыть позицию.
Да, всё верно. Советнику для нормальной работы нужны две линии: одна выше цены, а вторая - ниже текущей цены. На сайте описание я поправил. Спасибо!
если используется одна линия, то условие, в котором была ошибка, выполнится и функция idPriceLevel() примет значение False, а это не позволит открыть позицию.
Да, всё верно. Советнику для нормальной работы нужны две линии: одна выше цены, а вторая - ниже текущей цены. На сайте описание я поправил. Спасибо!
Вот поэтому у меня позиция не открывалась, так как я работал с одной линией. Теперь стало всё понятно. Спасибо за Ваш бескорыстный труд. Ваши функции сделаны очень чётко и ясно описаны. Наверно в большинстве, создаваемых в настоящее время советников, теперь используются Ваши функции.
Функция ExistOPNearMarket().
Данная функция возвращает флаг существования ордера или позиции около рынка (на заданном расстоянии в пунктах от рынка). Более точный отбор проверяемых ордеров или позиций задаётся внешними параметрами:
- sy - Наименование инструмента. Если задать этот параметр, то функция проверит ордера или позиции только заданного инструмента. "" или NULL означает текущий инструмент.
- op - Торговая операция, тип ордера или позиции. Допустимые значения: OP_BUY, OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP или -1. Значение по умолчанию -1 означает любую торговую операцию.
- mn - Идентификатор ордера или позиции (MagicNumber). Значение по умолчанию -1 - любой идентификатор.
- ds - Расстояние от рынка в пунктах. Значение по умолчанию 1000000.
ЗЫ. В прицепе скрипт для экспериментов с функцией ExistOPNearMarket().Функция ExistPosByPrice().
Данная функция возвращает флаг существования позиции по заданной цене открытия. Более точный отбор проверяемых позиций задаётся внешними параметрами:
- sy - Наименование рыночного инструмента. Если задать этот параметр, то функция проверит позиции только заданного инструмента. Значение по умолчанию "" означает любой рыночный инструмент. NULL означает текущий инструмент.
- op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
- mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
- pp - Цена открытия позиции. Значение по умолчанию 0 означает любую цену.
ЗЫ. В прицепе скрипт для тестирования функции ExistPosByPrice().Функция GetAmountLotFromOpenPos().
Данная функция возвращает сумму лотов открытых позиций. Более точный отбор учитываемых позиций задаётся внешними параметрами:
- sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
- op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
- mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
ЗЫ. В аттаче скрипт для тестирования функции GetAmountLotFromOpenPos().Функция GetIndexByTicket().
Эта функция возвращает индекс ордера или позиции по тикету. Более точный отбор перебираемых ордеров или позиций задаётся внешними параметрами:
- ti - Тикет ордера, позиции. Значение данного параметра не может быть пустым или нулевым.
- sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
- op - Торговая операция, тип ордера или позиции. Допустимые значения: OP_BUY, OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP или -1. Значение по умолчанию -1 означает любую позицию.
- mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
PS. Во вложении скрипт для тестирования функции GetIndexByTicket().Здравствуй
Хотелось бы узнать у тебя есть ли у тебя функции определения корреляции двух рядов, переданных в качестве параметров ей?
Здравствуй
Хотелось бы узнать у тебя есть ли у тебя функции определения корреляции двух рядов, переданных в качестве параметров ей?
нет... но у меня есть интерес к этой теме. Если Вы предоставите формулы расчёта корреляции, то я напишу функцию.
ЗЫ. Сам искать формулы я не буду. По ссылкам с материалами тоже не пойду. То есть у меня нет желания разбираться в теме. Есть только желание по готовым формулам написать функцию.
Здравствуй
Хотелось бы узнать у тебя есть ли у тебя функции определения корреляции двух рядов, переданных в качестве параметров ей?
нет... но у меня есть интерес к этой теме. Если Вы предоставите формулы расчёта корреляции, то я напишу функцию.
ЗЫ. Сам искать формулы я не буду. По ссылкам с материалами тоже не пойду. То есть у меня нет желания разбираться в теме. Есть только желание по готовым формулам написать функцию.
Формула корреляции