Светлана Каширкина
Светлана Каширкина
Freunde

Fügen Sie Freunde über ihre Profile oder über die Suche hinzu, und Sie können mit ihnen kommunizieren und ihre Aktivität auf der Webseite verfolgen.

Светлана Каширкина
Светлана Каширкина
//+------------------------------------------------------------------+
//| 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);
}
//+------------------------------------------------------------------+
Светлана Каширкина
Hat sich auf MQL5.community registriert