Russ79 >>:
картинку нарисовать можете, что они делают?
Здравствуйте! На одном из форумов в интернете натолкнулся на пару индикаторов для когда-то популярной стратегии КИС. Ниже приведены тексты индикаторов. Индикаторы были написаны для MetaTrader 3.*. Хотел поинтересоваться, нет ли подобных индикаторов для 4-ки? Или может кто-нибудь поможет адаптировать его под MQL4. Сам далек от программирования. Буду признателен за помощь!
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте! На одном из форумов в интернете натолкнулся на пару индикаторов для когда-то популярной стратегии КИС. Ниже приведены тексты индикаторов. Индикаторы были написаны для MetaTrader 3.*. Хотел поинтересоваться, нет ли подобных индикаторов для 4-ки? Или может кто-нибудь поможет адаптировать его под MQL4. Сам далек от программирования. Буду признателен за помощь!
1-й индикатор KIS
/*[[
Name := KiS
Author := Copyright © 2004, MetaQuotes Software Corp.
Link := http://www.metaquotes.net/
Separate Window := No
First Color := Blue
First Draw Type := Line
First Symbol := 217
Use Second Data := Yes
Second Color := Blue
Second Draw Type := Line
Second Symbol := 218
]]*/
Variable : shift(0), i(0), CurDay(0), DayMax(0), DayMin(0),BarCount(0),DayOpen(0),DayClose(0), Avg(0);
// loop from first bar to current bar (with shift=0)
For shift=Bars-1 Downto 0 Begin
if CurDay <> TimeDay(Time[shift]) then //начинается новый день (и машины - туда, сюда)...
begin
for i=BarCount downto 0
Begin
SetIndexValue(shift+i, DayMax);
SetIndexValue2(shift+i, DayMin);
end;
CurDay = TimeDay(Time[shift]);
BarCount = 0;
DayMax = 0;
DayMin = 1000; //Заранее больше, чтоб уменьшился в процессе
DayOpen = Open[shift];
end;
if DayMax < High[shift] then DayMax = High[shift];
if DayMin > Low[shift] then DayMin = Low[shift];
BarCount = BarCount + 1;
End;
//это дорисовка последнего, незавершенного еще, дня
for i=BarCount downto 0
Begin
SetIndexValue(shift+i, DayMax);
SetIndexValue2(shift+i, DayMin);
end;
DayClose = Close[0];
Avg = (DayMax+DayMin)/2; //средняя за текущий день
Comment("Max:", DayMax,," Min:", DayMin, "\n", "Avg:", Avg, "\n", "Width:", (DayMax-DayMin)/Point,"\n","От Avg до Open:",Round(abs(Avg-DayOpen)/Point),"\n","От Avg до Close:",Round(abs(Avg-DayClose)/Point));
2-й индикатор.
/*[[Name := dayHL_Average
Author := DevianT (из-за природной лени большая часть исходного кода взята из индикатора точки вращения, автор - ТЕТ)
Link := deviant@deviant.ru
Notes :=
Separate Window := No
First Color := Blue
First Draw Type := Line
First Symbol := 217
Use Second Data := Yes
Second Color := Red
Second Draw Type := Line
Second Symbol := 218
]]*/
input: use_formula(0); // какую формулу использовать (0-1) 0 - средняя 1 - хай/лоу
input: show_comment(0);// рисовать ли комментарий (0 - нет, 1 - да)
input: how_long(-1);// сколько баров обрабатывать (-1 - все), рекомендую 1000
var: cnt(0);// счетчик баров
var: begin_bar(0);// бар, с которого начинает работу индикатор
var: prev_day(0), cur_day(0); // идентификаторы текущего и предыдущего дня
var: day_high(0);// дневной high
var: day_low(0);// дневной low
var: yesterday_high(0);// наибольшая цена предыдущего дня
var: yesterday_low(0);// наименьшая цена предыдущего дня
var: yesterday_close(0);// цена закрытия предыдущего дня
var: P(0),S(0),R(0);
for cnt = bars downto 0
{
SetIndexValue(cnt, 0);
SetIndexValue2(cnt, 0);
};
// правильные таймфремы для нашего индикатора - все, что меньше D1
if Period >= 1440 then// >= D1
{
Comment("WARNING: Invalid timeframe!");
exit;
};
// проверим на правильность номер формулы
if use_formula < 0 or use_formula > 1 then
{
Comment("WARNING: Wrong use_formula value! Valid values: 0-1");
exit;
};
// решаем с какого бара мы начнем считать наш индикатор
if how_long = -1 then
{
begin_bar = bars;
}
else
{
begin_bar = how_long;
};
// обходим бары слева направо (0-й бар тоже используем, т.к. из него мы берём только high и low)
for cnt = begin_bar downto 0
{
cur_day = TimeDay(time[cnt]);
if prev_day != cur_day then
{
yesterday_close = CLOSE[cnt+1];
yesterday_high = day_high;
yesterday_low = day_low;
P = (yesterday_high + yesterday_low ) / 2;
R = yesterday_high;
S = yesterday_low;
// т.к. начался новый день, то инициируем макс. и мин. текущего (уже) дня
day_high = HIGH[cnt];
day_low = LOW[cnt];
// запомним данный день, как текущий
prev_day = cur_day;
};
// продолжаем накапливать данные
day_high = max(day_high, HIGH[cnt]);
day_low = min(day_low, LOW[cnt]);
// рисуем
if use_formula = 0 then
{
// рисуем pivot-линию по значению, вычисленному по параметрам вчерашнего дня
SetIndexValue(cnt, P);
}
else
{
// рисуем линии сопротивления и поддержки уровня 1,2 или 3
SetIndexValue(cnt, R);// сопротивление
SetIndexValue2(cnt, S); // поддержка
};
}; // for
if show_comment = 1 then
{
P = (yesterday_high + yesterday_low ) / 2;
R = yesterday_high;
S = yesterday_low;
Comment( "H=", yesterday_high, ", L=", yesterday_low, ", HL/2=", P );
};
// end program