Нет, она никому ничего не должна. Есть разница между демо-реалом и тестером. Например, тестер никогда не выдаст ошибку при открытии ордеров, если все параметры OrderSend() корректны. А торговый сервер запросто может выдать.
Поэтому программы после тестера необходимо допиливать и потом гонять на демо, чтобы они могли адекватно обрабатывать исключительные ситуации, которых в тестере не бывает.
Спасибо!!! Это очень полезная информация для меня))
Здесь это не пройдет, т.к. в следующей же строке на этом же баре данная первая образованная фигура будет инициирована и как вторая тоже... А мне их необходимо разграничить... отделить
для последующего сравнения минимумов - если в лонг и максимумов - если в шорт...
......
if (AO3 < 0 && AO3 > AO2 && AO2<0 && AO2 < AO1 && AO1 < 0 && fl1==false && fl2==false) {a1 = AO2; fl1=true;Time_Figure1=TimeCurrent(); Print ("образование первого пика",DoubleToStr(a1, 6),"Время: ",Time_Figure1);}// определение наличия 1-го пика, флаг установлен
Print ("Образование первого пика",DoubleToStr(a1, 6),"Время1: ",Time_Figure1);
sleep (2000);
if (AO3<0 && AO3>AO2 && AO2<0 && AO2<AO1 && AO1<0 && fl1==true && fl2==false && TimeCurrent() > Time_Figure1) // определение наличия 2-го пика, флаги установлены
{
a11 = AO2; fl1=true; fl2=true; Print ("Образование второго пика", DoubleToStr (a11,6), "Время2: ",Time_Figure2);
.....
Здесь это не пройдет, т.к. в следующей же строке на этом же баре данная первая образованная фигура будет инициирована и как вторая тоже... А мне их необходимо разграничить... отделить
для последующего сравнения минимумов - если в лонг и максимумов - если в шорт...
Не так. Если сигнальный столбец АО у вас первый, то от него и ищите остальные вглубь истории. При открытии позиции запоминайте время бара открытия и на нём больше не открывайте. Как только образуется следующий столбец АО, заново начинайте поиск фигуры.
artmedia70: Не так. Если сигнальный столбец АО у вас первый, то от него и ищите остальные вглубь истории. При открытии позиции запоминайте время бара открытия и на нём больше не открывайте. Как только образуется следующий столбец АО, заново начинайте поиск фигуры.
А можно подробнее - мне не нужно искать вглубь истории...
Мне достаточно в "настоящем" если пришел пик - то определить, что это фиг 1, если потом через несколько баров как на рис пришел еще пик, то уже их сравнить и принять решение...
Вопрос в другом, что пики что первой что второй фигуры - принципы нахождения в настоящем - одинаковы и я не могу (даже с использованием флагов отделить одну фигуру от другой)... Туплю я что-что...
П.С. Пики не обязательно следуют один за другим такие могут и через несколько равных баров и т.д., могут еще как-то - главное, что принцип построения у них один.
Мне главное отделить один от другого для последующего их сравнения.
А вообще существует возможность прервать работу советника в определенном месте в коде до образования следующего бара после выполнения каких либо команд.
А вообще существует возможность прервать работу советника в определенном месте в коде до образования следующего бара после выполнения каких либо команд.
Да, существует. Запоминаете текущее значение Time[0] в статической переменной и с каждым новым тиком сравниваете. Если не изменилось, то выходим по return(0). Если изменилось, значит имеем дело с новым баром. Запоминаем время нового бара, т.е. Time[0] и начинаем проводить свои вычисления.
Reshetov: Да, существует. Запоминаете текущее значение Time[0] в статической переменной и с каждым новым тиком сравниваете. Если не изменилось, то выходим по return(0). Если изменилось, значит имеем дело с новым баром. Запоминаем время нового бара, т.е. Time[0] и начинаем проводить свои вычисления.
Я это-то уже давно знаю... :-)) Еще из учебника... Благодарю...
Сейчас сравниваю, думаю, на верном пути, но пока не так как надо работает...
double AO1 = iAO(Symbol(), signal_period, 1);
double AO2 = iAO(Symbol(), signal_period, 2);
double AO3 = iAO(Symbol(), signal_period, 3);
// Расчет переменных для доливки 2-а пикаif (AO3 < 0 && AO3 > AO2 && AO2<0 && AO2 < AO1 && AO1 < 0 && fl1==false && fl2==false) {a1 = AO2; fl1=true;Time_Figure1=Time[0]; Print ("Oбразование первого пика",DoubleToStr(a1, 6),"Время: ",Time_Figure1);}// определение наличия 1-го пика, флаг установленPrint ("Образование первого пика",DoubleToStr(a1, 6),"Время1: ",Time_Figure1);
if (Time_Figure1<Time[0] && Time_Figure1!=0) // условие наличия первого пика...
{
if (AO3<0 && AO3>AO2 && AO2<0 && AO2<AO1 && AO1<0 && fl1==true && fl2==false ) // определение наличия 2-го пика, флаги установлены
{
a11 = AO2; fl1=true; fl2=true; Time_Figure2=Time[0]; Print ("Образование второго пика", DoubleToStr (a11,6), "Время2: ",Time_Figure2);
if (a1<a11 && High [0] > High [1])
{ signal_buy = true; a1=a11; fl1=true;fl2=false; Time_Figure1=Time[0];} // активируем бай и устанавливаем сигнал на бай и записываем параметры как первого пика else { a1=a11; fl1=true;fl2=false;Time_Figure1=Time[0];} // просто запоминаем новый минимум - "первый" сигнал
}
}
if (AO2>0 || High [0] < High [1]) {fl1=false; fl2=false; Time_Figure1=0;}// если какой - либо столбец гистограммы пересекает 0-ю линию между сигналами 2-а пика// то сигнал считается недействительным. Cбрасываем флаги 1-го и 2-го пика вниз,if (Mas_Tip[0]!=0 && signal_buy == true ) return(10); // при доливке и сигнале к покупке открываемся с рынка
signal_buy = false; // сбрасываем сигнал к покупке
Вы правильно мне подсказали использование Time[x] - пробую воплотить...
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Нет, она никому ничего не должна. Есть разница между демо-реалом и тестером. Например, тестер никогда не выдаст ошибку при открытии ордеров, если все параметры OrderSend() корректны. А торговый сервер запросто может выдать.
Поэтому программы после тестера необходимо допиливать и потом гонять на демо, чтобы они могли адекватно обрабатывать исключительные ситуации, которых в тестере не бывает.
Это очень полезная информация для меня))
Используйте время баров Time[x].
Здесь это не пройдет, т.к. в следующей же строке на этом же баре данная первая образованная фигура будет инициирована и как вторая тоже... А мне их необходимо разграничить... отделить
для последующего сравнения минимумов - если в лонг и максимумов - если в шорт...
Если не трудно напишите какой нибудь шаблончик, а то у меня пока ум за разум заходит)
Спасибо за внимание
Здесь это не пройдет, т.к. в следующей же строке на этом же баре данная первая образованная фигура будет инициирована и как вторая тоже... А мне их необходимо разграничить... отделить
для последующего сравнения минимумов - если в лонг и максимумов - если в шорт...
Не так. Если сигнальный столбец АО у вас первый, то от него и ищите остальные вглубь истории. При открытии позиции запоминайте время бара открытия и на нём больше не открывайте. Как только образуется следующий столбец АО, заново начинайте поиск фигуры.
А можно подробнее - мне не нужно искать вглубь истории...
Мне достаточно в "настоящем" если пришел пик - то определить, что это фиг 1, если потом через несколько баров как на рис пришел еще пик, то уже их сравнить и принять решение...
Вопрос в другом, что пики что первой что второй фигуры - принципы нахождения в настоящем - одинаковы и я не могу (даже с использованием флагов отделить одну фигуру от другой)... Туплю я что-что...
П.С. Пики не обязательно следуют один за другим такие могут и через несколько равных баров и т.д., могут еще как-то - главное, что принцип построения у них один.
Мне главное отделить один от другого для последующего их сравнения.
Используйте время баров Time[x].
А вообще существует возможность прервать работу советника в определенном месте в коде до образования следующего бара после выполнения каких либо команд.
А вообще существует возможность прервать работу советника в определенном месте в коде до образования следующего бара после выполнения каких либо команд.
eddy:
как правильно заменить это функцией iLowest?
minimum=Low[iLowest (NULL, 0, MODE_LOW, KPeriod, 0)] - так?
Да, существует. Запоминаете текущее значение Time[0] в статической переменной и с каждым новым тиком сравниваете. Если не изменилось, то выходим по return(0). Если изменилось, значит имеем дело с новым баром. Запоминаем время нового бара, т.е. Time[0] и начинаем проводить свои вычисления.
Я это-то уже давно знаю... :-)) Еще из учебника... Благодарю...
Сейчас сравниваю, думаю, на верном пути, но пока не так как надо работает...
Вы правильно мне подсказали использование Time[x] - пробую воплотить...