Hi,
What is this Indy ? Holy Grail ! Don't repaint
Santé
jf
What is this Indy ? Holy Grail ! Don't repaint
Santé
jf
Attached File(s)
Histo type indy for mtf ma 1 reply
Add Email Alert to this CCI Crossover indy? 0 replies
basket Indy 4 replies
Ema cross based indy 0 replies
Script/Indy-cr8 word (H L ..) 6 replies
DislikedOk, I don't know how this indy was built, programmed. I am not competent to judge, to analyze. But I have 15 years of Forex experience. I did not see this indicator repaint. It is excellent. Hence my expression: we are close to the Holy Grail In short, it deserves serious attention! Bonne journée jf {image}Ignored
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 CLR_NONE
#property indicator_color2 CLR_NONE
#property indicator_color3 Lime
#property indicator_color4 Yellow
bool UseSoundBuy=false;
bool AlertSoundBuy=false;
bool UseSoundSell=false;
bool AlertSoundSell=false;
string SoundFileBuy ="tada.wav";
string SoundFileSell="email.wav";
bool SendMailPossible = false;
int SIGNAL_BAR= 1;
bool SoundBuy = False;
bool SoundSell = False;
int g_period_76 = 5;
int g_period_80 = 21;
int g_period_84 = 17;
bool gi_88 = TRUE;
double g_ibuf_92[];
double g_ibuf_96[];
double g_ibuf_100[];
double g_ibuf_104[];
int gi_108 = 0;
int gi_112 = 0;
double gd_116 = 0.0;
double gd_unused_124 = 0.0;
int init() {
SetIndexStyle(0, DRAW_NONE);
SetIndexBuffer(0, g_ibuf_92);
SetIndexStyle(1, DRAW_NONE, STYLE_DASH, 3);
SetIndexBuffer(1, g_ibuf_96);
SetIndexStyle(2, DRAW_ARROW, STYLE_DASH, 3);
SetIndexArrow(2, 233);
SetIndexBuffer(2, g_ibuf_100);
SetIndexEmptyValue(2, 0.0);
SetIndexStyle(3, DRAW_ARROW, STYLE_DASH, 3);
SetIndexArrow(3, 234);
SetIndexBuffer(3, g_ibuf_104);
SetIndexEmptyValue(3, 0.0);
return (0);
}
int deinit() {
ObjectsDeleteAll(0, OBJ_ARROW);
return (0);
}
int start() {
int li_4 = IndicatorCounted();
double l_irsi_8 = 0;
bool li_16 = FALSE;
double l_price_20 = 0;
if (li_4 < 0) return (-1);
if (li_4 > 0) li_4--;
int li_0 = Bars - li_4;
for (int li_28 = 0; li_28 < li_0; li_28++) {
g_ibuf_92[li_28] = iMA(NULL, 0, g_period_76, 0, MODE_EMA, PRICE_CLOSE, li_28);
g_ibuf_96[li_28] = iMA(NULL, 0, g_period_80, 0, MODE_EMA, PRICE_CLOSE, li_28);
l_irsi_8 = iRSI(NULL, 0, g_period_84, PRICE_CLOSE, li_28);
gd_116 = g_ibuf_92[li_28] - g_ibuf_96[li_28];
if (gd_116 > 0.0 && l_irsi_8 > 50.0) gi_108 = 1;
else
if (gd_116 < 0.0 && l_irsi_8 < 50.0) gi_108 = 2;
if (gi_108 == 1 && gi_112 == 2) {
g_ibuf_104[li_28 - 1] = High[li_28 - 1] - 5.0 * Point;
li_16 = TRUE;
l_price_20 = Ask;
} else {
if (gi_108 == 2 && gi_112 == 1) {
g_ibuf_100[li_28 - 1] = Low[li_28 - 1] - 5.0 * Point;
li_16 = TRUE;
l_price_20 = Bid;
}
}
gi_112 = gi_108;
gd_unused_124 = gd_116;
}
if (gi_88 && li_16) {
// PlaySound("alert2.wav");
// if (gi_112 == 1) MessageBox("Entry point: buy at " + l_price_20 + "!!", "Entry Point", 0);
// else
// if (gi_112 == 2) MessageBox("Entry point: sell at " + l_price_20 + "!!", "Entry Point", 0);
li_16 = FALSE;
}
RefreshRates();
//+------------------------------------------------------------------+
string message = StringConcatenate("#Chaos Entry (", Symbol(), ", ", Period(), ") - BUY!!!" ,"-" ,TimeToStr(TimeLocal(),TIME_SECONDS));
//SendNotification("BUY "+Symbol());
string message2 = StringConcatenate("#Chaos Entry (", Symbol(), ", ", Period(), ") - SELL!!!","-" ,TimeToStr(TimeLocal(),TIME_SECONDS));
//SendNotification("SELL "+Symbol());
if (g_ibuf_100[SIGNAL_BAR] != EMPTY_VALUE && g_ibuf_100[SIGNAL_BAR] != 0 && SoundBuy)
{
SoundBuy = False;
if (UseSoundBuy) PlaySound (SoundFileBuy);
if(AlertSoundBuy){
Alert(message);
//SendNotification("BUY "+Symbol());
if (SendMailPossible) SendMail(Symbol(),message);
}
}
if (!SoundBuy && (g_ibuf_100[SIGNAL_BAR] == EMPTY_VALUE || g_ibuf_100[SIGNAL_BAR] == 0)) SoundBuy = True;
if (g_ibuf_104[SIGNAL_BAR] != EMPTY_VALUE && g_ibuf_104[SIGNAL_BAR] != 0 && SoundSell)
{
SoundSell = False;
if (UseSoundSell) PlaySound (SoundFileSell);
if(AlertSoundSell){
Alert(message2);
//SendNotification("SELL "+Symbol());
if (SendMailPossible) SendMail(Symbol(),message2);
}
}
if (!SoundSell && (g_ibuf_104[SIGNAL_BAR] == EMPTY_VALUE || g_ibuf_104[SIGNAL_BAR] == 0)) SoundSell = True;
return (0);
} bool UseSoundBuy=false; bool AlertSoundBuy=false; bool UseSoundSell=false; bool AlertSoundSell=false; string SoundFileBuy ="tada.wav"; string SoundFileSell="email.wav"; bool SendMailPossible = false; int SIGNAL_BAR= 1; bool SoundBuy = False; bool SoundSell = False;
int g_period_76 = 5; int g_period_80 = 21; int g_period_84 = 17; bool gi_88 = TRUE; double g_ibuf_92[]; double g_ibuf_96[]; double g_ibuf_100[]; double g_ibuf_104[]; int gi_108 = 0; int gi_112 = 0; double gd_116 = 0.0; double gd_unused_124 = 0.0;
Part III:
int init() {
SetIndexStyle(0, DRAW_NONE);
SetIndexBuffer(0, g_ibuf_92);
SetIndexStyle(1, DRAW_NONE, STYLE_DASH, 3);
SetIndexBuffer(1, g_ibuf_96);
SetIndexStyle(2, DRAW_ARROW, STYLE_DASH, 3);
SetIndexArrow(2, 233);
SetIndexBuffer(2, g_ibuf_100);
SetIndexEmptyValue(2, 0.0);
SetIndexStyle(3, DRAW_ARROW, STYLE_DASH, 3);
SetIndexArrow(3, 234);
SetIndexBuffer(3, g_ibuf_104);
SetIndexEmptyValue(3, 0.0);
return (0); int start() {
int li_4 = IndicatorCounted();
double l_irsi_8 = 0;
bool li_16 = FALSE;
double l_price_20 = 0;
if (li_4 < 0) return (-1);
if (li_4 > 0) li_4--;
int li_0 = Bars - li_4; for (int li_28 = 0; li_28 < li_0; li_28++) {
g_ibuf_92[li_28] = iMA(NULL, 0, g_period_76, 0, MODE_EMA, PRICE_CLOSE, li_28);
g_ibuf_96[li_28] = iMA(NULL, 0, g_period_80, 0, MODE_EMA, PRICE_CLOSE, li_28);
l_irsi_8 = iRSI(NULL, 0, g_period_84, PRICE_CLOSE, li_28);
gd_116 = g_ibuf_92[li_28] - g_ibuf_96[li_28];
if (gd_116 > 0.0 && l_irsi_8 > 50.0) gi_108 = 1;
else
if (gd_116 < 0.0 && l_irsi_8 < 50.0) gi_108 = 2; if (gi_108 == 1 && gi_112 == 2)
g_ibuf_104[li_28 - 1] = High[li_28 - 1] - 5.0 * Point;
li_16 = TRUE;
l_price_20 = Ask; } else {
if (gi_108 == 2 && gi_112 == 1) {
g_ibuf_100[li_28 - 1] = Low[li_28 - 1] - 5.0 * Point;
li_16 = TRUE;
l_price_20 = Bid;
}
}
[b]gi_112 = gi_108;[/b]
[b] gd_unused_124 = gd_116;[/b]
}
if (gi_88 && li_16) { if (gi_88 && li_16) {
// PlaySound("alert2.wav");
// if (gi_112 == 1) MessageBox("Entry point: buy at " + l_price_20 + "!!", "Entry Point", 0);
// else
// if (gi_112 == 2) MessageBox("Entry point: sell at " + l_price_20 + "!!", "Entry Point", 0);
li_16 = FALSE;
}
RefreshRates(); DislikedHey there members, can someone explain to me how this indicator works? I have some experience programming but based on how this indicator is written, I have problems understanding its process of generating a signal. It uses MAs and RSI, but when does it create a signal? If someone could explan to me what the basics are, that would be great. Here is the code: #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 CLR_NONE #property indicator_color2 CLR_NONE #property indicator_color3 Lime #property indicator_color4...Ignored
If anyone is interested in the result, let me know.
Until then, pip pip
DislikedThank you for taking the time to make a comment acetrader, after your comment I checked it and I guess the RSI is the main indicator to paint the arrow right away and the MAs are used for confirmation? Because looking at the chart there are candles where the crossover is not confirmed but the rsi is below/above 50. In the picture below the first signal (sell) was show even though the EMAs (5 and 21 as standard values) are not yet crossed. {image} Using it on live market data I witnessed that on one closed candle A signal was triggered and some hours...Ignored
DislikedSo far I understand this (please correct me if I am wrong): Part I: bool UseSoundBuy=false; bool AlertSoundBuy=false; bool UseSoundSell=false; bool AlertSoundSell=false; string SoundFileBuy ="tada.wav"; string SoundFileSell="email.wav"; bool SendMailPossible = false; int SIGNAL_BAR= 1; bool SoundBuy = False; bool SoundSell = False; ...This is just general inputs to give a sound or notification in case a new signal developed. Part II: int g_period_76 = 5; int g_period_80 = 21; int g_period_84 = 17; bool gi_88 = TRUE; double g_ibuf_92[]; double g_ibuf_96[];...Ignored
Disliked{quote} if (gi_108 == 1 && gi_112 == 2) --> if generated arrow is up and previous arrow is down .... g_ibuf_104[li_28 - 1] = High[li_28 - 1] - 5.0 * Point; this is anchor point of arrow, i.e 5 points from hi/lo.. but the arrow is placed at previous bar (bar-1). that makes the signals appear 1 bar earlier so it looks like fast/good signal if you trace backward in chart. So, if you trace back in chart, you should open position at opening bar of next 2 bars from the arrow.Ignored
DislikedSo far I understand this (please correct me if I am wrong): Part I: bool UseSoundBuy=false; bool AlertSoundBuy=false; bool UseSoundSell=false; bool AlertSoundSell=false; string SoundFileBuy ="tada.wav"; string SoundFileSell="email.wav"; bool SendMailPossible = false; int SIGNAL_BAR= 1; bool SoundBuy = False; bool SoundSell = False; ...This is just general inputs to give a sound or notification in case a new signal developed. Part II: int g_period_76 = 5; int g_period_80 = 21; int g_period_84 = 17; bool gi_88 = TRUE; double g_ibuf_92[]; double g_ibuf_96[];...Ignored
QuoteDislikedbut the arrow is placed at previous bar (bar-1). that makes the signals appear 1 bar earlier so it looks like fast/good signal if you trace backward in chart. So, if you trace back in chart, you should open position at opening bar of next 2 bars from the arrow.