Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 подсчет крестов и нулей Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
max



Зарегистрирован: 01.08.2008
Сообщения: 253

СообщениеДобавлено: Ср Фев 17, 2010 7:41 pm Ответить с цитатой Вернуться к началу

Много много лет назад на пауке 007 опубликовал свой код крестов "растянутых" по времени. Ниже я его тут приведу
Я пытаюсь сообразить как дать ами следующую команду:
- если на предыдущем баре количество верхних (в столбце) крестов и\или нулей>10, то мы делаем Событие №1
- если на предыдущем баре количество нижних (в столбце) крестов и\или нулей>10, то мы делаем Событие №2

Т.е. одному "обычному" бару соответствует один столбик в крестах или нулях. Они все идут друг за другом. При этом в данном случае или верхняя граница или нижняя граница столбцов имеет одинаковую цену - вот я хочу посчитать количество таких столбиков

На картинке (правда там не 10 баров) я привел пример такого случая - 6 столбиков имеют одинаковую нижнюю границу


Код:
GraphXSpace = 5;
SetBarsRequired(100000,100000);

//Размеры бокса для каждоко символа могут быть заданы здесь.

// ==================================
// Htuekbhetvaq размер бокса

Box = LastValue((EMA(High,100)-EMA(Low,100))/2); // размер бокса рассчитывается как половина разницы значений мувингов построенных по хаю и лоу

Revers = Param("Revers", 3, 1, 5);





A = 0.00001;   // Фильтр

// Начальные условия
PFL = Null;
PFH = Null;
PFL[0] = Box * ceil(Low[0]/Box) + Box;
PFH[0] = Box * floor(High[0]/Box);
direction = 0;                              // По умолчанию первый бар вниз


// Цикл строящий P & F
for( i = 1; i < BarCount; i++ )
{
 if(direction[i-1] == 0)                    // если столбик вниз
 {
  if(Low[i] <= PFL[i-1] - Box)              // если Low ниже PFL - бокс то
  {
   PFL[i] = Box * ceil(Low[i]/Box);         // новое PFL
   PFH[i] = PFH[i-1];                       // PFH остается как был
   direction[i] = direction[i-1];
  }
  else
  {
   if(High[i] >= PFL[i-1] + Revers*Box -A)  // если выполнено условие реверса
   {
    direction[i] = 1;                       // Смена направления столбца на вверх
    PFH[i] = Box * floor(High[i]/Box);      // PFH нового столбца
    PFL[i] = PFL[i - 1] + Box;              // PFL нового столбца
   }
   else                                     // Ни вверх ни вниз - остается как было
   {
    PFH[i] = PFH[i-1];
    PFL[i] = PFL[i-1];
   }
  }
 }
 else                                       // столбик не вниз, значит он вверх
 {
  if(High[i] >= PFH[i-1] + Box)             // если можно добавить крестик
  {
   PFH[i] = Box * floor(High[i]/Box);       // новый верх столбца
   PFL[i] = PFL[i-1];                       // PFL остается как был
   direction[i] = direction[i-1];
  }
  else
  {
   if( Low[i] <= PFH[i-1]-Revers * Box + A) // если выполнено условие реверса
   {
    direction[i] = 0;                       // Смена направления бара на вниз
    PFH[i] = PFH[i - 1] - Box;              // верх нового столбца
    PFL[i] = Box * ceil(Low[i]/Box);        // низ нового столбца
   }
   else                                     // Ни вверх ни вниз - остается как было
   {
    PFH[i] = PFH[i-1];
    PFL[i] = PFL[i-1];
    direction[i] = direction[i-1];
   }   
  }
 }
}

Hi = PFH + Box/2;
Lo = PFL - Box/2;

 // Разница между open и close определяет величину коробки
Cl = IIf(direction == 1, Hi, Lo);
Op = IIf(direction == 1, Cl - Box, Cl + Box);

i = IIf(floor(BarIndex()/2)*2 == BarIndex(), 1, 0);

Plot(C, "", 1, 64);
//EnableTextOutput(False);
PlotOHLC(Op, Hi, Lo, Cl,"P & F Chart (High/Low Range)",IIf(direction > 0, 27, 4), 8192);


//=====================================

_N(Title = Name() + "  " +
EncodeColor(colorRed) + "X - O (High/Low Range)" + "   " +
EncodeColor(colorBlue) + "Box" + " = " +
EncodeColor(colorBlack) + WriteVal(Box, format = 1.4) + "   " +
EncodeColor(colorCustom12) + "Revers" + " = " +
EncodeColor(colorBlack) + WriteVal(Revers, format = 1.0));
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Фев 17, 2010 10:18 pm Ответить с цитатой Вернуться к началу

Цитата:

Т.е. одному "обычному" бару соответствует один столбик в крестах или нулях. Они все идут друг за другом. При этом в данном случае или верхняя граница или нижняя граница столбцов имеет одинаковую цену - вот я хочу посчитать количество таких столбиков

Если правильно понял вопрос.

Там в цикле счтается массив direction
Если кресты, то он равен 1, если ноли, то 0
Собственно для того чтобы посчитать число одинаковых столбцов можно сделать так.
Код:

qq = Sum(direction, 10);

Дальше. Если qq == 10 то 10 столбиков крестов, а если 0 то 10 столбиков нолей.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen