//+------------------------------------------------------------------+ //| //| Ramdass - Conversion only //+------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 Green //---- input parameters extern int RISK = 3; extern int CountBars = 300; extern bool alerts = TRUE; int prev_time; //---- buffers double val1[]; double val2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(2); SetIndexStyle(0, DRAW_ARROW); SetIndexArrow(0, 234); SetIndexStyle(1, DRAW_ARROW); SetIndexArrow(1, 233); SetIndexBuffer(0, val1); SetIndexBuffer(1, val2); return (0); } //+------------------------------------------------------------------+ //| ASCTrend1sig | //+------------------------------------------------------------------+ int start() { if (CountBars >= 1000) CountBars = 950; SetIndexDrawBegin(0, Bars - CountBars + 11 + 1); SetIndexDrawBegin(1, Bars - CountBars + 11 + 1); int i, shift, counted_bars = IndicatorCounted(); int Counter,i1,value10,value11; double value1, x1, x2; double value2, value3; double TrueCount, Range, AvgRange, MRO1, MRO2; double Table_value2[1000]; value10 = RISK << 1 + 3; x1 = RISK + 67; x2 = 33 - RISK; value11 = value10; if (Bars <= 12) return (0); if (counted_bars < 12) { for (i = 1; i <= 0; i++) val1[CountBars - i] = 0.0; for (i = 1; i <= 0; i++) val2[CountBars - i] = 0.0; } for (shift = CountBars - 11 - 1; shift >= 0; shift--) { Counter = shift; Range = 0.0; AvgRange = 0.0; for (Counter = shift; Counter <= shift + 9; Counter++) AvgRange += MathAbs(High[Counter] - Low[Counter]); Range = AvgRange / 10.0; Counter = shift; TrueCount = 0; while (Counter < shift + 9 && TrueCount < 1.0) { if (MathAbs(Open[Counter] - (Close[Counter + 1])) >= 2.0 * Range) TrueCount += 1.0; Counter++; } if (TrueCount >= 1.0) MRO1 = Counter; else MRO1 = -1; Counter = shift; TrueCount = 0; while (Counter < shift + 6 && TrueCount < 1.0) { if (MathAbs(Close[Counter + 3] - Close[Counter]) >= 4.6 * Range) TrueCount += 1.0; Counter++; } if (TrueCount >= 1.0) MRO2 = Counter; else MRO2 = -1; if (MRO1 > -1.0) value11 = 3; else value11 = value10; if (MRO2 > -1.0) value11 = 4; else value11 = value10; value2 = 100 - MathAbs(iWPR(NULL, 0, value11, shift)); Table_value2[shift] = value2; val1[shift] = 0; val2[shift] = 0; value3 = 0; if (value2 < x2) { for (i1 = 1; Table_value2[shift + i1] >= x2 && Table_value2[shift + i1] <= x1; i1++) { } if (Table_value2[shift + i1] > x1) { value3 = High[shift] + Range / 2.0; val1[shift] = value3; } } if (value2 > x1) { for (i1 = 1; Table_value2[shift + i1] >= x2 && Table_value2[shift + i1] <= x1; i1++) { } if (Table_value2[shift + i1] < x2) { value3 = Low[shift] - Range / 2.0; val2[shift] = value3; } } } if (val2[1] > 0.0 && val2[1] < 10000.0) { if (alerts && prev_time != Time[0]) { Alert("Trendsig" + Symbol() + Period() + " : long signal @ " + DoubleToStr(Bid, Digits)); SendMail("Trendsig", Symbol() + Period() + " : long signal @ " + DoubleToStr(Bid, Digits)); prev_time = Time[0]; } } if (val1[1] > 0.0 && val1[1] < 10000.0) { if (alerts && prev_time != Time[0]) { Alert("Trendsig" + Symbol() + Period() + " : short signal @ " + DoubleToStr(Bid, Digits)); SendMail("Trendsig", Symbol() + Period() + " : short signal @ " + DoubleToStr(Bid, Digits)); prev_time = Time[0]; } } return (0); }