//+------------------------------------------------------------------+ //| OzFX smD1 iSignals v4.mq4 | //| SwingMan | //| | //+------------------------------------------------------------------+ #property copyright "SwingMan" #property link "" //==================================================================== // HISTORY // v1 - Source Code = OzFX Daily Signals X-02RR // #property copyright "Copyright © 2008, DGC" // #property link "http://www.ozfx.com.au/" // = Ronald Raygun codes // v2 - Alert options for RegularCode and AESCode // - TickValue and MarginRequired // - Check ShiftEntry only =0 or =1 // v3 - no repaint version ... // v4 - signal alerts, swing signals //==================================================================== #property indicator_chart_window //---- extern inputs ------------------------------------------------- extern bool Show_RegularSignals = true; extern bool Show_AESSignals = true; extern bool Show_SwingSignals = true; //extern bool Set_FilterSMA = false; //extern int Period_FilterSMA = 200; //extern int ShiftEntry = 0; extern bool SendAlert_RegularCode = false; extern bool SendAlert_AESCode = false; extern bool SendAlert_SwingCode = false; extern bool Show_TickValueAndMargin = false; extern int Period_avg = 5; extern bool Show_BalanceLine = true; extern int Period_ATR = 21; //-------------------------------------------------------------------- #property indicator_buffers 8 #property indicator_color1 Blue // EntryLong 1 #property indicator_color2 Red // EntryShort 1 #property indicator_color3 Blue // EntryLong 2 #property indicator_color4 Red // EntryShort 2 #property indicator_color5 LimeGreen //Green // avg long #property indicator_color6 Crimson // avg short #property indicator_color7 Blue // EntryLong 3 #property indicator_color8 Red // EntryShort 3 //---- constants int Mode_avg = MODE_SMA; int Price_avg =PRICE_TYPICAL; int ShiftEntry = 0; //---- buffers double OzFX_RegularLong[], OzFX_RegularShort[]; double OzFX_AESLong[], OzFX_AESShort[]; double OzFX_SwingLong[], OzFX_SwingShort[]; double avg[], trend[], avgLong[], avgShort[]; //double avgFilter[]; //---- variables int iLastRegular, iLastAES; int oldRegularCode, oldAEScode, lastRegularAlert, lastAESAlert; double dOffset; int k; string IndicatorName; int iLastSwing, oldSwingCode, lastSwingAlert; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { if (ShiftEntry < 0 || ShiftEntry > 1) { Alert("Allowed value for ShiftEntry are only 0 or 1."); return(-1); } IndicatorName = "OzFX smD1 iSignals v4"; ShowResults(); //---- mavg ArraySetAsSeries(avg,true); ArraySetAsSeries(trend,true); // ArraySetAsSeries(avgFilter,true); //---- signals SetIndexBuffer(0, OzFX_RegularLong); SetIndexBuffer(1, OzFX_RegularShort); SetIndexBuffer(2, OzFX_AESLong); SetIndexBuffer(3, OzFX_AESShort); SetIndexBuffer(4, avgLong); SetIndexBuffer(5, avgShort); SetIndexBuffer(6, OzFX_SwingLong); SetIndexBuffer(7, OzFX_SwingShort); // regular signals if (Show_RegularSignals) { SetIndexStyle(0,DRAW_ARROW,EMPTY,2); SetIndexStyle(1,DRAW_ARROW,EMPTY,2); } else { SetIndexStyle(0,DRAW_NONE); SetIndexStyle(1,DRAW_NONE); } // AES signals if (Show_AESSignals) { SetIndexStyle(2,DRAW_ARROW,EMPTY,2); SetIndexStyle(3,DRAW_ARROW,EMPTY,2); } else { SetIndexStyle(2,DRAW_NONE); SetIndexStyle(3,DRAW_NONE); } // Swing signals if (Show_SwingSignals) { SetIndexStyle(6,DRAW_ARROW,EMPTY,0); SetIndexStyle(7,DRAW_ARROW,EMPTY,0); } else { SetIndexStyle(6,DRAW_NONE); SetIndexStyle(7,DRAW_NONE); } SetIndexArrow(0, 233); // regular SetIndexArrow(1, 234); SetIndexArrow(2, 241); // AES SetIndexArrow(3, 242); SetIndexArrow(6, 217); // Swing SetIndexArrow(7, 218); //---- mavg if (Show_BalanceLine) { SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,2); SetIndexStyle(5,DRAW_LINE,STYLE_SOLID,2); } else { SetIndexStyle(4,DRAW_NONE); SetIndexStyle(5,DRAW_NONE); } //---- labels SetIndexLabel(0, NULL); // regular SetIndexLabel(1, NULL); SetIndexLabel(2, NULL); // AES SetIndexLabel(3, NULL); SetIndexLabel(4, NULL); // BalanceLIne SetIndexLabel(5, NULL); SetIndexLabel(6, NULL); // Swing SetIndexLabel(7, NULL); //---- or /*SetIndexLabel(0, "LONG regular"); // regular SetIndexLabel(1, "SHORT regular"); SetIndexLabel(2, "LONG AES"); // AES SetIndexLabel(3, "SHORT AES"); if (Show_BalanceLine) { SetIndexLabel(4, "avgLong"); SetIndexLabel(5, "avgShort"); } else { SetIndexLabel(4, NULL); SetIndexLabel(5, NULL); }*/ //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { Comment(""); return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { if (ShiftEntry < 0 || ShiftEntry > 1) return(-1); ArrayResize(avg,Bars); ArrayResize(trend,Bars); // ArrayResize(avgFilter,Bars); int counted_bars=IndicatorCounted(); if(counted_bars < 0) return(-1); if(counted_bars > 0) counted_bars--; int limit=Bars-counted_bars; //---- //for (k = Bars-205; k >= 0; k --) for (k = limit-1; k >= 0; k--) { double dOffset = iATR(Symbol(),0,Period_ATR,k+1) * 0.40; // OZFX Filter // ################################################## //---------------------// // avgFilter[k] = iMA(Symbol(), 0, Period_FilterSMA, 0, MODE_SMA, PRICE_CLOSE, k); // OZFX REGULAR CODE // ############################################ //---------------------// iLastRegular = Get_OzFXRegularSignal(k); if (iLastRegular != 0) { //-- signal long if (iLastRegular != oldRegularCode && iLastRegular == 1) { // if (Set_FilterSMA && Open[k] > avgFilter[k]) OzFX_RegularLong[k] = Low[k] - dOffset; if (SendAlert_RegularCode && k == 0) { if (lastRegularAlert == -1 || lastRegularAlert == 0) { Send_TextAlert(1, "Regular"); lastRegularAlert = 1; } } } //-- signal short if (iLastRegular != oldRegularCode && iLastRegular ==-1) { // if (Set_FilterSMA && Open[k] < avgFilter[k]) OzFX_RegularShort[k] = High[k] + dOffset; if (SendAlert_RegularCode && k == 0) { if (lastRegularAlert == 1 || lastRegularAlert == 0) { Send_TextAlert(-1, "Regular"); lastRegularAlert = -1; } } } oldRegularCode = iLastRegular; } else { OzFX_RegularLong[k] = EMPTY_VALUE; OzFX_RegularShort[k] = EMPTY_VALUE; } // OZFX AES CODE // ################################################ //-----------------// iLastAES = Get_OzFXAESSignal(k); if (iLastAES != 0) { //-- signal long if (iLastAES != oldAEScode && iLastAES == 1) { // if (Set_FilterSMA && Open[k] > avgFilter[k]) OzFX_AESLong[k] = Low[k] - dOffset; if (SendAlert_AESCode && k == 0) { if (lastAESAlert == -1 || lastAESAlert == 0) { Send_TextAlert(1, "AES"); lastAESAlert = 1; } } } //-- signal short if (iLastAES != oldAEScode && iLastAES ==-1) { // if (Set_FilterSMA && Open[k] < avgFilter[k]) OzFX_AESShort[k] = High[k] + dOffset; if (SendAlert_AESCode && k == 0) { if (lastAESAlert == 1 || lastAESAlert == 0) { Send_TextAlert(-1, "AES"); lastAESAlert = -1; } } } oldAEScode = iLastAES; } else { OzFX_AESLong[k] = EMPTY_VALUE; OzFX_AESShort[k] = EMPTY_VALUE; } // OZFX Swing CODE // ############################################## //-----------------// iLastSwing = Get_OzFXSwingSignal(k); if (iLastSwing != 0) { //-- signal long if (iLastSwing != oldSwingCode && iLastSwing == 1) { // if (Set_FilterSMA && Open[k] > avgFilter[k]) OzFX_SwingLong[k] = Low[k] - dOffset + dOffset*0.5; if (SendAlert_SwingCode && k == 0) { if (lastSwingAlert == -1 || lastSwingAlert == 0) { Send_TextAlert(1, "Swing"); lastSwingAlert = 1; } } } //-- signal short if (iLastSwing != oldSwingCode && iLastSwing ==-1) { // if (Set_FilterSMA && Open[k] < avgFilter[k]) OzFX_SwingShort[k] = High[k] + dOffset - dOffset*0.5; if (SendAlert_SwingCode && k == 0) { if (lastSwingAlert == 1 || lastSwingAlert == 0) { Send_TextAlert(-1, "Swing"); lastSwingAlert = -1; } } } oldSwingCode = iLastSwing; } else { OzFX_SwingLong[k] = EMPTY_VALUE; OzFX_SwingShort[k] = EMPTY_VALUE; } //#################################################################### // average colored // ############################################### //-----------------// avg[k] = iMA(Symbol(), 0, Period_avg, 0, Mode_avg, Price_avg, k); trend[k] = trend[k+1]; if (avg[k]> avg[k+1]) trend[k] =1; if (avg[k]< avg[k+1]) trend[k] =-1; if (trend[k]>0) { avgLong[k] = avg[k]; if (trend[k+1]<0) avgLong[k+1]=avg[k+1]; avgShort[k] = EMPTY_VALUE; } else { if (trend[k]<0) { avgShort[k] = avg[k]; if (trend[k+1]>0) avgShort[k+1]=avg[k+1]; avgLong[k] = EMPTY_VALUE; } } } //---- return(0); } //+------------------------------------------------------------------+ int Get_OzFXRegularSignal(int i) { //-- Regular long // if (Set_FilterSMA && Open[i] > avgFilter[i]) { bool condAClong1 = iAC(Symbol(), 0, i + ShiftEntry) > 0; bool condAClong2 = iAC(Symbol(), 0, i + ShiftEntry) > iAC(Symbol(), 0, i + 1 + ShiftEntry); bool condSTlong1 = iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i + ShiftEntry) > 50; if (condAClong1 && condAClong2 && condSTlong1) return(1); // } //-- Regular short // if (Set_FilterSMA && Open[i] < avgFilter[i]) { bool condACshort1 = iAC(Symbol(), 0, i + ShiftEntry) < 0; bool condACshort2 = iAC(Symbol(), 0, i + ShiftEntry) < iAC(Symbol(), 0, i + 1 + ShiftEntry); bool condSTshort1 = iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i + ShiftEntry) < 50; if (condACshort1 && condACshort2 && condSTshort1) return(-1); // } return(0); } int Get_OzFXAESSignal(int i) { //-- AES long // if (Set_FilterSMA && Open[i] > avgFilter[i]) { bool condAClong1 = iAC(Symbol(), 0, i + ShiftEntry) > iAC(Symbol(), 0, i + 1 + ShiftEntry); bool condSTlong1 = iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i + ShiftEntry) > iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, i + ShiftEntry); if (condAClong1 && condSTlong1) return(1); // } //-- AES short // if (Set_FilterSMA && Open[i] < avgFilter[i]) { bool condACshort1 = iAC(Symbol(), 0, i + ShiftEntry) < iAC(Symbol(), 0, i + 1 + ShiftEntry); bool condSTshort1 = iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i + ShiftEntry) < iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, i + ShiftEntry); if (condACshort1 && condSTshort1) return(-1); // } return(0); } int Get_OzFXSwingSignal(int i) { //-- Swing long // if (Set_FilterSMA && Open[i] > avgFilter[i]) { bool condAClong1 = iMA(Symbol(), 0, Period_avg, 0, Mode_avg, Price_avg, i + ShiftEntry) > iMA(Symbol(), 0, Period_avg, 0, Mode_avg, Price_avg, i + 1+ ShiftEntry); bool condAClong2 = iAC(Symbol(), 0, i + ShiftEntry) > iAC(Symbol(), 0, i + 1 + ShiftEntry) && iAC(Symbol(), 0, i + 1 + ShiftEntry) > iAC(Symbol(), 0, i + 2 + ShiftEntry) && iAC(Symbol(), 0, i + 2 + ShiftEntry) > iAC(Symbol(), 0, i + 3 + ShiftEntry); bool condSTlong1 = iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i + ShiftEntry) > 50; if (condAClong1 && condAClong2 && condSTlong1) return(1); // } // Swing short // if (Set_FilterSMA && Open[i] < avgFilter[i]) { bool condACshort1 = iMA(Symbol(), 0, Period_avg, 0, Mode_avg, Price_avg, i + ShiftEntry) < iMA(Symbol(), 0, Period_avg, 0, Mode_avg, Price_avg, i + 1+ ShiftEntry); bool condACshort2 = iAC(Symbol(), 0, i + ShiftEntry) < iAC(Symbol(), 0, i + 1 + ShiftEntry) && iAC(Symbol(), 0, i + 1 + ShiftEntry) < iAC(Symbol(), 0, i + 2 + ShiftEntry) && iAC(Symbol(), 0, i + 2 + ShiftEntry) < iAC(Symbol(), 0, i + 3 + ShiftEntry); bool condSTshort1 = iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i + ShiftEntry) < 50; if (condACshort1 && condACshort2 && condSTshort1) return(-1); // } return(0); } void Send_TextAlert(int direction, string code) { string s1, s2; if (direction == 1) s1 = "LONG signal " + Symbol(); if (direction == -1) s1 = "SHORT signal " + Symbol(); if (code == "Regular") s2 = " (OzFX regular code v4 / " + TimeToStr(TimeCurrent()) + ")"; if (code == "AES") s2 = " (OzFX AES code v4 / " + TimeToStr(TimeCurrent()) + ")"; if (code == "Swing") s2 = " (OzFX Swing code v4 / " + TimeToStr(TimeCurrent()) + ")"; Alert(s1 + s2); } //-------------------------------------------------------------------- // Show Results //-------------------------------------------------------------------- void ShowResults() { string st = IndicatorName; if (Show_TickValueAndMargin) { st = st +"\n"; st = st + "*************************\n"; st = st + "TickValue = " + DoubleToStr(MarketInfo(Symbol(),MODE_TICKVALUE),2)+"\n"; st = st + "MarginRequired = " + DoubleToStr(MarketInfo(Symbol(),MODE_MARGINREQUIRED),0)+"\n"; st = st + "*************************"; } Comment(st); }
Sample
Analysis
Market Information Used:
Series array that contains the lowest prices of each bar
Series array that contains the highest prices of each bar
Indicator Curves created:
Implements a curve of type DRAW_ARROW
Implements a curve of type DRAW_NONE
Implements a curve of type DRAW_LINE
Indicators Used:
Indicator of the average true range
Moving average indicator
Bill Williams Accelerator/Decelerator oscillator
Stochastic oscillator
Custom Indicators Used:
Order Management characteristics:
Other Features:
It issuies visual alerts to the screen