Tipu Renko
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «tipu_renko.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Tipu Renko — это пользовательский индикатор для MetaTrader 4, реализующий отображение Renko-графиков. Индикатор строит кирпичи на основе изменения цены на заданное количество пунктов, позволяя визуализировать направление тренда без учёта временных интервалов.
Индикатор поддерживает два режима формирования кирпичей: по ценам закрытия или по диапазону высокого и низкого. Визуальное оформление настраивается через параметры цвета, стиля и толщины линий, а также через возможность заливки кирпичей.
Функциональность включает отрисовку прямоугольников в качестве кирпичей и стрелок при смене направления тренда. Индикатор отслеживает количество последовательных кирпичей в каждом направлении и предоставляет систему уведомлений — push-уведомления, звуковые и email-оповещения — при появлении сигналов на покупку или продажу.
Настройки программы
| Настройка | Описание |
|---|---|
| Box Mode (eRenkoMode) | Режим Renko — Определяет способ формирования кирпичей: по ценам закрытия или по диапазону высокого и низкого. |
| Renko Mark (eRenkoMark) | Маркировка Renko — Задаёт тип визуальной маркировки: без маркировки, прямоугольники-кирпичи или стрелки смены тренда. |
| Reko Size (iRenkoSize) | Размер кирпича — Размер кирпича в пунктах, определяющий минимальное изменение цены для построения нового кирпича. |
| Line Style (eRenkoStyle) | Стиль линии — Стиль линий, используемых для отображения кирпичей. |
| Line Width (iRenkoWidth) | Толщина линии — Толщина линий кирпичей в пунктах. |
| Up Color (cUpCandle) | Цвет восходящего — Цвет восходящих (бычьих) кирпичей. |
| Down Color (cDwnCandle) | Цвет нисходящего — Цвет нисходящих (медвежьих) кирпичей. |
| Fill Candles (bFill) | Заливка свечей — Включает или отключает заливку прямоугольников кирпичей соответствующим цветом. |
| Alert Mobile (bAlertM) | Уведомление на мобильное — Включает или отключает отправку push-уведомлений на мобильное устройство при появлении сигналов. |
| Alert Onscreen (bAlertS) | Уведомление на экран — Включает или отключает звуковые уведомления на графике при появлении сигналов. |
| Alert Email (bAlertE) | Уведомление по email — Включает или отключает отправку email-уведомлений при появлении сигналов на покупку или продажу. |
Поиск по коду файла
#property version "1.00"
#property strict
#property indicator_chart_window
#define PipsPoint Get_PipsPoint()
enum ENUM_RenkoMode
{
rClose = 0, //Close
rHighLow = 1, //High/Low
};
enum ENUM_RenkoMark
{
None=0,
Brick=1,
Arrows=2,
};
input ENUM_RenkoMode eRenkoMode = 0; //Box Mode
input ENUM_RenkoMark eRenkoMark = 1; //Renko Mark
input int iRenkoSize = 20; //Reko Size
input ENUM_LINE_STYLE eRenkoStyle = 0; //Line Style
input int iRenkoWidth = 1; //Line Width
input color cUpCandle = C'31,159,192'; //Up Color
input color cDwnCandle = C'230,77,69'; //Down Color
input bool bFill = true; //Fill Candles
input bool bAlertM = false; //Alert Mobile
input bool bAlertS = true; //Alert Onscreen
input bool bAlertE = false; //Alert Email
string short_name="tp_Renko";
string indicator_name="Tipu Renko";
int iLastTrend;
double dLowR=0,dHighR=0,dOpenR=0,dCloseR=0;
datetime dtPrevTime=0;
static datetime prevTime;
double dBuyCounter=0.0,dSellCounter=0.0;
double dTrendBuffer[],dSignalBuffer[],dBuyCountBuffer[],dSellCountBuffer[];
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
DeleteBricks();
}
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[])
{
// код доступен только после оплаты
}
int limit;
string sMsg,sSubject;
bool bBuy=false,bSell=false;
ArraySetAsSeries(dTrendBuffer,true);
ArraySetAsSeries(dSignalBuffer,true);
ArraySetAsSeries(dBuyCountBuffer,true);
ArraySetAsSeries(dSellCountBuffer,true);
if(prev_calculated < 0) return(0);
if(prev_calculated>0) limit=rates_total-prev_calculated+1; //non-repainting should give -2 if prev_cal is 0, meaning two candles ahead
else
{
limit=rates_total-1;
dLowR = low[limit];
dOpenR = open[limit];
dtPrevTime=time[limit];
}
for(int i=limit-1; i>=0; i--)
{
double dcheck=iRenkoSize*PipsPoint;
switch(eRenkoMode)
{
case 0:
bBuy=close[i]>=dOpenR+dcheck;
bSell=close[i]<=dOpenR-dcheck;
break;
case 1:
bBuy=high[i]>=dOpenR+dcheck;
bSell=low[i]<=dOpenR-dcheck;
break;
}
if(bBuy)
{
dCloseR=NormalizeDouble(dOpenR,_Digits)+dcheck;
if(ObjectFind(0,short_name+(string)time[i])<0 && eRenkoMark==1)
RectangleCreate(0,short_name+(string)time[i],0,dtPrevTime,dOpenR,time[i],dCloseR,cUpCandle,eRenkoStyle,iRenkoWidth,bFill,false,false,false,0);
dOpenR=dCloseR;
dtPrevTime=time[i];
dSellCounter=0; dSellCountBuffer[i]=dSellCounter;
if(dTrendBuffer[i+1]!=OP_BUY)
{
dSignalBuffer[i]=OP_BUY;
dTrendBuffer[i]=dSignalBuffer[i];
dBuyCounter=1; dBuyCountBuffer[i]=dBuyCounter;
if(ObjectFind(0,short_name+(string)time[i])<0 && eRenkoMark==2)
ArrowCreate(0,short_name+(string)time[i],0,time[i],low[i],233,ANCHOR_TOP,cUpCandle,eRenkoStyle,iRenkoWidth,false,false,false);
}
else
{dBuyCounter++; dBuyCountBuffer[i]=dBuyCounter;}
}
if(bSell)
{
dCloseR=NormalizeDouble(dOpenR,_Digits)-dcheck;
if(ObjectFind(0,short_name+(string)time[i])<0 && eRenkoMark==1)
RectangleCreate(0,short_name+(string)time[i],0,dtPrevTime,dOpenR,time[i],dCloseR,cDwnCandle,eRenkoStyle,iRenkoWidth,bFill,false,false,false,0);
dOpenR=dCloseR;
dtPrevTime=time[i];
dBuyCounter=0; dBuyCountBuffer[i]=dBuyCounter;
if(dTrendBuffer[i+1]!=OP_SELL)
{
dSignalBuffer[i]=OP_SELL;
dTrendBuffer[i]=dSignalBuffer[i];
dSellCounter=1; dSellCountBuffer[i]=dSellCounter;
if(ObjectFind(0,short_name+(string)time[i])<0 && eRenkoMark==2)
ArrowCreate(0,short_name+(string)time[i],0,time[i],high[i],234,ANCHOR_BOTTOM,cDwnCandle,eRenkoStyle,iRenkoWidth,false,false,false);
}
else
{dSellCounter++; dSellCountBuffer[i]=dSellCounter;}
}
if(dTrendBuffer[i]!=OP_BUY && dTrendBuffer[i]!=OP_SELL)
dTrendBuffer[i]=dTrendBuffer[i+1];
if(dBuyCountBuffer[i] == EMPTY_VALUE)
dBuyCountBuffer[i] = dBuyCountBuffer[i+1];
if(dSellCountBuffer[i] == EMPTY_VALUE)
dSellCountBuffer[i] = dSellCountBuffer[i+1];
}
if(dSignalBuffer[0]==OP_BUY)
{
sMsg=indicator_name+" "+_Symbol+"\n "+"Buy Alert: "+
"\n "+"Time: "+TimeToString(TimeCurrent(),TIME_DATE|TIME_MINUTES);
sSubject=indicator_name+" "+_Symbol+" "+"Buy Alert";
SendAlert(bAlertM,bAlertS,bAlertE,sMsg,sSubject);
dTrendBuffer[0]=OP_BUY;
}
if(dSignalBПоказано первые 50% кода (символов: 7994)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.