[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 103

 
Reshetov:

Нет, она никому ничего не должна. Есть разница между демо-реалом и тестером. Например, тестер никогда не выдаст ошибку при открытии ордеров, если все параметры OrderSend() корректны. А торговый сервер запросто может выдать.

Поэтому программы после тестера необходимо допиливать и потом гонять на демо, чтобы они могли адекватно обрабатывать исключительные ситуации, которых в тестере не бывает.

Спасибо!!!
Это очень полезная информация для меня))
 
Reshetov:
Используйте время баров Time[x].


Здесь это не пройдет, т.к. в следующей же строке на этом же баре данная первая образованная фигура будет инициирована и как вторая тоже... А мне их необходимо разграничить... отделить

для последующего сравнения минимумов - если в лонг и максимумов - если в шорт...

......
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);
.....

 
robot:

Если не трудно напишите какой нибудь шаблончик, а то у меня пока ум за разум заходит)

Спасибо за внимание
Я вам советую ознакомиться с примерами кодирования торговых операций, например, вот здесь
 
Roman.:


Здесь это не пройдет, т.к. в следующей же строке на этом же баре данная первая образованная фигура будет инициирована и как вторая тоже... А мне их необходимо разграничить... отделить

для последующего сравнения минимумов - если в лонг и максимумов - если в шорт...

Не так. Если сигнальный столбец АО у вас первый, то от него и ищите остальные вглубь истории. При открытии позиции запоминайте время бара открытия и на нём больше не открывайте. Как только образуется следующий столбец АО, заново начинайте поиск фигуры.
 
artmedia70:
Не так. Если сигнальный столбец АО у вас первый, то от него и ищите остальные вглубь истории. При открытии позиции запоминайте время бара открытия и на нём больше не открывайте. Как только образуется следующий столбец АО, заново начинайте поиск фигуры.


А можно подробнее - мне не нужно искать вглубь истории...

Мне достаточно в "настоящем" если пришел пик - то определить, что это фиг 1, если потом через несколько баров как на рис пришел еще пик, то уже их сравнить и принять решение...

Вопрос в другом, что пики что первой что второй фигуры - принципы нахождения в настоящем - одинаковы и я не могу (даже с использованием флагов отделить одну фигуру от другой)... Туплю я что-что...

П.С. Пики не обязательно следуют один за другим такие могут и через несколько равных баров и т.д., могут еще как-то - главное, что принцип построения у них один.

Мне главное отделить один от другого для последующего их сравнения.

 
Reshetov:
Используйте время баров Time[x].

А вообще существует возможность прервать работу советника в определенном месте в коде до образования следующего бара после выполнения каких либо команд.
 
Roman.:

А вообще существует возможность прервать работу советника в определенном месте в коде до образования следующего бара после выполнения каких либо команд.
Да, существует. Запоминаете текущее значение Time[0] в статической переменной и с каждым новым тиком сравниваете. Если не изменилось, то выходим по return(0). Если изменилось, значит имеем дело с новым баром. Запоминаем время нового бара, т.е. Time[0] и начинаем проводить свои вычисления.
 

eddy:

for(k=0; k<KPeriod; k++)           // перебрать KPeriod баров
if(Low[k]<minimum) minimum=Low[k]; // найти минимум

как правильно заменить это функцией iLowest?

minimum=Low[iLowest (NULL, 0, MODE_LOW, KPeriod, 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] - пробую воплотить...
 
Ребята очень нужен скрипт для добавления выходных дней на график в МТ4, где его найти