4xmeter Posted February 14, 2010 Report Share Posted February 14, 2010 8-) No :?: //+------------------------------------------------------------------+ //| PipsMark.mq4 | //| Ted Goulden | //| | // This indicator will mark the newest bar with an arrow if its high/Low // exceeds the input MA by the input number of pips. There is also // an alert feature that can be selected. // // // Input Parameters: // // InputMAVal - the number of periods to be used by the MA calculation. - the number of periods to be used by the MA calculation. // InputMAtype - the type of MA to be used for MA calculation. // PipSignal - the arrow appears if this number of pips above/below the MA is exceeded. // NoAlert - controls whether an audible alert is given. // // Modification History: // Oct 26 09 - Ted Goulden, Initial Version // Oct 28 09 - Ted Goulden, added comment string // Feb 07 10 - flyer415 , can now select other MA inputs //+------------------------------------------------------------------+ #property copyright "Ted Goulden" #property link "" #property indicator_chart_window #include <stdlib.mqh> //---- input parameters extern int InputMAval=10; extern int InputMAtype=1; // 0 for Simple, 1 for Exponential extern int InputMAshift=0; extern int InputMAprice=0; extern int PipSignal=20; extern bool NoAlert=true; double pips, pf = 1., ff = 1.; bool alertDone = false; int barStart = 0; string ArrowName1 = "", ArrowName2 = ""; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators pips = MarketInfo(Symbol(), MODE_TICKSIZE); if (Digits < 4) { pf = (0.01/pips); ff = (pips/0.001); } if (Digits > 3) { pf = (0.0001/pips); ff = (pips/0.00001); } //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- Comment (""); ObjectDelete(ArrowName1); ObjectDelete(ArrowName2); //---- return(0); } void SetArrow(string ArrowName, datetime ArrowTime, double Price, double ArrowCode, color ArrowColor, bool LimitArrow) { int err; // Note, if ArrowName was already used, the object will be replaced by current arrow. if (ObjectFind(ArrowName) != -1) ObjectDelete(ArrowName); if(!ObjectCreate(ArrowName, OBJ_ARROW, 0, ArrowTime, Price)) { err=GetLastError(); Print("error: can't create Arrow! code #",err," ",ErrorDescription(err)); return; } else { ObjectSet(ArrowName, OBJPROP_ARROWCODE, ArrowCode); ObjectSet(ArrowName, OBJPROP_COLOR, ArrowColor); ObjectSet(ArrowName, OBJPROP_WIDTH, 2); ObjectsRedraw(); } } // end function //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //---- if (barStart < Time[0]) //start of new bar { Comment (""); if (ArrowName1 > "") ObjectDelete(ArrowName1); if (ArrowName2 > "") ObjectDelete(ArrowName2); barStart = Time[0]; alertDone = false; } if (InputMAval > 0) double maVal = iMA(NULL, 0, InputMAval, InputMAshift, InputMAtype, InputMAprice, 0); ArrowName1 = TimeToStr(Time[0])+"lo"+Symbol(); ArrowName2 = TimeToStr(Time[0])+"hi"+Symbol(); double typicalPrice = (High[0] + Low[0] + Close[0])/3; double diff1 = MathRound((typicalPrice - maVal)/Point); double diff2 = MathRound((maVal - typicalPrice )/Point); if (( diff1 > PipSignal*pf) || ( diff2 > PipSignal*pf)) { if (diff2 > PipSignal*pf) { SetArrow(ArrowName1, Time[0], Low[0], 233, Purple, false); if (!NoAlert && !alertDone) Alert(Symbol(), " Pips diff : ", NormalizeDouble(diff2, 0)); Comment (" Price is below ", InputMAval, " moving average"); alertDone = true; } if (diff1 > PipSignal*pf) { SetArrow(ArrowName2, Time[0], High[0] + 15*Point, 234,DodgerBlue, false); if (!NoAlert && !alertDone) Alert(Symbol(), " Pips diff : ", NormalizeDouble(diff1, 0)); Comment (" Price is above ", InputMAval, " moving average"); alertDone = true; } } else Comment (""); //---- return(0); } //+------------------------------------------------------------------+ 8-) YusuFX 1 Quote Link to comment Share on other sites More sharing options...
4xmeter Posted February 15, 2010 Author Report Share Posted February 15, 2010 Re: Pipsmark V3 Indicator As you know, the indicator has as reference point the moving average; specified by the user and that determines its range by the number of pips selected. Could any programmer in this forum, (Williams, SEFC or Sharpeye) please 'fix it' in a way that the reference point could be any price (input) by the user instead of only the MA? >:) Thanks Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.