Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно. Необходимо обновить браузер или попробовать использовать другой.
С глобальными чёт не клеитса то не запишется то не вызовется, а через статистические пробовал делать но тож чет в тупик зашел всегда 0 возвращает почему не понял
Требуется совет. Пишу функцию, которую попутно додумываю. Ситуация такая:
Нужно чтоб функция считала бары соответствуют канкретным условиях и идущие в подряд друг за другом, (не через один, через 2, или через сколько-н. , а друг за другом..).
Рассмотрим вариант когда тренд предполагаемый вниз. Нужно, если идёт коррекция, допустим, 5 баров в подряд бычьих, и размер которых не меньше некоторого значения, то выйти с функции. Я сделал вот так:
PHP:
int LastCandlesType()
{
bool up, // Свеча направлена вверх
dn; // Свеча направлена вниз
int cnt, // Счётчик идущих друг за другом бычьих свечей
i_AnyBarsToHistory = 30; // Количество используемых баров из истории для рассчёта сигнала
double i_sizeOfCurrBar = 10; // Размер текущего бара
for (int i=Bars-1; i>=Bars-AnyBarsToHistory; i--)
{
if ((Close[i] - Open[i]) <= i_sizeOfCurrBar * Point) // Пропускаем все бары, размера меньше заданного внешним параметром
continue;
if (Close[i] > Open[i]) // Если условие соблюдается, значит текущий бар направлен вверх
up = true;
if (up) // Если бар направлен вверх, значит к счётчик увеличивается
cnt++;
}
if (cnt == 5) // Если 5 баров вподряд бычьи..
return (BULL_CANDLES); //..Выходим из функции
}
Может есть какой-то ещё способ большее гибкий? И всё ли у меня верно? Интересно мнение программистов с большим опытом чем у меня.
Требуется совет. Пишу функцию, которую попутно додумываю. Ситуация такая:
Нужно чтоб функция считала бары соответствуют канкретным условиях и идущие в подряд друг за другом, (не через один, через 2, или через сколько-н. , а друг за другом..).
Рассмотрим вариант когда тренд предполагаемый вниз. Нужно, если идёт коррекция, допустим, 5 баров в подряд бычьих, и размер которых не меньше некоторого значения, то выйти с функции. Я сделал вот так:
PHP:
int LastCandlesType()
{
bool up, // Свеча направлена вверх
dn; // Свеча направлена вниз
int cnt, // Счётчик идущих друг за другом бычьих свечей
i_AnyBarsToHistory = 30; // Количество используемых баров из истории для рассчёта сигнала
double i_sizeOfCurrBar = 10; // Размер текущего бара
for (int i=Bars-1; i>=Bars-AnyBarsToHistory; i--)
{
if ((Close[i] - Open[i]) <= i_sizeOfCurrBar * Point) // Пропускаем все бары, размера меньше заданного внешним параметром
continue;
if (Close[i] > Open[i]) // Если условие соблюдается, значит текущий бар направлен вверх
up = true;
if (up) // Если бар направлен вверх, значит к счётчик увеличивается
cnt++;
}
if (cnt == 5) // Если 5 баров вподряд бычьи..
return (BULL_CANDLES); //..Выходим из функции
}
Может есть какой-то ещё способ большее гибкий? И всё ли у меня верно? Интересно мнение программистов с большим опытом чем у меня.
Зачем используется кол-во баров для подсчета=30. Если нужно 5 баров подряд бычьих то и используй для расчёта 5 баров. Как только они появятся выходим из функции. А в твоем варианте насчитает просто 5 баров бычьих из 30. И не факт что они будут подряд.
Зачем используется кол-во баров для подсчета=30. Если нужно 5 баров подряд бычьих то и используй для расчёта 5 баров. Как только они появятся выходим из функции. А в твоем варианте насчитает просто 5 баров бычьих из 30. И не факт что они будут подряд.
alexshell, прочитай по внимательнее условия. Мне нужно не 5 любых баров, а 5 баров с требуемым признаком. Признаки в перспективе будут разные.
На данный момент должны быть 5 баров с признаками:
1. Все бары одного типа. В данном случает бычьи.
2. Длинна каждого бара большей внешней переменной некоторой.
Если я буду просчитывать только 5 баров, не факт, что там будут 5 последовательных именно таких баров...
alexshell, прочитай по внимательнее условия. Мне нужно не 5 любых баров, а 5 баров с требуемым признаком. Признаки в перспективе будут разные.
На данный момент должны быть 5 баров с признаками:
1. Все бары одного типа. В данном случает бычьи.
2. Длинна каждого бара большей внешней переменной некоторой.
Если я буду просчитывать только 5 баров, не факт, что там будут 5 последовательных именно таких баров...
Да вроде внимательно прочитал. Ключевое слово подряд.Бары же появляются по очереди.Как только появиться заданное кол-во барав с задаными признаками, условие выполниться.А в твоем варианте допустим появилось 3 бара бычьих, затем два медвежьих, потом опять 2 бычьих .У тебя сработало условие выхода из ф-ии.Но ведь они не подряд.
Да вроде внимательно прочитал. Ключевое слово подряд.Бары же появляются по очереди.Как только появиться заданное кол-во барав с задаными признаками, условие выполниться.А в твоем варианте допустим появилось 3 бара бычьих, затем два медвежьих, потом опять 2 бычьих .У тебя сработало условие выхода из ф-ии.Но ведь они не подряд.
А мне разницы нет. Если 2 бара допустим размеров по 10пп., потом бар размером 1пп., другой 0.3пп., потом 4 бара по 0.1. - 0.5пп., а дальше 4 больше 10пп. То Значится будет 6 баров просчитано вподряд идущих с заданным размеров и заданный типом. Вся шелуха, отсеится данным фильтром.
А мне разницы нет. Если 2 бара допустим размеров по 10пп., потом бар размером 1пп., другой 0.3пп., потом 4 бара по 0.1. - 0.5пп., а дальше 4 больше 10пп. То Значится будет 6 баров просчитано вподряд идущих с заданным размеров и заданный типом. Вся шелуха, отсеится данным фильтром.
int LastCandlesType()
{
bool up, // Свеча направлена вверх
dn; // Свеча направлена вниз
int cnt, // Счётчик идущих друг за другом бычьих свечей
i_AnyBarsToHistory = 30; // Количество используемых баров из истории для рассчёта сигнала
double i_sizeOfCurrBar = 10; // Размер текущего бара
for (int i=Bars-1; i>=Bars-AnyBarsToHistory; i--)
{
if ((Close[i] - Open[i]) <= i_sizeOfCurrBar * Point) // Пропускаем все бары, размера меньше заданного внешним параметром
continue;
if (Close[i] > Open[i]) // Если условие соблюдается, значит текущий бар направлен вверх
up = true;
if (up) // Если бар направлен вверх, значит к счётчик увеличивается
cnt++;
}
if (cnt == 5) // Если 5 баров вподряд бычьи..
return (BULL_CANDLES); //..Выходим из функции
}
Принт:
PHP:
2013.04.24 14:22:43 2012.04.20 00:05 Scalper_M1 EURUSD,M1: i = 990; up = 2; cnt = 2
2013.04.24 14:22:43 2012.04.20 00:05 Scalper_M1 EURUSD,M1: i = 1005; up = 1; cnt = 1
2013.04.24 14:22:42 2012.04.20 00:04 Scalper_M1 EURUSD,M1: i = 989; up = 2; cnt = 2
2013.04.24 14:22:42 2012.04.20 00:04 Scalper_M1 EURUSD,M1: i = 1004; up = 1; cnt = 1
2013.04.24 14:22:40 2012.04.20 00:03 Scalper_M1 EURUSD,M1: i = 988; up = 2; cnt = 2
2013.04.24 14:22:40 2012.04.20 00:03 Scalper_M1 EURUSD,M1: i = 1003; up = 1; cnt = 1
2013.04.24 14:22:31 2012.04.20 00:02 Scalper_M1 EURUSD,M1: i = 987; up = 2; cnt = 2
2013.04.24 14:22:31 2012.04.20 00:02 Scalper_M1 EURUSD,M1: i = 1002; up = 1; cnt = 1
2013.04.24 14:22:23 2012.04.20 00:01 Scalper_M1 EURUSD,M1: i = 986; up = 2; cnt = 2
2013.04.24 14:22:23 2012.04.20 00:01 Scalper_M1 EURUSD,M1: i = 1001; up = 1; cnt = 1
2013.04.24 14:22:04 2012.04.20 00:00 Scalper_M1 EURUSD,M1: i = 985; up = 2; cnt = 2
2013.04.24 14:22:04 2012.04.20 00:00 Scalper_M1 EURUSD,M1: i = 1000; up = 1; cnt = 1
Получается какая-то чушь. up - булева переменная. Значит она принимает значения только 0 (т.е. false) или 1 (true).
В принте у неё значение 1 и 2... Что тут вообще за хрень?
Получается какая-то чушь. up - булева переменная. Значит она принимает значения только 0 (т.е. false) или 1 (true).
В принте у неё значение 1 и 2... Что тут вообще за хрень?
int LastCandlesType()
{
bool up, // Свеча направлена вверх
dn; // Свеча направлена вниз
int cnt, // Счётчик идущих друг за другом бычьих свечей i_AnyBarsToHistory = 30; // Количество используемых баров из истории для рассчёта сигнала
double i_sizeOfCurrBar = 10; // Размер текущего бара
for (int i=Bars-1; i>=Bars-AnyBarsToHistory; i--)
{
if ((Close - Open) <= i_sizeOfCurrBar * Point) // Пропускаем все бары, размера меньше заданного внешним параметром
continue;
if (Close > Open) // Если условие соблюдается, значит текущий бар направлен вверх
up = true;
if (up) // Если бар направлен вверх, значит к счётчик увеличивается
cnt++;
}
if (cnt == 5) // Если 5 баров вподряд бычьи..
return (BULL_CANDLES); //..Выходим из функции
}
Получается какая-то чушь. up - булева переменная. Значит она принимает значения только 0 (т.е. false) или 1 (true).
В принте у неё значение 1 и 2... Что тут вообще за хрень?
1: выделил красным.
2: У тебя цикл в расчёте идет по всем свечам истории кроме последних 30.
Если нужны последние30 то я б сделал так:
PHP:
for (int i=1; i<=i_AnyBarsToHistory; i++)
3:булевая переменная в цикле не обнуляется т.есть появился бар с нужными параметрами стала труе и всё. И дальше по идее все бары будут считаться как удовлетворяющие условию.И зачем вообще использовать булевую переменную.
Вот сов который считает бары по твоему условию
PHP:
int start ()
{ // Свеча направлена вниз
int cnt;int i_AnyBarsToHistory = 30; // Счётчик идущих друг за другом бычьих свечей
// Количество используемых баров из истории для рассчёта сигнала
double i_sizeOfCurrBar = 1; // Размер текущего бара
for (int i=1; i<=i_AnyBarsToHistory; i++)
{
if (Close[i] - Open[i]>= i_sizeOfCurrBar * Point)
{
if (Close[i] > Open[i])
cnt++;
}
}
Comment("снт=",cnt) ;
return (0); //..Выходим из функции
}
Повесил на график,считает.Но опять же он считает просто кол-во баров с заданными параметрами. Про подряд здесь условий нет.
4: про принт я вообще хрен знает что у тебя пишет Так как не вижу откуда принтуется и что там прописано.
//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами |
//+-------------------------------------------------------------------------------------+
int LastCandlesType()
{
bool up, // Свеча направлена вверх
dn; // Свеча направлена вниз
int cnt; // Счётчик идущих друг за другом бычьих свечей
for (int i=Bars-1; i>=Bars-i_AnyBarsToHistory; i--)
{
if ((Close[i] - Open[i]) <= i_sizeOfCurrBar * Point) // Пропускаем все бары, размера меньше заданного внешним параметром
continue;
if (Close[i] > Open[i]) // Если условие соблюдается, значит текущий бар направлен вверх
cnt++;
Print("i = ", i, "; up = ", cnt, "; cnt = ", cnt);
}
// Print("cnt = ", cnt);
if (cnt == 5) // Если 5 баров вподряд бычьи..
return (REQUIRED_SEQUENTIAL_BEAR_CANDLE); //..Выходим из функции
}
int LastCandlesType()
{
bool up, // Свеча направлена вверх
dn; // Свеча направлена вниз
int cnt; // Счётчик идущих друг за другом бычьих свечей
for (int i=Bars-1; i>=Bars-i_AnyBarsToHistory; i--)
{
if ((Close[i] - Open[i]) <= i_sizeOfCurrBar * Point) // Пропускаем все бары, размера меньше заданного внешним параметром
continue;
if (Close[i] > Open[i]) // Если условие соблюдается, значит текущий бар направлен вверх
cnt++;
Print("i = ", i, "; up = ", up, "; cnt = ", cnt);
}
// Print("cnt = ", cnt);
if (cnt == 5) // Если 5 баров вподряд бычьи..
return (REQUIRED_SEQUENTIAL_BEAR_CANDLE); //..Выходим из функции
}
Но почему-то всё-равно не так как требуется функция работает.
PHP:
2013.04.24 16:29:45 2012.04.20 00:03 Scalper_M1 EURUSD,M1: i = 988; up = 0; cnt = 2
2013.04.24 16:29:45 2012.04.20 00:03 Scalper_M1 EURUSD,M1: i = 1003; up = 0; cnt = 1
2013.04.24 16:29:41 2012.04.20 00:02 Scalper_M1 EURUSD,M1: i = 987; up = 0; cnt = 2
2013.04.24 16:29:41 2012.04.20 00:02 Scalper_M1 EURUSD,M1: i = 1002; up = 0; cnt = 1
2013.04.24 16:29:38 2012.04.20 00:01 Scalper_M1 EURUSD,M1: i = 986; up = 0; cnt = 2
2013.04.24 16:29:38 2012.04.20 00:01 Scalper_M1 EURUSD,M1: i = 1001; up = 0; cnt = 1
2013.04.24 16:29:29 2012.04.20 00:00 Scalper_M1 EURUSD,M1: i = 985; up = 0; cnt = 2
2013.04.24 16:29:29 2012.04.20 00:00 Scalper_M1 EURUSD,M1: i = 1000; up = 0; cnt = 1
Но переменная cnt почему-то постоянно 1 и 2. Даже когда свечи вообще медвежьи, и условие:
int LastCandlesType()
{
bool up, // Свеча направлена вверх
dn; // Свеча направлена вниз
int cnt; // Счётчик идущих друг за другом бычьих свечей
for (int i=Bars-1; i>=Bars-i_AnyBarsToHistory; i--)
{
if ((Close[i] - Open[i]) <= i_sizeOfCurrBar * Point) // Пропускаем все бары, размера меньше заданного внешним параметром
continue;
if (Close[i] > Open[i]) // Если условие соблюдается, значит текущий бар направлен вверх
cnt++;
Print("i = ", i, "; up = ", up, "; cnt = ", cnt);
}
// Print("cnt = ", cnt);
if (cnt == 5) // Если 5 баров вподряд бычьи..
return (REQUIRED_SEQUENTIAL_BEAR_CANDLE); //..Выходим из функции
}
Но почему-то всё-равно не так как требуется функция работает.
PHP:
2013.04.24 16:29:45 2012.04.20 00:03 Scalper_M1 EURUSD,M1: i = 988; up = 0; cnt = 2
2013.04.24 16:29:45 2012.04.20 00:03 Scalper_M1 EURUSD,M1: i = 1003; up = 0; cnt = 1
2013.04.24 16:29:41 2012.04.20 00:02 Scalper_M1 EURUSD,M1: i = 987; up = 0; cnt = 2
2013.04.24 16:29:41 2012.04.20 00:02 Scalper_M1 EURUSD,M1: i = 1002; up = 0; cnt = 1
2013.04.24 16:29:38 2012.04.20 00:01 Scalper_M1 EURUSD,M1: i = 986; up = 0; cnt = 2
2013.04.24 16:29:38 2012.04.20 00:01 Scalper_M1 EURUSD,M1: i = 1001; up = 0; cnt = 1
2013.04.24 16:29:29 2012.04.20 00:00 Scalper_M1 EURUSD,M1: i = 985; up = 0; cnt = 2
2013.04.24 16:29:29 2012.04.20 00:00 Scalper_M1 EURUSD,M1: i = 1000; up = 0; cnt = 1
Но переменная cnt почему-то постоянно 1 и 2. Даже когда свечи вообще медвежьи, и условие:
А мне интересно что такое "Bars" и "REQUIRED_SEQUENTIAL_BEAR_CANDLE)"
От какого значения ты начинаешь проверять высоту баров и что выводишь из функции?
Если до этой проверки дело дошло, то она всегда даст true, поскольку предыдущее условие с continue более жесткое.
Я готов поверить, что на рассматриваемом отрезке в 1000-Х минутных баров действительно только две бычьих свечки больше порога.
Если до этой проверки дело дошло, то она всегда даст true, поскольку предыдущее условие с continue более жесткое.
Я готов поверить, что на рассматриваемом отрезке в 1000-Х минутных баров действительно только две бычьих свечки больше порога.
Там не 1000 минутные свечек, а всего 29! Значение i_AnyBarsToHistory= 30
Так жёсткое или не жёсткое, но условие есть условие. Как можно проверяя цену закрытия и открытия бара, получить значение, что цена закрытия ниже, в то время, когда оно выше на самом деле?
Зачем ты мене даёшь ссылку на документацию? Это у тебя индикатор?
Ну ты сам рассуди. Если ты считаешь от количества баров на графике, а смотришь, наверняка, на последние... Какое совпадение ты можешь увидеть...
Дословный перевод с аглицкого твоей переменной тоже ни о чём не говорит. Это всего-лишь набор символов, а что в ней должно быть это только тебе известно. Но я не вижу чтобы этой переменной присваивалось какое-либо значение перед выводом её из функции.
А что касается ошибки, так я цитировал твой ответ об ошибке в принте. Вот эта ошибка и не имеет никакого критического значения.
Так-что получается ты на мои вопросы не ответил.
Если сможешь ответить, может и поймёшь свою ошибку.
Там не 1000 минутные свечек, а всего 29! Значение i_AnyBarsToHistory= 30
Так жёсткое или не жёсткое, но условие есть условие. Как можно проверяя цену закрытия и открытия бара, получить значение, что цена закрытия ниже, в то время, когда оно выше на самом деле?
Приблизительно понятно
Вы желаете анализировать 30 последних баров, но вместо этого берете 30 самых дальних в истории. Нужно
for (int i=i_AnyBarsToHistory; i>=0; i--)
Кроме того, первое условие в цикле отсеивает все медвежьи свечки и все бычьи свечки недостаточного размера. Второе условие просто не нужно.