Светлана Каширкина
Светлана Каширкина
Arkadaşlar

Profillerinden veya arama yoluyla arkadaş ekleyerek, onlarla kolayca iletişim kurabilir ve sitede çevrimiçi olup olmadıklarını takip edebilirsiniz

Светлана Каширкина
Светлана Каширкина
//+------------------------------------------------------------------+
//| Dynamic RSI_mod.mq4 |
//| https://www.mql5.com/ru/users/romankiverin/publications |
//| https://t.me/RomanKiverin|
//+------------------------------------------------------------------+
#property version "1.0"
#property copyright "Copyright 2023, Roman Kiverin"
#property link "https://www.mql5.com/ru/users/romankiverin/publications"
#property strict

#property description "Dynamic RSI\nhttps://t.me/RomanKiverin"
#property indicator_separate_window

#property indicator_buffers 14

// --- settings
extern int Maxbar = 2000;

input double DZbuy = 0.1; // Buyers Dynamic Zone Probability
input double DZsell = 0.1; // Sellers Dynamic Zone Probability
input int PeriodRSI = 14; // Period RSI
input int LookBack = 80; // Look Back PeriodRSI
input int LevUpRSI = 70;
input int LevDnRSI = 30;
input int LevUpBand = 55;
input int LevDnBand = 45;
input color MidBandColor= clrDarkGoldenrod;
input color MaxColor = clrMagenta; // Sell Signall Color
input color MinColor = clrAqua; // Buy Signall Color
input color UpColor = clrDarkGray; // Up Line Color
input color BBandsColor = clrIndigo; // Middle Line Color
input color DnColor = clrDarkGray; // Down Line Color
input color RSIColor = clrDarkGreen; // RSI Line Color
input int Width = 1; // Width Line


//--- indicator buffers
double UpLineBuffer[];
double DnLineBuffer[];
double RSILineBuffer[];
double RSIValueBuffer[];
double MaxLineBuffer[];
double MinLineBuffer[];
double WMALineBuffer[];
double DeltaBuffer[];
double UpBuffer[];
double DnBuffer[];
double LineBuffer[];
double BandsMiBuf[];
double BandsUpBuf[];
double BandsLoBuf[];
//double UpSigBuf[];
//double DnSigBuf[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,RSILineBuffer);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,Width,RSIColor);
SetIndexEmptyValue(0,0);

SetIndexBuffer(1,DnLineBuffer);
SetIndexStyle(1,DRAW_NONE);//DRAW_LINE,STYLE_SOLID,Width,DnColor

SetIndexBuffer(2,WMALineBuffer);
SetIndexStyle(2,DRAW_NONE);//DRAW_LINE,STYLE_SOLID,Width,MiddleColor

SetIndexBuffer(3,UpLineBuffer);
SetIndexStyle(3,DRAW_NONE);//DRAW_LINE,STYLE_SOLID,Width,UpColor

SetIndexBuffer(4,MaxLineBuffer);
SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,Width,MaxColor);
SetIndexEmptyValue(4,0);

SetIndexBuffer(5,MinLineBuffer);
SetIndexStyle(5,DRAW_LINE,STYLE_SOLID,Width,MinColor);
SetIndexEmptyValue(5,0);

SetIndexBuffer(6,RSIValueBuffer);
SetIndexStyle(6,DRAW_NONE);

SetIndexBuffer(7,DeltaBuffer);
SetIndexStyle(7,DRAW_NONE);

SetIndexBuffer(8,UpBuffer);
SetIndexStyle(8,DRAW_NONE);

SetIndexBuffer(9,DnBuffer);
SetIndexStyle(9,DRAW_NONE);

SetIndexBuffer(10,LineBuffer);
SetIndexStyle(10,DRAW_NONE);

SetIndexBuffer(11,BandsMiBuf);
SetIndexStyle(11,DRAW_LINE,STYLE_SOLID,Width,MidBandColor);
SetIndexEmptyValue(11,0);

SetIndexBuffer(12,BandsUpBuf);
SetIndexStyle(12,DRAW_LINE,STYLE_SOLID,Width,BBandsColor);
SetIndexEmptyValue(12,0);

SetIndexBuffer(13,BandsLoBuf);
SetIndexStyle(13,DRAW_LINE,STYLE_SOLID,Width,BBandsColor);
SetIndexEmptyValue(13,0);

/*SetIndexBuffer(14,UpSigBuf);
SetIndexStyle(14,DRAW_HISTOGRAM,STYLE_SOLID,5,MaxColor);
SetIndexEmptyValue(14,0);

SetIndexBuffer(15,DnSigBuf);
SetIndexStyle(15,DRAW_HISTOGRAM,STYLE_SOLID,5,MinColor);
SetIndexEmptyValue(15,0);*/
//---
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[])
{
if (Maxbar > Bars) Maxbar = Bars;
for(int i = MathMin(rates_total - prev_calculated, Maxbar - LookBack - 5); i >= 0; i --)
{
RSIValueBuffer[i] = iRSI(NULL, 0, PeriodRSI, PRICE_CLOSE, i);

UpBuffer[i]=RSIValueBuffer[ArrayMaximum(RSIValueBuffer,LookBack,i)];
DnBuffer[i]=RSIValueBuffer[ArrayMinimum(RSIValueBuffer,LookBack,i)];
DeltaBuffer[i]=(UpBuffer[i]-DnBuffer[i]) / 2.0;
WMALineBuffer[i]=iMAOnArray(DeltaBuffer,0,PeriodRSI,0,MODE_LWMA,i) + iMAOnArray(DnBuffer,0,PeriodRSI,0,MODE_LWMA,i);
UpLineBuffer[i]=UpBuffer[i] - WMALineBuffer[i] * DZbuy;
DnLineBuffer[i]=DnBuffer[i] + WMALineBuffer[i] * DZsell;
LineBuffer[i]=(4 * RSIValueBuffer[i] + 3 * RSIValueBuffer[i+1] + 2 * RSIValueBuffer[i+2] + RSIValueBuffer[i+3]) / 10;
{
if(LineBuffer[i] > UpLineBuffer[i])
{
MaxLineBuffer[i] = LineBuffer[i];
RSILineBuffer[i + 1] = MaxLineBuffer[i + 1] = LineBuffer[i + 1];
MinLineBuffer[i + 1] = RSILineBuffer[i] = MinLineBuffer[i] = 0;
}
else
if(LineBuffer[i] < DnLineBuffer[i])
{
MinLineBuffer[i] = LineBuffer[i];
RSILineBuffer[i + 1] = MinLineBuffer[i + 1] = LineBuffer[i + 1];
MaxLineBuffer[i + 1] = MaxLineBuffer[i] = RSILineBuffer[i] = 0;
}
else
{
RSILineBuffer[i] = LineBuffer[i];
RSILineBuffer[i + 1] = LineBuffer[i + 1];
}
}
BandsMiBuf[i]=iBandsOnArray(RSILineBuffer,0,PeriodRSI,2,0,MODE_MAIN,i+1);
BandsUpBuf[i]=iBandsOnArray(RSILineBuffer,0,PeriodRSI,2,0,MODE_UPPER,i+1);
BandsLoBuf[i]=iBandsOnArray(RSILineBuffer,0,PeriodRSI,2,0,MODE_LOWER,i+1);

/* if(RSILineBuffer[i+1]>LevUpRSI) UpSigBuf[i+1]=(LevUpRSI-(LevUpRSI-1))+(RSILineBuffer[i+1]-LevUpRSI);
else UpSigBuf[i+1]=LevUpRSI-(LevUpRSI-1);
if(RSILineBuffer[i+1] else DnSigBuf[i+1]=0;*/
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Светлана Каширкина
MQL5.community'e kayıt oldu