[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 272
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
И где эта переменная задана явно, если не секрет? :) Я в библиотеке b-PSI@Base.mqh вижу что она только лишь объявлена:
Но дальше ничего нет по сути. Да и вообще, значение текущего инструмента вообще по дефолту возвращается через Symbol(). Тогда зачем тут переменная?
Я Вам уже ответил на этот вопрос, там где про мультивалютность - текущий символ = Symbol() - это только частный случай.
P.S. У Вас интересный подход: берёте чужой код и пытаетесь его "подогнать" под свою логику - имеете полное право, только не спрашивайте меня: "Почему Ваша логика отличается от моей?"!
Я Вам уже ответил на этот вопрос, там где про мультивалютность - текущий символ = Symbol() - это только частный случай.
P.S. У Вас интересный подход: берёте чужой код и пытаетесь его "подогнать" под свою логику - имеете полное право, только не спрашивайте меня: "Почему Ваша логика отличается от моей?"!
Да я подгонять не собираюсь. Просто хочу изучить как у Вас реализовано. Но копировать ничего не буду... Мне интересно, увидеть как думает профи. Вот истинная причина. Так вот.
Смотрю я в функцию void fGet_MarketInfo (string fs_Symbol, int fi_Ticket = 0):
Данная переменная внутри этой функции не объявлена. В других 2 базовых файлах (включении и функции) тоже не объявлена. Где её искать не понятно. Вот я это и спрашиваю. Хочу понять, где она изначально вообще появилась, т.е. объявлена. Если не сложно подскажите...
Так же ещё одна непонятка с другой переменной. В функции bool fCheck_LevelsBLOC есть такие строки:
bda_Price[li_cmd] впервые упоминается в библиотеке b-PSI@Base.mqh:
bda_Price[2];Элементы массива не заданы. Значит равны нулям каждый. Получает что выражение какой бы не был параметр массива li_cmd примет значение 0?
привет всем. прошу всех откликнуться кто сможет создать скрипт который увеличивает лоты при открытии сделки. подробности пишите в личку. вознаграждение гарантирую при удовлетворении задания
Вы открываете тут тендер на удовлетворение задания??? Обычно не задания удовлетворяют ...
Начните сами писать свой код, что не понятно - спрашивайте, поможем, а задание удовлетворять - нет охоты...
Или в джобу сходите - там удовлетворят и вас и задание ... за денюшку
Есть ли возможность узнать программно из советника цены(Аск и Бид) в истории по времени? Например Аск 10 мин назад или 10 сек назад. Известны функции получения тайм серии баров с ценами открытия закрытия и Хаи Лоу в определенный промежуток времени, но в конкретно заданной точке времени как узнать Аск и Бид.
Аск никак, только Бид! Кстати, это хотели бы все, и я в том числе!
Аск никак, только Бид! Кстати, это хотели бы все, и я в том числе!
Поясните, как узнать Бид 10 секунд назад желательно кодом.
Тут ранее спрашивал про массивы. Видно все равно не понел чего то. При прогоне на тестере есть деление на ноль. Значит в каком то массиве есть ноль. Ни как немогу понять где ошибка. Код в риложении. Коменты на русском в WORDe. Извеняюсь, что так. У меня Метаедитор неподдерживает русского языка.
Помогите найти ошибку(и). И если не трудно обьясните их.
Неполучилось сразу и два файла поместить. Вордовский документ неразрешается всавлять. Как иначе проконтировать на русском незнаю , только полностью код скопировать с ворда и поместить сюда //быстры MA extern int MA_Period1 = 8; extern int plius1 = 100; extern int MA_Shift1 = 0; extern int MA_Method1 = 0; //медленый MA extern int MA_Period2 = 13; extern int plius2 = 100; extern int MA_Shift2 = 0; extern int MA_Method2 = 3; //начало флета //поиск флета по сигналу или время extern bool start = true; // true ->по сигналу, false->по времени // по сигналу начинаем с данного времени extern int startHourFlatMA = 16; extern int startMinFlatMA = 00; //сигнал есть, ждем пока закроется BarEnd бар extern int BarEnd = 240; datetime LastTime; //datetime startTime; // по времени начьнем искать флет с extern int startHourFlat = 0; extern int startMinFlat = 0; //конец флета в промежутке времени или по истечению времени //начало промежутка extern int startHourEnd = 4; extern int startMinEnd = 45; //конец промежутка, и истечение времени по времени extern int endHourEnd = 7; extern int endMinEnd = 30; //включение фильтра Volumes extern bool volFiltr = true; //true -> включено, false -> выключено //skirtumas tarp penktadienio uzdarymo ir pirmadienio atidarymo extern int gep = 300; bool susikirtimas = false; //пересечение индикаторных линий bool flat; //массивы double chPriceH[], chPriceL[], chPriceO[], chPriceC[], chTime[]; double avgPriceH[], avgPriceL[], avgPriceO[], avgPriceC[]; int iH, iL ,iO, iC, iT; double C[], T[], y[]; int i = -1; // индекс массива int j = -1; // индекс массива int n = -1; // индекс массива double max; //максимаьная разница между элементами масивов int init () { ArrayResize(chPriceH, 0); ArrayResize(chPriceL, 0); ArrayResize(chPriceO, 0); ArrayResize(chPriceC, 0); ArrayResize(chTime, 0); ArrayResize(avgPriceH, 0); ArrayResize(avgPriceL, 0); ArrayResize(avgPriceO, 0); ArrayResize(avgPriceC, 0); ArrayResize (C, 0); ArrayResize (T, 0); ArrayResize (y, 0); } int start() { double volMA11, volMA12, volMA21, volMA22; double x[], y[]; Print("***старт***"); if(!TF_F_NewBar())return(0); Print("---1-собираем данные индикаторов---"); volMA11 = iCustom(NULL, 15, "volumeMA", 2, 1); volMA12 = iCustom(NULL, 15, "volumeMA", 2, 2); volMA21 = iCustom(NULL, 15, "volumeMA", 3, 1); volMA22 = iCustom(NULL, 15, "volumeMA", 3, 2); Print("volMA11 = "+volMA11); Print("volMA12 = "+volMA12); Print("volMA21 = "+volMA21); Print("volMA22 = "+volMA22); Print("----1 данные собраны---END"); Print("---2 какой день недели--"); if(DayOfWeek()==1 || DayOfWeek()==2 || DayOfWeek()==3 || DayOfWeek()==4) { Print("DayOfWeek = "+DayOfWeek()); Print("----2---END"); if(Hour() >= startHourFlatMA && Minute() >= startMinFlatMA) Print("---3 проверка времени, разрешается ли искать флет---"); { Print("время начала флета >= "+Hour()+":"+Minute()); Print("----3--end"); Print("---4 есть ли пересечение линий индикатора----"); if(volMA21 - volMA11 > 0 && volMA12 - volMA22 > 0) { //если было пересечение susikirtimas = true; Print("пересечение = "+susikirtimas); Print("---4---END"); Print("---5 жшдем окончания M240 свечи--"); LastTime = iTime(NULL, BarEnd, 1); Print("LastTime = "+LastTime); //startTime = Time[1]; } if(susikirtimas == true && iTime(NULL, BarEnd, 1)!= LastTime) { LastTime = iTime(NULL, BarEnd, 1); flat = true; Print("flat = "+flat); } if(flat == true) { Print(-начало флета есть"); Print("-- 6 собираем данные в массивы--"); //увеличиваем число элементов массива на один i++; Print("увеличиваем длину массива в зависимости от i "); ArrayResize(avgPriceH,i); ArrayResize(avgPriceL,i); ArrayResize(avgPriceO,i); ArrayResize(avgPriceC,i); Print("с каждой новой свечой должны получить новые элементы массивов"); avgPriceH[i] = High[1]; Print("AVG элемент avgPriceH["+i+"] = "+avgPriceH[i]); avgPriceL[i] = Low[1]; Print("AVG элемент avgPriceL["+i+"] = "+avgPriceL[i]); avgPriceO[i] = Open[1]; Print("AVG элемент avgPriceO["+i+"] = "+avgPriceO[i]); avgPriceC[i] = Close[1]; Print("AVG mэлементasyvo elementas avgPriceC["+i+"] = "+avgPriceC[i]); j++; Print("индех канальных массивов j = "+j); ArrayResize(chPriceC,j); Print("CH masyvo ilgis chPriceC = "+j); ArrayResize(chTime,j); Print("CH masyvo ilgis chTime = "+j); //включен ли фильтр if(volFiltr) { //да Print("да включен"); Print("volMA11 = "+volMA11, " Volume[1] = "+Volume[1]); if(volMA11 - Volume[1] >= 0)//фильтр { Print("записываем Close[1] ir Time[1] в массивы"); chPriceC[j] = Close[1]; Print("masyvo elementas chPriceC["+j+"] = "+j); chTime[j] = Time[1]; Print("masyvo elementas chTimev["+j+"] = "+j); } else { //renkam chPriceC[j] = 0; Print("masyvo elementas chPriceC["+j+"] = "+j); chTime[j] = 0; Print("masyvo elementas chTimev["+j+"] = "+j); } } Print("получилис отфильтрваные массивы с нулями "); else // jei filtras isjungtas, tada duomenys kanalo skaiciavimui { //renkam Print("если фильтр выключен"); Print("pradedam rinkti Close[1] ir Time[1] duomenis i masyvus po filtracijos"); //chPriceH[j] = High[1]; Print("masyvo elementas chPriceH["+j+"] = "+j); //chPriceL[j] = Low[1]; Print("masyvo elementas chPriceL["+j+"] = "+j); chPriceC[j] = Close[1]; Print("masyvo elementas chPriceC["+j+"] = "+j); //chPriceO[j] = Open[1]; Print("masyvo elementas chPriceO["+j+"] = "+j); chTime[j] = Time[1]; Print("masyvo elementas chTimev["+j+"] = "+j); } //suzinom kokio ilgio masyvai Print("после того как массивы собраны узнаем их длину"); Print("ArrayRange(chPriceC, 0) = "+iC); Print("фильтруем их от нулей, после фильтрции длина массивов меньше чем была до фильтрции"); for(int k = 0; k <= iC; k++) { if(chPriceC[k] > 0) { n++; ArrayResize(C,n); ArrayResize(T,n); C[n] = chPriceC[k]; T[n] = chTime[k]; Print("naujo masyvo elementas C["+n+"] = "+C[n]); Print("naujo masyvo elementas irasytas T["+n+"] = ",T[n]); Print("naujo atfiltruoto masyvo ilgis n = ",n); } } } } } Print("так масивы набирается свеча за свечой пока несработает 7 – ая часть кода"); Print("----------- 6 массивы набирается------------------------end"); Print("----------- 7 массивы набраны------------------------end"); //if(DayOfWeek()==0 || DayOfWeek()==6) return(0); if(((Hour() > startHourEnd && Minute() > startMinEnd) && //jei jau laikas po 6.30 Print("если начялось время начала поиска конца флета"); (volMA11 - volMA21 > 0 && volMA22 - volMA12 > 0)) || //пересечение индикаторных линий (Hour() > endHourEnd && Minute() > endMinEnd)) { // или кончилось время флета susikirtimas = false; //сбрасываем флаг начала пересичения инд. линий на вход во флет flat = false; //сбрасываем флаг начала флета i = -1; //Возвращаем начальные индексы массивов j = -1; //ищем линию регрении ArrayChLR(C, y, max);//ArrayLR(x, y) //ищем точки для фибо уровней double y161Plus_1 = y[1] + max/50 * 161; double y261Plus_1 = y[1] + max/50 * 261; double y361Plus_1 = y[1] + max/50 * 361; double y423Plus_1 = y[1] + max/50 * 423; double y161Minus_1 = y[1] - max/50 * 161; double y261Minus_1 = y[1] - max/50 * 261; double y361Minus_1 = y[1] - max/50 * 361; double y423Minus_1 = y[1] - max/50 * 423; double y161Plus_2 = y[n-1] + max/50 * 161; double y261Plus_2 = y[n-1] + max/50 * 261; double y361Plus_2 = y[n-1] + max/50 * 361; double y423Plus_2 = y[n-1] + max/50 * 423; double y161Minus_2 = y[n-1] - max/50 * 161; double y261Minus_2 = y[n-1] - max/50 * 261; double y361Minus_2 = y[n-1] - max/50 * 361; double y423Minus_2 = y[n-1] - max/50 * 423; //turim po dvi kainos koordinate, o laiko galim paimti is masyvo T[] //galim brezti linijas //y=(y2-y1)/(x2-x1)*(x-x1)+y1 double y161Plus_3 = (y161Plus_2-y161Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y161Plus_1; double y261Plus_3 = (y261Plus_2-y261Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y261Plus_1; double y361Plus_3 = (y361Plus_2-y361Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y361Plus_1; double y423Plus_3 = (y423Plus_2-y423Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y423Plus_1; double y161Minus_3 = (y161Plus_2-y161Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y161Plus_1; double y261Minus_3 = (y261Plus_2-y261Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y261Plus_1; double y361Minus_3 = (y361Plus_2-y361Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y361Plus_1; double y423Minus_3 = (y423Plus_2-y423Plus_1)/(T[n]-T[1])*(StrToTime("20:00")-T[1])+y423Plus_1; //чертим линии SetTLine(Thistle, "", T[1], y161Plus_1, StrToTime("20:00"), y161Plus_3, 0, 1); SetTLine(Thistle, "", T[1], y261Plus_1, StrToTime("20:00"), y261Plus_3, 0, 1); SetTLine(Thistle, "", T[1], y361Plus_1, StrToTime("20:00"), y361Plus_3, 0, 1); SetTLine(Thistle, "", T[1], y423Plus_1, StrToTime("20:00"), y423Plus_3, 0, 1); SetTLine(Thistle, "", T[1], y161Minus_1, StrToTime("20:00"), y161Minus_3, 0, 1); SetTLine(Thistle, "", T[1], y261Minus_1, StrToTime("20:00"), y261Minus_3, 0, 1); SetTLine(Thistle, "", T[1], y361Minus_1, StrToTime("20:00"), y361Minus_3, 0, 1); SetTLine(Thistle, "", T[1], y423Minus_1, StrToTime("20:00"), y423Minus_3, 0, 1); } return(0); } //----------------------------------------------------------------------------------------------------- void ArrayChLR(double& x[], double& y[], double& max) { double a, b, c, sx=0, sx2=0, sxy=0, sy=0; int i, n=ArraySize(x); if (n>1) { for (i=0; i<n; i++) { sx+=i+1; sy+=x[i]; sxy+=(i+1)*x[i]; sx2+=(i+1)*(i+1); } a=sx*sy-n*sxy; c=sx*sx-n*sx2; if (c!=0) a=a/c; else a=0; b=(sy-a*sx)/n; ArrayResize(y, n); max = 0; double dif[]; ArrayResize(dif, n); for (i=0; i<n; i++) { y[i]=a*(i+1)+b; dif[i] = MathAbs(Close[i] - y[i]); if(dif[i] > max) max = dif[i]; } } else Print("ArrayLR(): per mazas x masyvo elementu skaicius! n=", n); }Есть ли возможность узнать программно из советника цены(Аск и Бид) в истории по времени? Например Аск 10 мин назад или 10 сек назад. Известны функции получения тайм серии баров с ценами открытия закрытия и Хаи Лоу в определенный промежуток времени, но в конкретно заданной точке времени как узнать Аск и Бид.
Есть в папке /history/имясервера/ файлик ticks.raw, оттуда теоретически можно достать и Bid, и Ask по символам из Market Watch за небольшое время до текущего момента. Копайте в эту сторону поиском по форуму... На память ничего конкретного по поводу механизма хранения данных в этом файле сказать не могу.
Тут ранее спрашивал про массивы. Видно все равно не понел чего то. При прогоне на тестере есть деление на ноль. Значит в каком то массиве есть ноль. Ни как немогу понять где ошибка. Код в риложении. Коменты на русском в WORDe. Извеняюсь, что так. У меня Метаедитор неподдерживает русского языка.
Помогите найти ошибку(и). И если не трудно обьясните их.
Рекомендую перед каждым делением вписать в код Print(на что делим); - сразу узнаете, где ноль
Рекомендую перед каждым делением вписать в код Print(на что делим); - сразу узнаете, где ноль
Там одно деление. И по функции КИМа (правдо даполненой) пишет, что в получаемом массиве в функцию мало данных. Почему не как не могу понять. Из за этого и получается деление на ноль.