- Новый контент
- Книга Masterforex-V
-
Академия
- Как стать слушателем Академии
- ⇒ ТС Masterforex-V - Интенсивный Курс Онлайн
- ⇒ Факультет Форекс Скальпинга Magister
- ⇒ Факультет СРЕДНЕсрочной торговли и паттернов ГОСТ
- ⇒ Кафедра ДФВА
- ⇒ Кафедра Опционной Торговли
- ⇒ Факультет биржевой торговли "Futures Trade and Stock Exchange"
- ⇒ Факультет торговли объёмом"
- ⇒ Факультет Инвестиций
- ⇒ ФАКУЛЬТЕТ Пробой Флета, Автоматизация, Автотрейдинг
- ⇒ Кафедра Спектрального Анализа FOREX и ИНДЕКСОВ валют
- ⇒ Система раннего прогнозирования в ТС МФ на основе модернизации АО и WPR
- ⇒ Кафедра FMA_Sar
- ⇒ Кафедра синергетического объемно-волнового анализа (СОВА)
- ⇒Кафедра бинарных опционов
- Как продлить доступ в закрытую часть Академии?
- Форумы
- Галерея
- Блоги
- Скачать
- Контакты
- Личный кабинет
- Больше
|
Поддержки-Пивот-Сопротивления
Автор темы:
alexgomel
, окт 21 2006 10:02
45 ответов в этой теме
#1
Опубликовано 21 Октябрь 2006 - 10:02
ATR_Levels.zip 1,28 КБ
5488 Скачано
Murrey_Math.zip 3,26 КБ 3968 Скачано
Pivot.zip 1,36 КБ 6849 Скачано
PivotDaily.zip 2,58 КБ 5047 Скачано
RES_SUP.zip 2,15 КБ 4183 Скачано
Support_and_Resistance__Barry_.zip 714 байт 4695 Скачано
WeeklyPivot.zip 1,34 КБ 3893 Скачано
Murrey_Math.zip 3,26 КБ 3968 Скачано
Pivot.zip 1,36 КБ 6849 Скачано
PivotDaily.zip 2,58 КБ 5047 Скачано
RES_SUP.zip 2,15 КБ 4183 Скачано
Support_and_Resistance__Barry_.zip 714 байт 4695 Скачано
WeeklyPivot.zip 1,34 КБ 3893 Скачано
#2
Опубликовано 18 Ноябрь 2006 - 01:26
А как всем этим пользоваться?
МФ рулит :)
#3
Опубликовано 08 Январь 2007 - 08:53
Как установить Пивот на платформу МТ4?
XXX
#4
Опубликовано 09 Январь 2007 - 06:03
Закинь сюда ..\experts\indicators и перегрузи терминал.Как установить Пивот на платформу МТ4?
Потом в терминале добавишь индикатор на график.
Сообщение изменено: Master, 09 Январь 2007 - 06:04 .
#5
Опубликовано 20 Январь 2007 - 05:44
ATR_Levels.zip 1,28 КБ 5488 Скачано
Murrey_Math.zip 3,26 КБ 3968 Скачано
Pivot.zip 1,36 КБ 6849 Скачано
PivotDaily.zip 2,58 КБ 5047 Скачано
RES_SUP.zip 2,15 КБ 4183 Скачано
Support_and_Resistance__Barry_.zip 714 байт 4695 Скачано
WeeklyPivot.zip 1,34 КБ 3893 Скачано
Господа,
разжуйте для чайника как этими индикаторами пользоваться!
#6
Опубликовано 25 Апрель 2007 - 10:50
У кого нибудь есть месячный пивот?
#7
Опубликовано 29 Апрель 2007 - 05:43
Уважаемые, а все эти индикаторы в Метастоке 8 будут работать? Как подключить?
#8
Опубликовано 27 Май 2007 - 02:54
Давно ищу нормальный пивотный индикатор(был, потерял).
Требования:
1. Стандартный пивот с двумя-тремя уровнями сопр/подд.
2. Регулировка GMTShift (сдвиг точки начала расчёта суток или сессии)
3. Отображение истории (желательна регулировка в днях)
4. Должен хорошо (корректно) отображаться при работе в тестере.
5. Желательно больше никаких наворотов.
Вот такое скромное пожелание.
ИМХО не только мне пригодится.
Возможна замена на Камариллу, подходящую под эти же требования.
Из папки терминала удалил давно, а в загашнике может и остался.
Он НИЧЕГО не даёт.
Вместо него гораздо лучше (точней) пользоваться глобальными (месячными, годовыми) максимумами/минимумами.
ИМХО. Не навязываю, но сам посмотри.
Ну, а если уж и стремиться к глобализму, то лучше всего должны быть годовые, пятилеточные и т.д. пивоты. :)
Требования:
1. Стандартный пивот с двумя-тремя уровнями сопр/подд.
2. Регулировка GMTShift (сдвиг точки начала расчёта суток или сессии)
3. Отображение истории (желательна регулировка в днях)
4. Должен хорошо (корректно) отображаться при работе в тестере.
5. Желательно больше никаких наворотов.
Вот такое скромное пожелание.
ИМХО не только мне пригодится.
Возможна замена на Камариллу, подходящую под эти же требования.
Если ты точно уверен, что он тебе нужен, то поищу.У кого нибудь есть месячный пивот?
Из папки терминала удалил давно, а в загашнике может и остался.
Он НИЧЕГО не даёт.
Вместо него гораздо лучше (точней) пользоваться глобальными (месячными, годовыми) максимумами/минимумами.
ИМХО. Не навязываю, но сам посмотри.
Ну, а если уж и стремиться к глобализму, то лучше всего должны быть годовые, пятилеточные и т.д. пивоты. :)
Сообщение изменено: VladMih, 27 Май 2007 - 02:51 .
Есть и простые методы трейдинга.
#9
Опубликовано 27 Май 2007 - 03:51
Поискал, нашёл в почте от автора. Вдруг чел действительно сумеет это круто использовать:
...
Эй-е-ейЁ!
Подгодтовил архив и не знаю как его приат...собачить!
Первый раз такое в моей некороткой инетовской жизни! :)
Подскажите КАК - вложу - 4 пивота.
2 "нормальных" + 1 недельный + 1 месячный
P.S. ещё раз всё просмотрел. Кто так круто всё замутил?....
Вижу только присобачивание КАРТИНОК, а других файлов - не вижу.
...
Эй-е-ейЁ!
Подгодтовил архив и не знаю как его приат...собачить!
Первый раз такое в моей некороткой инетовской жизни! :)
Подскажите КАК - вложу - 4 пивота.
2 "нормальных" + 1 недельный + 1 месячный
P.S. ещё раз всё просмотрел. Кто так круто всё замутил?....
Вижу только присобачивание КАРТИНОК, а других файлов - не вижу.
Сообщение изменено: VladMih, 27 Май 2007 - 03:58 .
Есть и простые методы трейдинга.
#10
Опубликовано 29 Май 2007 - 05:34
Сюда никто не заходит, что ли???
Подскажите хоть как прикрепить архив, плз..
Подскажите хоть как прикрепить архив, плз..
#11
Опубликовано 29 Май 2007 - 07:27
Жмите ответить => прикрепить файл => выбираете нужный файл
И будет вам счастье
И будет вам счастье
- IN GOD WE TRUST -
#12
Опубликовано 29 Май 2007 - 11:16
Хе! Оказывается тут бывают люди :)Жмите ответить => прикрепить файл => выбираете нужный файл
И будет вам счастье
Нету у меня "прикрепить файл". Сто лет прикрепляю, а тут вижу только (по порядку):
"вставить ссылку", "... мыло", "... изображение", "цитата", "код"
На этом ВСЁ. Дальше уже идёт форматирование. ДО этого - стили. :(
При переключении на предварительный просмотр ТОЖЕ НИЧЕГО НЕ ПОЯВЛЯЕТСЯ.
#14
Опубликовано 29 Май 2007 - 02:18
Хе... До такого я додумался БЫ, ноСм. картинку
У меня между блоками опций и иконок сообщения НЕТ блока загрузки.
Что-то ишак не хочет сегодня от меня картинки брать.
Можно посмотреть мой "ответ Чемберлену" здесь - http://www.megaupload.com/?d=3YC1S9JU
P.S. И форум глючит и провайдеры у вас где-то в районе Киева (делал трассировки)
не хочет работать нормально.
Сообщение изменено: VladMih, 29 Май 2007 - 02:53 .
Есть и простые методы трейдинга.
#15
Опубликовано 09 Октябрь 2007 - 09:07
Почему то не могу прикреплять ни файлы ни картинки, поэтому кидаю код индикатора пайвотов - разработка моя, настроен сразу на время Альпари, то есть расчет по закрытию суток 22GMT, совмещен с сессионным индикатор, кроме того расчитывает размер оптимального стоп лосса, для позиций, которые сопровождаются более одного дня по тренду.
Спроектированно для интрадей визуализации, используемые таймфреймы не более часовика, с большего таймфрема не получается считывать нужный диапазон времени, за счет смещения, ну и пайвот при расчете без учета закрытия - отрабатывает гораздо точнее, чем стандартный пайвот, тестировал на советниках на всех валютных парах.
//+------------------------------------------------------------------+
//| inday.mq4 |
//| Copyright © 2007, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
//--------------------------------------------------------------------
int GMTshift =2;
// Сдвиг для Альпари +2(лето) +1(зима) и надо 22-> -2
// Сдвиг настраивается на 22GMT
//------- Внешние параметры индикатора -------------------------------
extern int NumberOfDays = 40; // Количество дней
extern string AsiaBegin = "01:00"; // Открытие азиатской сессии
extern string AsiaEnd = "10:00"; // Закрытие азиатской сессии
extern color AsiaColor = Goldenrod; // Цвет азиатской сессии
extern string EurBegin = "08:00"; // Открытие европейской сессии
extern string EurEnd = "16:00"; // Закрытие европейской сессии
extern color EurColor = Tan; // Цвет европейской сессии
extern string USABegin = "12:00"; // Открытие американской сессии
extern string USAEnd = "23:00"; // Закрытие американской сессии
extern color USAColor = PaleGreen; // Цвет американской сессии
//-------------------------------------------------------------------+
double dayv_open =0; //закрытие
double dayv_close =0; //открытие
double dayv_high =0; //максиум
double dayv_low =0; //мимниум
int dayb_high =0; //бар максиума
int dayb_low =0; //бар миниума
int dayb_start =0; //бар начала от 0 бар
int dayb_end =0; //бар завершения от 0 бар
int dayv0 =0; //дата начала (в цикле она смещается, надо запомнить)
//--------------------------------------------------------------------
double week_open =0; //открытие недели
double week_high =0; //недельный максиум
double week_low =0; //недельный миниум
double week_close =0; //недельное закрытие
//--------------------------------------------------------------------
int crossMA_b1 =0; //пересечение MA бар 1
int crossMA_b2 =0; //пересечение MA бар 2
int crossMA_b3 =0; //пересечение MA бар 3
int day_MA1 =0; //MA1 для предыдущего дня
int day_MA2 =0; //MA2 для предыдущего дня
//--------------------------------------------------------------------------
double Pivot, R1, R2, R3, S1, S2, S3, R4, S4 ;
//--------------------------------------------------------------------------
extern double Lots = 0.1;
extern double TrailingStop = 20;
//--------------------------------------------------------------------------
int MAGIC_BUY = 1; //Магик для отложников на продажу
int MAGIC_SELL = 2; //Магик для отложников на покупку
int UR_Step = 10; //Верхняя зона реакции уровня
int DR_Step = 10; //Нижняя зона реакции уровня
int SlipPage = 2; //Размер допустимого проскальзывания
int CurrentDay = 0; //Сегодняшний день
//--------------------------------------------------------------------------
int M_MA = 21;
int S_MA = 96;
int today = 0;
int ticket = 0;
void init() {
DeleteObjects();
for (int i=0; i<NumberOfDays; i++) {
CreateObjects("AS"+i, AsiaColor);
CreateObjects("EU"+i, EurColor);
CreateObjects("US"+i, USAColor);
}
Comment("");
}
//---------------------------------------------------------------------------------------------------------------
void deinit() {
DeleteObjects();
Comment("");
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//int counted_bars=IndicatorCounted();
OrdersDaySetup();
datetime dt=CurTime();
for (int i=0; i<NumberOfDays; i++) {
DrawObjects(dt, "AS"+i, AsiaBegin, AsiaEnd);
DrawObjects(dt, "EU"+i, EurBegin, EurEnd);
DrawObjects(dt, "US"+i, USABegin, USAEnd);
//уменьшение объектов на один день
dt=decDateTradeDay(dt);
while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
}
return(0);
}
//+------------------------------------------------------------------+
void OrdersDaySetup()
{
//проверяем наступление нового дня, по факту наступления закрываем все отложники
//и устанавливаем новые по новым уровням
if (CurrentDay == 0 || CurrentDay != TimeDay(Time[0]-(GMTshift*3600)))
{
//Comment ("Новые сутки");
//DeleteStopOrders();
CurrentDay = TimeDay(Time[0]-(GMTshift*3600));
if (FindDayPeriod(2)==2)
{
DayLevels(1,1);
GetPivot();
UR_Step=NormalizeDouble((R1-S1)/4/Point,0);
DR_Step=NormalizeDouble((R1-S1)/4/Point,0);
TrailingStop = NormalizeDouble((R1-S1)/2/Point,0);
Comment ("Оптимальный параметр трейлинг-стопа - ", TrailingStop);
}
}
}
int FindDayPeriod(int day_period=0)
// возвращает наличие на графике количества дней переданных в аргумент запроса
//----------------------------------------------------------------------------------------
{
int cnt=0;
int d=0;
int c=0;
d=TimeDay(Time[cnt]-(GMTshift*3600));
while (cnt<Bars-1)
{ if(TimeDay(Time[cnt]-(GMTshift*3600))==d)
{ if(TimeDay(Time[cnt+1]-(GMTshift*3600))!=d)
{ if(c==day_period) { return(day_period); break;}
if(c<day_period+1) { d=TimeDay(Time[cnt+1]-(GMTshift*3600)); c++; } //смещение
}
}
cnt++;
}
}
//---
void DayLevels(int da = 1,int da_shift=1)
// Расчет уровней миниума, максиума, закрытия, открытия за день
// или указанное количество дней
// ------------------------------------------------------------
{
// Если таймфрайм больше чем часовой, тогда выводим сообщение,
// что необходим таймфрейм не больше часового
if(Period()>60)
{
Comment("Для расчета PIVOTS необходим таймфрейм не старше часового!");
return(0);
}
dayv_open =0; //открытие
dayv_close =0; //закрытие
dayv_high =0; //максиум
dayv_low =0; //мимниум
dayb_high =0; //бар максиума
dayb_low =0; //бар миниума
dayb_start =0; //бар начала от 0 бар (конец диапазона по времени)
dayb_end =0; //бар завершения от 0 бар (начало диапазона по времени)
dayv0 =0; //дата начала
dayv0=TimeDay(Time[0]-(GMTshift*3600));
int dayb=0;
int cnt=0;
int cnt_da=da; //default 1
int cnt_da_shift=da_shift; //default 1
while (cnt<Bars-1)
{
// с какого дня считать, цикл начинаеся с сегодня
// если день 1, тогда игноируем сегодня и считаем завтра
if (TimeDay(Time[cnt]-(GMTshift*3600))==dayv0)
{
//последний день сегодня
if (TimeDay(Time[cnt+1]-(GMTshift*3600))!=dayv0)
{
if (cnt_da_shift==1)
// инициализируем переменные расчета
{
//инициализируем начальную дату
dayb=TimeDay(Time[cnt+1]-(GMTshift*3600));
//Comment (dayb);
// Максиум и миниум, а также цену закрытия и открытия
dayv_close=Close[cnt+1]; //закрытие
dayv_high=High[cnt+1]; //максиум
dayv_low=Low[cnt+1]; //мимниум
//запоминаем номера баров
dayb_start = cnt; //закрытие бар
dayb_high = cnt; //максиум бар
dayb_low = cnt; //мимниум бар
}
if (cnt_da_shift>1)
// тогда запускаем отсчет до указанного дня
{
//вычитаем единичку от счетчика
cnt_da_shift--;
//смещаем дату
dayv0 = TimeDay(Time[cnt+1]-(GMTshift*3600));
}
}
}
//цикл расчета для дня dayb, но если день понедельник
if (TimeDay(Time[cnt]-(GMTshift*3600))==dayb)
{
//росмотр Low - High
if(High[cnt] > dayv_high)
{
//обновление значений
dayv_high = High[cnt];
dayb_high = cnt;
}
if(Low[cnt] < dayv_low)
{
//обновление значений
dayv_low = Low[cnt];
dayb_low = cnt;
}
//обнаружение конца дня, если идут свечки воскресенья, тогда сдвигаем
if (TimeDayOfWeek(Time[cnt]-(GMTshift*3600))==0)
{
// считать и пятничные свечки
dayb = TimeDay(Time[cnt+1]-(GMTshift*3600));
}
if(TimeDay(Time[cnt+1]-(GMTshift*3600))!=dayb)
{
dayv_open = Open[cnt]; //закрытие
dayb_end = cnt;
//Выводим полученную информацию
//Comment ("Входные параметры: смещение в днях для расчета - ", da_shift , " дней расчета - ", da, "\n","Результат: открытие - ", dayv_open , " закрытие - ", dayv_close," максиум - ", dayv_high, " миниум - ", dayv_low);
if(cnt_da == 1){break;}
if(cnt_da > 1)
{
//смещение даты
dayb=TimeDay(Time[cnt+1]-(GMTshift*3600));
cnt_da--;
}
}
}
cnt++;
}
}
void GetPivot()
{
//рисуем всяку хрень на экран по полученым координатам
/*
double dayv_close =0; //открытие
double dayv_high =0; //максиум
double dayv_low =0; //мимниум
*/
// Pivot=(dayv_high+dayv_low+dayv_close)/3;
Pivot=(dayv_high+dayv_low)/2;
S1=2*Pivot-dayv_high;
R1=2*Pivot-dayv_low;
S2=Pivot-R1+S1;
R2=Pivot+R1-S1;
S3=dayv_low-2*(dayv_high-Pivot);
R3=dayv_high+2*(Pivot-dayv_low);
S4=dayv_low-3*(dayv_high-Pivot);
R4=dayv_high+3*(Pivot-dayv_low);
//Pivot=Pivot+(dayv_close-dayv_open)/4;
ShowPivot(Pivot,R1,R2,R3,R4,S1,S2,S3,S4);
}
void ShowPivot(double Pivot,double R1,double R2,double R3,double R4,double S1,double S2,double S3,double S4)
{
ObjectDelete("P_Line"); ObjectDelete("S4_Line"); ObjectDelete("R4_Line");
ObjectDelete("S3_Line"); ObjectDelete("R3_Line"); ObjectDelete("S2_Line");
ObjectDelete("R2_Line"); ObjectDelete("S1_Line"); ObjectDelete("R1_Line");
ObjectCreate("P_Line",OBJ_HLINE,0,CurTime(),Pivot);ObjectSet("P_Line",OBJPROP_COLOR,Sienna); ObjectSet("P_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("S4_Line",OBJ_HLINE,0,CurTime(),S4); ObjectSet("S4_Line",OBJPROP_COLOR,DarkOliveGreen); ObjectSet("S4_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("R4_Line",OBJ_HLINE,0,CurTime(),R4); ObjectSet("R4_Line",OBJPROP_COLOR,DarkSlateGray); ObjectSet("R4_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("S3_Line",OBJ_HLINE,0,CurTime(),S3); ObjectSet("S3_Line",OBJPROP_COLOR,DarkOliveGreen); ObjectSet("S3_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("R3_Line",OBJ_HLINE,0,CurTime(),R3); ObjectSet("R3_Line",OBJPROP_COLOR,DarkSlateGray); ObjectSet("R3_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("S2_Line",OBJ_HLINE,0,CurTime(),S2); ObjectSet("S2_Line",OBJPROP_COLOR,DarkOliveGreen); ObjectSet("S2_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("R2_Line",OBJ_HLINE,0,CurTime(),R2); ObjectSet("R2_Line",OBJPROP_COLOR,DarkSlateGray); ObjectSet("R2_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("S1_Line",OBJ_HLINE,0,CurTime(),S1); ObjectSet("S1_Line",OBJPROP_COLOR,DarkOliveGreen); ObjectSet("S1_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("R1_Line",OBJ_HLINE,0,CurTime(),R1); ObjectSet("R1_Line",OBJPROP_COLOR,DarkSlateGray); ObjectSet("R1_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectsRedraw();
if(ObjectFind("R4 label")!=0)
{ ObjectCreate("R4 label",OBJ_TEXT,0,Time[0],R4); ObjectSetText("R4 label"," R 4 ",6,"Arial",DarkSlateGray);}
else ObjectMove("R4 label",0,Time[0],R4);
if(ObjectFind("S4 label")!=0)
{ ObjectCreate("S4 label",OBJ_TEXT,0,Time[0],S4); ObjectSetText("S4 label"," S 4 ",6,"Arial",DarkOliveGreen);}
else ObjectMove("S4 label",0,Time[0],S4);
if(ObjectFind("R3 label")!=0)
{ ObjectCreate("R3 label",OBJ_TEXT,0,Time[0],R3); ObjectSetText("R3 label"," R 3 ",6,"Arial",DarkSlateGray);}
else ObjectMove("R3 label",0,Time[0],R3);
if(ObjectFind("S3 label")!=0)
{ ObjectCreate("S3 label",OBJ_TEXT,0,Time[0],S3); ObjectSetText("S3 label"," S 3 ",6,"Arial",DarkOliveGreen);}
else ObjectMove("S3 label",0,Time[0],S3);
if(ObjectFind("R2 label")!=0)
{ ObjectCreate("R2 label",OBJ_TEXT,0,Time[0],R2); ObjectSetText("R2 label"," R 2 ",6,"Arial",DarkSlateGray);}
else ObjectMove("R2 label",0,Time[0],R2);
if(ObjectFind("S2 label")!=0)
{ ObjectCreate("S2 label",OBJ_TEXT,0,Time[0],S2); ObjectSetText("S2 label"," S 2 ",6,"Arial",DarkOliveGreen);}
else ObjectMove("S2 label",0,Time[0],S2);
if(ObjectFind("R1 label")!=0)
{ ObjectCreate("R1 label",OBJ_TEXT,0,Time[0],R1); ObjectSetText("R1 label"," R 1 ",6,"Arial",DarkSlateGray);}
else ObjectMove("R1 label",0,Time[0],R1);
if(ObjectFind("S1 label")!=0)
{ ObjectCreate("S1 label",OBJ_TEXT,0,Time[0],S1); ObjectSetText("S1 label"," S 1 ", 6,"Arial",DarkOliveGreen);}
else ObjectMove("S1 label",0,Time[0],S1);
if(ObjectFind("P label")!=0)
{ ObjectCreate("P label",OBJ_TEXT,0,Time[0],Pivot); ObjectSetText("P label"," Pvt ",6,"Arial",Sienna);}
else ObjectMove("P label",0,Time[0],Pivot); }
//-------------------------------------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Создание объектов индикатора |
//| Параметры: |
//| no - наименование объекта |
//| cl - цвет объекта |
//+------------------------------------------------------------------+
void CreateObjects(string no, color cl) {
ObjectCreate(no, OBJ_RECTANGLE, 0, 0,0, 0,0);
ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(no, OBJPROP_COLOR, cl);
ObjectSet(no, OBJPROP_BACK, True);
}
//+------------------------------------------------------------------+
//| Удаление объектов индикатора |
//+------------------------------------------------------------------+
void DeleteObjects() {
for (int i=0; i<NumberOfDays; i++) {
ObjectDelete("AS"+i);
ObjectDelete("EU"+i);
ObjectDelete("US"+i);
}
}
//+------------------------------------------------------------------+
//| Прорисовка объектов на графике |
//| Параметры: |
//| dt - дата торгового дня |
//| no - наименование объекта |
//| tb - время начала сессии |
//| te - время окончания сессии |
//+------------------------------------------------------------------+
void DrawObjects(datetime dt, string no, string tb, string te) {
datetime t1, t2;
double p1, p2;
int b1, b2;
t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
b1=iBarShift(NULL, 0, t1+ ((GMTshift+2)*3600));
b2=iBarShift(NULL, 0, t2 + ((GMTshift+2)*3600));
p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2, b2)];
p2=Low [Lowest (NULL, 0, MODE_LOW , b1-b2, b2)];
ObjectSet(no, OBJPROP_TIME1 , t1 + ((GMTshift+2)*3600));
ObjectSet(no, OBJPROP_PRICE1, p1);
ObjectSet(no, OBJPROP_TIME2 , t2 + ((GMTshift+2)*3600));
ObjectSet(no, OBJPROP_PRICE2, p2);
}
//+------------------------------------------------------------------+
//| Уменьшение даты на один торговый день |
//| Параметры: |
//| dt - дата торгового дня |
//+------------------------------------------------------------------+
datetime decDateTradeDay (datetime dt) {
int ty=TimeYear(dt);
int tm=TimeMonth(dt);
int td=TimeDay(dt);
int th=TimeHour(dt);
int ti=TimeMinute(dt);
td--;
if (td==0) {
tm--;
if (tm==0) {
ty--;
tm=12;
}
if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
if (tm==2) if (MathMod(ty, 4)==0) td=29; else td=28;
if (tm==4 || tm==6 || tm==9 || tm==11) td=30;
}
return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+
Спроектированно для интрадей визуализации, используемые таймфреймы не более часовика, с большего таймфрема не получается считывать нужный диапазон времени, за счет смещения, ну и пайвот при расчете без учета закрытия - отрабатывает гораздо точнее, чем стандартный пайвот, тестировал на советниках на всех валютных парах.
//+------------------------------------------------------------------+
//| inday.mq4 |
//| Copyright © 2007, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
//--------------------------------------------------------------------
int GMTshift =2;
// Сдвиг для Альпари +2(лето) +1(зима) и надо 22-> -2
// Сдвиг настраивается на 22GMT
//------- Внешние параметры индикатора -------------------------------
extern int NumberOfDays = 40; // Количество дней
extern string AsiaBegin = "01:00"; // Открытие азиатской сессии
extern string AsiaEnd = "10:00"; // Закрытие азиатской сессии
extern color AsiaColor = Goldenrod; // Цвет азиатской сессии
extern string EurBegin = "08:00"; // Открытие европейской сессии
extern string EurEnd = "16:00"; // Закрытие европейской сессии
extern color EurColor = Tan; // Цвет европейской сессии
extern string USABegin = "12:00"; // Открытие американской сессии
extern string USAEnd = "23:00"; // Закрытие американской сессии
extern color USAColor = PaleGreen; // Цвет американской сессии
//-------------------------------------------------------------------+
double dayv_open =0; //закрытие
double dayv_close =0; //открытие
double dayv_high =0; //максиум
double dayv_low =0; //мимниум
int dayb_high =0; //бар максиума
int dayb_low =0; //бар миниума
int dayb_start =0; //бар начала от 0 бар
int dayb_end =0; //бар завершения от 0 бар
int dayv0 =0; //дата начала (в цикле она смещается, надо запомнить)
//--------------------------------------------------------------------
double week_open =0; //открытие недели
double week_high =0; //недельный максиум
double week_low =0; //недельный миниум
double week_close =0; //недельное закрытие
//--------------------------------------------------------------------
int crossMA_b1 =0; //пересечение MA бар 1
int crossMA_b2 =0; //пересечение MA бар 2
int crossMA_b3 =0; //пересечение MA бар 3
int day_MA1 =0; //MA1 для предыдущего дня
int day_MA2 =0; //MA2 для предыдущего дня
//--------------------------------------------------------------------------
double Pivot, R1, R2, R3, S1, S2, S3, R4, S4 ;
//--------------------------------------------------------------------------
extern double Lots = 0.1;
extern double TrailingStop = 20;
//--------------------------------------------------------------------------
int MAGIC_BUY = 1; //Магик для отложников на продажу
int MAGIC_SELL = 2; //Магик для отложников на покупку
int UR_Step = 10; //Верхняя зона реакции уровня
int DR_Step = 10; //Нижняя зона реакции уровня
int SlipPage = 2; //Размер допустимого проскальзывания
int CurrentDay = 0; //Сегодняшний день
//--------------------------------------------------------------------------
int M_MA = 21;
int S_MA = 96;
int today = 0;
int ticket = 0;
void init() {
DeleteObjects();
for (int i=0; i<NumberOfDays; i++) {
CreateObjects("AS"+i, AsiaColor);
CreateObjects("EU"+i, EurColor);
CreateObjects("US"+i, USAColor);
}
Comment("");
}
//---------------------------------------------------------------------------------------------------------------
void deinit() {
DeleteObjects();
Comment("");
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//int counted_bars=IndicatorCounted();
OrdersDaySetup();
datetime dt=CurTime();
for (int i=0; i<NumberOfDays; i++) {
DrawObjects(dt, "AS"+i, AsiaBegin, AsiaEnd);
DrawObjects(dt, "EU"+i, EurBegin, EurEnd);
DrawObjects(dt, "US"+i, USABegin, USAEnd);
//уменьшение объектов на один день
dt=decDateTradeDay(dt);
while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
}
return(0);
}
//+------------------------------------------------------------------+
void OrdersDaySetup()
{
//проверяем наступление нового дня, по факту наступления закрываем все отложники
//и устанавливаем новые по новым уровням
if (CurrentDay == 0 || CurrentDay != TimeDay(Time[0]-(GMTshift*3600)))
{
//Comment ("Новые сутки");
//DeleteStopOrders();
CurrentDay = TimeDay(Time[0]-(GMTshift*3600));
if (FindDayPeriod(2)==2)
{
DayLevels(1,1);
GetPivot();
UR_Step=NormalizeDouble((R1-S1)/4/Point,0);
DR_Step=NormalizeDouble((R1-S1)/4/Point,0);
TrailingStop = NormalizeDouble((R1-S1)/2/Point,0);
Comment ("Оптимальный параметр трейлинг-стопа - ", TrailingStop);
}
}
}
int FindDayPeriod(int day_period=0)
// возвращает наличие на графике количества дней переданных в аргумент запроса
//----------------------------------------------------------------------------------------
{
int cnt=0;
int d=0;
int c=0;
d=TimeDay(Time[cnt]-(GMTshift*3600));
while (cnt<Bars-1)
{ if(TimeDay(Time[cnt]-(GMTshift*3600))==d)
{ if(TimeDay(Time[cnt+1]-(GMTshift*3600))!=d)
{ if(c==day_period) { return(day_period); break;}
if(c<day_period+1) { d=TimeDay(Time[cnt+1]-(GMTshift*3600)); c++; } //смещение
}
}
cnt++;
}
}
//---
void DayLevels(int da = 1,int da_shift=1)
// Расчет уровней миниума, максиума, закрытия, открытия за день
// или указанное количество дней
// ------------------------------------------------------------
{
// Если таймфрайм больше чем часовой, тогда выводим сообщение,
// что необходим таймфрейм не больше часового
if(Period()>60)
{
Comment("Для расчета PIVOTS необходим таймфрейм не старше часового!");
return(0);
}
dayv_open =0; //открытие
dayv_close =0; //закрытие
dayv_high =0; //максиум
dayv_low =0; //мимниум
dayb_high =0; //бар максиума
dayb_low =0; //бар миниума
dayb_start =0; //бар начала от 0 бар (конец диапазона по времени)
dayb_end =0; //бар завершения от 0 бар (начало диапазона по времени)
dayv0 =0; //дата начала
dayv0=TimeDay(Time[0]-(GMTshift*3600));
int dayb=0;
int cnt=0;
int cnt_da=da; //default 1
int cnt_da_shift=da_shift; //default 1
while (cnt<Bars-1)
{
// с какого дня считать, цикл начинаеся с сегодня
// если день 1, тогда игноируем сегодня и считаем завтра
if (TimeDay(Time[cnt]-(GMTshift*3600))==dayv0)
{
//последний день сегодня
if (TimeDay(Time[cnt+1]-(GMTshift*3600))!=dayv0)
{
if (cnt_da_shift==1)
// инициализируем переменные расчета
{
//инициализируем начальную дату
dayb=TimeDay(Time[cnt+1]-(GMTshift*3600));
//Comment (dayb);
// Максиум и миниум, а также цену закрытия и открытия
dayv_close=Close[cnt+1]; //закрытие
dayv_high=High[cnt+1]; //максиум
dayv_low=Low[cnt+1]; //мимниум
//запоминаем номера баров
dayb_start = cnt; //закрытие бар
dayb_high = cnt; //максиум бар
dayb_low = cnt; //мимниум бар
}
if (cnt_da_shift>1)
// тогда запускаем отсчет до указанного дня
{
//вычитаем единичку от счетчика
cnt_da_shift--;
//смещаем дату
dayv0 = TimeDay(Time[cnt+1]-(GMTshift*3600));
}
}
}
//цикл расчета для дня dayb, но если день понедельник
if (TimeDay(Time[cnt]-(GMTshift*3600))==dayb)
{
//росмотр Low - High
if(High[cnt] > dayv_high)
{
//обновление значений
dayv_high = High[cnt];
dayb_high = cnt;
}
if(Low[cnt] < dayv_low)
{
//обновление значений
dayv_low = Low[cnt];
dayb_low = cnt;
}
//обнаружение конца дня, если идут свечки воскресенья, тогда сдвигаем
if (TimeDayOfWeek(Time[cnt]-(GMTshift*3600))==0)
{
// считать и пятничные свечки
dayb = TimeDay(Time[cnt+1]-(GMTshift*3600));
}
if(TimeDay(Time[cnt+1]-(GMTshift*3600))!=dayb)
{
dayv_open = Open[cnt]; //закрытие
dayb_end = cnt;
//Выводим полученную информацию
//Comment ("Входные параметры: смещение в днях для расчета - ", da_shift , " дней расчета - ", da, "\n","Результат: открытие - ", dayv_open , " закрытие - ", dayv_close," максиум - ", dayv_high, " миниум - ", dayv_low);
if(cnt_da == 1){break;}
if(cnt_da > 1)
{
//смещение даты
dayb=TimeDay(Time[cnt+1]-(GMTshift*3600));
cnt_da--;
}
}
}
cnt++;
}
}
void GetPivot()
{
//рисуем всяку хрень на экран по полученым координатам
/*
double dayv_close =0; //открытие
double dayv_high =0; //максиум
double dayv_low =0; //мимниум
*/
// Pivot=(dayv_high+dayv_low+dayv_close)/3;
Pivot=(dayv_high+dayv_low)/2;
S1=2*Pivot-dayv_high;
R1=2*Pivot-dayv_low;
S2=Pivot-R1+S1;
R2=Pivot+R1-S1;
S3=dayv_low-2*(dayv_high-Pivot);
R3=dayv_high+2*(Pivot-dayv_low);
S4=dayv_low-3*(dayv_high-Pivot);
R4=dayv_high+3*(Pivot-dayv_low);
//Pivot=Pivot+(dayv_close-dayv_open)/4;
ShowPivot(Pivot,R1,R2,R3,R4,S1,S2,S3,S4);
}
void ShowPivot(double Pivot,double R1,double R2,double R3,double R4,double S1,double S2,double S3,double S4)
{
ObjectDelete("P_Line"); ObjectDelete("S4_Line"); ObjectDelete("R4_Line");
ObjectDelete("S3_Line"); ObjectDelete("R3_Line"); ObjectDelete("S2_Line");
ObjectDelete("R2_Line"); ObjectDelete("S1_Line"); ObjectDelete("R1_Line");
ObjectCreate("P_Line",OBJ_HLINE,0,CurTime(),Pivot);ObjectSet("P_Line",OBJPROP_COLOR,Sienna); ObjectSet("P_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("S4_Line",OBJ_HLINE,0,CurTime(),S4); ObjectSet("S4_Line",OBJPROP_COLOR,DarkOliveGreen); ObjectSet("S4_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("R4_Line",OBJ_HLINE,0,CurTime(),R4); ObjectSet("R4_Line",OBJPROP_COLOR,DarkSlateGray); ObjectSet("R4_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("S3_Line",OBJ_HLINE,0,CurTime(),S3); ObjectSet("S3_Line",OBJPROP_COLOR,DarkOliveGreen); ObjectSet("S3_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("R3_Line",OBJ_HLINE,0,CurTime(),R3); ObjectSet("R3_Line",OBJPROP_COLOR,DarkSlateGray); ObjectSet("R3_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("S2_Line",OBJ_HLINE,0,CurTime(),S2); ObjectSet("S2_Line",OBJPROP_COLOR,DarkOliveGreen); ObjectSet("S2_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("R2_Line",OBJ_HLINE,0,CurTime(),R2); ObjectSet("R2_Line",OBJPROP_COLOR,DarkSlateGray); ObjectSet("R2_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("S1_Line",OBJ_HLINE,0,CurTime(),S1); ObjectSet("S1_Line",OBJPROP_COLOR,DarkOliveGreen); ObjectSet("S1_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("R1_Line",OBJ_HLINE,0,CurTime(),R1); ObjectSet("R1_Line",OBJPROP_COLOR,DarkSlateGray); ObjectSet("R1_Line",OBJPROP_STYLE,STYLE_SOLID);
ObjectsRedraw();
if(ObjectFind("R4 label")!=0)
{ ObjectCreate("R4 label",OBJ_TEXT,0,Time[0],R4); ObjectSetText("R4 label"," R 4 ",6,"Arial",DarkSlateGray);}
else ObjectMove("R4 label",0,Time[0],R4);
if(ObjectFind("S4 label")!=0)
{ ObjectCreate("S4 label",OBJ_TEXT,0,Time[0],S4); ObjectSetText("S4 label"," S 4 ",6,"Arial",DarkOliveGreen);}
else ObjectMove("S4 label",0,Time[0],S4);
if(ObjectFind("R3 label")!=0)
{ ObjectCreate("R3 label",OBJ_TEXT,0,Time[0],R3); ObjectSetText("R3 label"," R 3 ",6,"Arial",DarkSlateGray);}
else ObjectMove("R3 label",0,Time[0],R3);
if(ObjectFind("S3 label")!=0)
{ ObjectCreate("S3 label",OBJ_TEXT,0,Time[0],S3); ObjectSetText("S3 label"," S 3 ",6,"Arial",DarkOliveGreen);}
else ObjectMove("S3 label",0,Time[0],S3);
if(ObjectFind("R2 label")!=0)
{ ObjectCreate("R2 label",OBJ_TEXT,0,Time[0],R2); ObjectSetText("R2 label"," R 2 ",6,"Arial",DarkSlateGray);}
else ObjectMove("R2 label",0,Time[0],R2);
if(ObjectFind("S2 label")!=0)
{ ObjectCreate("S2 label",OBJ_TEXT,0,Time[0],S2); ObjectSetText("S2 label"," S 2 ",6,"Arial",DarkOliveGreen);}
else ObjectMove("S2 label",0,Time[0],S2);
if(ObjectFind("R1 label")!=0)
{ ObjectCreate("R1 label",OBJ_TEXT,0,Time[0],R1); ObjectSetText("R1 label"," R 1 ",6,"Arial",DarkSlateGray);}
else ObjectMove("R1 label",0,Time[0],R1);
if(ObjectFind("S1 label")!=0)
{ ObjectCreate("S1 label",OBJ_TEXT,0,Time[0],S1); ObjectSetText("S1 label"," S 1 ", 6,"Arial",DarkOliveGreen);}
else ObjectMove("S1 label",0,Time[0],S1);
if(ObjectFind("P label")!=0)
{ ObjectCreate("P label",OBJ_TEXT,0,Time[0],Pivot); ObjectSetText("P label"," Pvt ",6,"Arial",Sienna);}
else ObjectMove("P label",0,Time[0],Pivot); }
//-------------------------------------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Создание объектов индикатора |
//| Параметры: |
//| no - наименование объекта |
//| cl - цвет объекта |
//+------------------------------------------------------------------+
void CreateObjects(string no, color cl) {
ObjectCreate(no, OBJ_RECTANGLE, 0, 0,0, 0,0);
ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(no, OBJPROP_COLOR, cl);
ObjectSet(no, OBJPROP_BACK, True);
}
//+------------------------------------------------------------------+
//| Удаление объектов индикатора |
//+------------------------------------------------------------------+
void DeleteObjects() {
for (int i=0; i<NumberOfDays; i++) {
ObjectDelete("AS"+i);
ObjectDelete("EU"+i);
ObjectDelete("US"+i);
}
}
//+------------------------------------------------------------------+
//| Прорисовка объектов на графике |
//| Параметры: |
//| dt - дата торгового дня |
//| no - наименование объекта |
//| tb - время начала сессии |
//| te - время окончания сессии |
//+------------------------------------------------------------------+
void DrawObjects(datetime dt, string no, string tb, string te) {
datetime t1, t2;
double p1, p2;
int b1, b2;
t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
b1=iBarShift(NULL, 0, t1+ ((GMTshift+2)*3600));
b2=iBarShift(NULL, 0, t2 + ((GMTshift+2)*3600));
p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2, b2)];
p2=Low [Lowest (NULL, 0, MODE_LOW , b1-b2, b2)];
ObjectSet(no, OBJPROP_TIME1 , t1 + ((GMTshift+2)*3600));
ObjectSet(no, OBJPROP_PRICE1, p1);
ObjectSet(no, OBJPROP_TIME2 , t2 + ((GMTshift+2)*3600));
ObjectSet(no, OBJPROP_PRICE2, p2);
}
//+------------------------------------------------------------------+
//| Уменьшение даты на один торговый день |
//| Параметры: |
//| dt - дата торгового дня |
//+------------------------------------------------------------------+
datetime decDateTradeDay (datetime dt) {
int ty=TimeYear(dt);
int tm=TimeMonth(dt);
int td=TimeDay(dt);
int th=TimeHour(dt);
int ti=TimeMinute(dt);
td--;
if (td==0) {
tm--;
if (tm==0) {
ty--;
tm=12;
}
if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
if (tm==2) if (MathMod(ty, 4)==0) td=29; else td=28;
if (tm==4 || tm==6 || tm==9 || tm==11) td=30;
}
return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+
И не думать - как приземлится, а у птиц свободе учиться - лететь, оставив - все то что жаль... (A-MЕГА)
Посетителей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных пользователей