Доработка индюка спустя 3 года |
пример постройки верхней зоны текущего квартала:
Находим среднее арифметическое значение -> LOW за 10(например) кварталов
Находим средний ATR -> (HIGH — LOW)/10
Далее, от лоу + Атр = наша верхняя зона текущего квартала
//+------------------------------------------------------------------+
//| Chart.mq4 |
//| Copyright 2022, AM2 |
//| https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, AM2"
#property link "https://www.forexsystems.biz"
#property version "1.00"
#property strict
#property indicator_chart_window
extern int ATR = 10; // Кол-во кварталов для расчета
int sum=0;
datetime t1kv2=0,t2kv2=0;
double hi=0,lo=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
PutButton("BUTON",33,33,"BUTON");
//---------------------------Код должен быть в OnCalculator дабы постоянно обновлялся при смене месяца(например)
t1kv2=iTime(NULL,PERIOD_MN1,Shift(Month())-1);
t2kv2=t1kv2+60*60*24*91.25; // тут изначально было: 60*60*24*90(правильно ли? прошу перепроверить)
lo=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,Shift(Month()),0));
hi=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,Shift(Month()),0));
for(int ikv=0;ikv<ATR;ikv++)
{
double lokv=iLow(NULL,PERIOD_MN1,iLowest(NULL,PERIOD_MN1,MODE_LOW,3,Shift(Month())+ikv*3));
double hikv=iHigh(NULL,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,3,Shift(Month())+ikv*3));
int pokv=(int)((hikv-lokv)/_Point);
datetime t1kv=iTime(NULL,PERIOD_MN1,Shift(Month())-1+3*ikv);
datetime t2kv=iTime(NULL,PERIOD_MN1,Shift(Month())-1+3*(ikv+1));
sum+=pokv;
}
//---------------------------Код должен быть в OnCalculator дабы постоянно обновлялся при смене месяца(например)
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, // идентификатор события
const long& lparam, // параметр события типа long
const double& dparam, // параметр события типа double
const string& sparam // параметр события типа string
)
{
if (id == CHARTEVENT_OBJECT_CLICK) {
if (sparam == "BUTON") {
if(ObjectGetInteger(0,"BUTON",OBJPROP_STATE)==true) {
PutRect("h",t1kv2,lo+(sum/ATR)*_Point,t2kv2,lo+(sum/ATR)*0.9*_Point,Green);
PutRect("l",t1kv2,hi-(sum/ATR)*_Point,t2kv2,hi-(sum/ATR)*0.9*_Point,Green);
}
else
{
ObjectDelete("h");
ObjectDelete("l");
}
}
}
}
int Kvart(int month)
{
int kv=0;
if(month<4) kv=1; // 1 2 3
if(month>3 && month<7) kv=2; // 4 5 6
if(month>6 && month<10) kv=3; // 7 8 9
if(month>9) kv=4; // 10 11 12
return(kv);
}
int Shift(int month) // 1-rv = 1 2 3
{
int shift=0;
if(Kvart(Month())==1 && Month()==1) shift=1;
if(Kvart(Month())==1 && Month()==2) shift=2;
if(Kvart(Month())==1 && Month()==3) shift=3;
if(Kvart(Month())==2 && Month()==4) shift=1;
if(Kvart(Month())==2 && Month()==5) shift=2;
if(Kvart(Month())==2 && Month()==6) shift=3;
if(Kvart(Month())==3 && Month()==7) shift=1;
if(Kvart(Month())==3 && Month()==8) shift=2;
if(Kvart(Month())==3 && Month()==9) shift=3;
if(Kvart(Month())==4 && Month()==10) shift=1;
if(Kvart(Month())==4 && Month()==11) shift=2;
if(Kvart(Month())==4 && Month()==12) shift=3;
return(shift);
}
void PutRect(string name,datetime t1,double p1,datetime t2,double p2,color clr)
{
ObjectDelete(0,name);
//--- создадим прямоугольник по заданным координатам
ObjectCreate(0,name,OBJ_RECTANGLE,0,t1,p1,t2,p2);
//--- установим цвет прямоугольника
ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль линий прямоугольника
ObjectSetInteger(0,name,OBJPROP_STYLE,1);
//--- установим толщину линий прямоугольника
ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
//--- включим (true) или отключим (false) режим заливки прямоугольника
ObjectSetInteger(0,name,OBJPROP_BACK,true);
//--- включим asdad
ObjectSetInteger(0,name, OBJPROP_SELECTABLE, false);
ObjectSetInteger(0,name, OBJPROP_HIDDEN, true);
}
void PutButton(string name,int x,int y,string text)
{
ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(0,name,OBJPROP_CORNER,2);
//--- установим текст
ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(0,name,OBJPROP_HIDDEN,0);
}
05 июля 2022
|
06 июля 2022
|
Комментарии (39)
17 Boris54 Сообщений: 756 - ПенSионер
34 AM2 Сообщений: 15886 - Андрей
Спасибо
9 lafler356 Автор Сообщений: 305
Что еще нужно?
16 ssg Сообщений: 817
А нужуно чтобы расчет был постоянно за 5 месяцев, т.е хай(последних 5 кверталов) — лоу(последних 5 кверталов) / 5(последних 5 кверталов) Редактирован: 6 июля 2022, 11:20
9 lafler356 Автор Сообщений: 305
Правда похвально, что что-то пытаетесь сделать.Это конечно хорошо.
У в индикаторе Андрея, что он писал для вас, уже все есть.
Всего надо добавить одну маленькую строчку.
У вас есть атр каждого квартала.Да, да атр квартала это расстояние между полосками хай-лоу.Вот и складывайте их и затем делите на кол-во кварталов.
И все…
Для интереса проверьте значение индикатора потом с калькулятором.
16 ssg Сообщений: 817
это все было в индикаторе изначально, вы просто сумму всех поделали на кол-во периудов!!! и всё
тобишь сейчас известно только атр текущего кварталоа, а предыдущих нет!
9 lafler356 Автор Сообщений: 305
атр = (хай(предыдущих 5) -лоу(предыдущих 5)) / 5
9 lafler356 Автор Сообщений: 305
16 ssg Сообщений: 817
www.mql5.com/ru/code/7807
Ну, если у Вас есть свои любимые авторы...?
16 ssg Сообщений: 817
16 ssg Сообщений: 817
Я создал новую ветку, и упростил ТЗ
ТЫК Редактирован: 6 июля 2022, 21:15
9 lafler356 Автор Сообщений: 305
При периоде атр = 1, это как раз и будет разница между хай и лоу текущего периода.
Та строка которую я добавил в советнике в комментариях и показывает атр за последние 5 (input int count=5 кварталов.Закроется текущий квартал, индикатор пересчитает значения.Отбросит значение самого старого квартала и добавит значение только что закончившегося квартала.Текущий, нулевой квартал не учитывается.
16 ssg Сообщений: 817
Теперь же прошу Андрея, дописать его, дабы было известно и последних 5 кварталов
9 lafler356 Автор Сообщений: 305
Переведите.
16 ssg Сообщений: 817
ЧТобы посчитать предпоследнее значение нужно сделать тоже самое только со сдвигом. Как вы писали выше
Среднее значение — значение за N кварталов
9 lafler356 Автор Сообщений: 305
16 ssg Сообщений: 817
9 lafler356 Автор Сообщений: 305
16 ssg Сообщений: 817
далее, самая проблема это узнать АТР, чтобы узнать средний атр для текущего квартала(для текущего потому что в расчете будут 5 последних ((хай5-лоу5)+(хай4-лоу4)+(хай3-лоу3)+(хай2-лоу2)+(хай1-лоу1))(/5(так как мы складывали 5 (хай-лоу)) )
далее, как только мы узнали это, это как раз сумма (та что в индикаторе) её если поделить на Count тогда получится Средний АТр НО!!! Средний АТР ТЕКУЩЕГО квартала (почему текущего? потому что мы ближайшие 5хаи и 5лоу складывали
Проблема возникаем у меня в том что я не знаю как сделать цикл в цикле что ли))))
Смотрите, вот (если я правильно смог донести смысл) тогда мы знаем Средний атр квартала для текущего квартала, но нужно найти так же и остальные Средние атр кварталов для предыдущих кварталов(ПРОСТИТ ЗА ТАФТОЛОГИЮ) короче… Для предыдущего квартала так же нужно в рассчете использовать 5 предыдущих кварталов, но так как мы сместились, нам нужно использовать не:
((хай5-лоу5)+(хай4-лоу4)+(хай3-лоу3)+(хай2-лоу2)+(хай1-лоу1))/5
а уже:
((хай6-лоу6)+(хай5-лоу5)+(хай4-лоу4)+(хай3-лоу3)+(хай2-лоу2))(/5 Редактирован: 7 июля 2022, 16:09
7 divelse Сообщений: 152
В этом примере не видно, но если присмотреться тут на 6 месяц и за 7 месяц
т.е разинца в месяце Редактирован: 7 июля 2022, 16:10
7 divelse Сообщений: 152
7 divelse Сообщений: 152
В крайнем случае напишите индикатор где через iCustom или просто через iATR берите данные на месячном периоде и их обрабатывайте.
Вот набросал вам вариант получения нужных вам данных:
Если опять что-то не так, или не сможете использовать, тогда я «умываю руки».
Редактирован: 7 июля 2022, 17:22
16 ssg Сообщений: 817
7 divelse Сообщений: 152
16 ssg Сообщений: 817
9 lafler356 Автор Сообщений: 305
16 ssg Сообщений: 817
7 divelse Сообщений: 152
16 ssg Сообщений: 817
9 lafler356 Автор Сообщений: 305
Но неужели вам нужно знать квартальный АТР для торговли на самом деле?
Вы собираетесь открыть позицию, терпеть убытки и ждать пока цена не пройдет все значение АТР за квартал?
Я понимаю это работает на бирже, с акциями.Там нет такой волотильности и возможен более менее долгосрочный прогноз.Типа:«Зимой мазут и газ подорожают».
Но на форексе…
На мой взгляд намного продуктивнее и прибыльнее торговать используя текущую тенденцию на рынке.Только представьте какие колебания цены внутри месяца или квартала.Да даже дня.А вы открыли позицию, ждали целый квартал, глядели как у вас растет и падает прибыль и в итоге закрылись с убытком.
Но выбор конечно за вами.Деньги же ваши.
16 ssg Сообщений: 817
Ну… знаете за много лет в форексе я в плюс так и не вышел, но я и не говорил что это моя основная тактика, я для себя делаю индикатор который будет помогать мне в дальнейшем
Если я парвилньо поинмаю то тут сидят программисты, в основном начинающие, ибо если ктото из людей хочет чтобы Ему написали полноценный отличный одикатор или советник то они ошибаются, тут лишь наброски делают, они грубые. Вот я например начал делать индюк, и застопорился, и поэтому попросил Андрей допилить его же индюк
напишите пожалуйста вы понимаете что мне нужно или всё же я не смог донести и до вас ТЗ? Редактирован: 8 июля 2022, 20:20
9 lafler356 Автор Сообщений: 305
Я написал вам индикатор, который показывает в виде баров в подокне графика АТР за любое кол-во баров на любом таймфрейме.
Вы всегда можете взять эти данные для работы или для советника.Вам этого для торговли не хватает.
Сейчас какая то новая «узкая» задач. Мне не интересно и не нужно решать кому-то такие вещи.
Всю стратегию вы не озвучиваете ни здесь ни в привате. Наверное очень ей дорожите и поэтому храните в секрете. И это ваше законное право.
Но это вы обратились сюда за помощью.
А отвлекаться на написание каких то кусочков я не хочу и не буду.
Если хотите что-бы я попытался вам помощь озвучьте всю задачу (или здесь или в привате).
Ну, а нет, тогда я искренне желаю вам успехов и удачи.
16 ssg Сообщений: 817
9 lafler356 Автор Сообщений: 305
Или пусть советник их рисует.
К стати о восприятии: не знаю как до Урала, но у нас за Уралом в быту, однозначно, значение жаргонизма «дальняк» определяется как «отхожее место», «туалет», «сортир».
Видите сами какие мы разные.
Я использую в разговоре термины — долгосрочная торговля, долгосрочный прогноз.
Ну это так лирика.
Удачи.
16 ssg Сообщений: 817
Hi — atr = зона нижняя = lo
а
lo + atr = верхняя зона = Hi
16 ssg Сообщений: 817
9 lafler356 Автор Сообщений: 305
теперь то понятно?))) я ведь помоему уже писал, а вы опять мне что:
Hi — atr = зона нижняя = lo, нет он не будет равняться LO Редактирован: 12 июля 2022, 14:09
9 lafler356 Автор Сообщений: 305
17 Boris54 Сообщений: 756 - ПенSионер
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий