Coding help - page 675

 
traderduke:
You would use 1 2ma for overall trend and another for short term highs & lows re-entry.
Does that mean that there should be two volty channel indicators?
 

Hi coders.

 I need an help on this question: how to shift horizontally arrows signals of a simple ma cross indicator?

I tried this but it shift only on the left, i need even on the right.

 Thanks

 

//+------------------------------------------------------------------+
//|                                                   ma crosses.mq4 |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1  Blue
#property indicator_color2  Red
#property indicator_color3  LimeGreen
#property indicator_color4  Magenta

//
//
//
//
//

extern int    FastMa             = 13;
extern int    FastMaShift        = 0;
extern int    FastMAMethod       = MODE_EMA;
extern int    FastMAPrice        = PRICE_CLOSE;
extern int    SlowMa             = 68;
extern int    SlowMaShift        = 0;
extern int    SlowMAMethod       = MODE_SMA;
extern int    SlowMAPrice        = PRICE_CLOSE;
extern bool   ShowMaLines        = true;

extern string note               = "turn on Alert = true; turn off = false";
extern bool   alertsOn           = true;
extern bool   alertsOnCurrent    = true;
extern bool   alertsMessage      = true;
extern bool   alertsSound        = true;
extern bool   alertsEmail        = false;
extern string soundfile          = "alert2.wav";

extern string note7              = "Arrow Type";
extern string note8              = "0=default,1=Thick,2=Thin,3=Hollow";
extern string note9              = "4=Round,5=Fractal,6=Diagonal Thin";
extern string note10             = "7=Diagonal Thick,8=Diagonal Hollow";
extern string note11             = "9=Thumb,10=Finger";
extern int    ArrowType          = 2;
extern int    arrowthickness     = 2;
extern double arrowsDisplacement = 2.0;
extern int    arrowHshift        = 0;

//
//
//
//
//

double CrossUp[];
double CrossDn[];
double fastMA[];
double slowMA[];
double trend[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
{
   IndicatorBuffers(5);   
   
   if (ArrowType == 0) {
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0,DRAW_ARROW,0,arrowthickness); SetIndexArrow(0,119);
   SetIndexBuffer(1, CrossDn );  SetIndexStyle(1,DRAW_ARROW,0,arrowthickness); SetIndexArrow(1,119);
   }
   if (ArrowType == 1) {
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 233);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 234);
   }
   else if (ArrowType == 2) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 225);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 226);
   }
   else if (ArrowType == 3) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 241);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 242);
   }
   else if (ArrowType == 4) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 221);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 222);
   }
   else if (ArrowType == 5) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 217);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 218);
   }
   else if (ArrowType == 6) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 228);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 230);
   }
   else if (ArrowType == 7) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 236);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 238);
   }
   else if (ArrowType == 8) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 246);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 248);
   }
   else if (ArrowType == 9) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 67);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 68);
   }
   else if (ArrowType == 10) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 71);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 72);
   }
   SetIndexBuffer(2, fastMA);
   SetIndexBuffer(3, slowMA);
   SetIndexBuffer(4, trend);
   
   if (ShowMaLines)
   {
     SetIndexStyle(2,DRAW_LINE); 
     SetIndexStyle(3,DRAW_LINE); 
   }
   else
   {
     SetIndexStyle(2,DRAW_NONE);
     SetIndexStyle(3,DRAW_NONE);
   }       
   
return(0);
}

//
//
//
//
//

int deinit() {  return(0); }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//

int start() {
   int counted_bars=IndicatorCounted();
   int i,limit;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
         limit = MathMin(Bars-counted_bars,Bars-1);
         
   //
   //
   //
   //
   //
            
   for(i=limit; i>=0; i--)
   {
      fastMA[i]  = iMA(NULL,0,FastMa,FastMaShift,FastMAMethod,FastMAPrice,i);
      slowMA[i]  = iMA(NULL,0,SlowMa,SlowMaShift,SlowMAMethod,SlowMAPrice,i);
      double gap = iATR(NULL,0,20,i); 
      
      trend[i] = trend[i+1];
         if (fastMA[i]>slowMA[i]) trend[i] = 1;
         if (fastMA[i]<slowMA[i]) trend[i] =-1;

         //
         //
         //
         //
         //
      
         CrossUp[i] = EMPTY_VALUE;
         CrossDn[i] = EMPTY_VALUE;
         if (trend[i]!= trend[i+1])
         if (trend[i] == 1)
               CrossUp[i+arrowHshift] = Low[i]  - arrowsDisplacement * gap;
         else  CrossDn[i+arrowHshift] = High[i] + arrowsDisplacement * gap; 
         }
         
         if (alertsOn)
         {
         if (alertsOnCurrent)
              int whichBar = 0;
         else     whichBar = 1;

         //
         //
         //
         //
         //
         
         if (trend[whichBar] != trend[whichBar+1])
         if (trend[whichBar] == 1)
               doAlert("uptrend");
         else  doAlert("downtrend");       
   }
   
   return(0);
}
//+------------------------------------------------------------------+


void doAlert(string doWhat)
{
   static string   previousAlert="nothing";
   static datetime previousTime;
   string message;
   
      if (previousAlert != doWhat || previousTime != Time[0]) {
          previousAlert  = doWhat;
          previousTime   = Time[0];

          //
          //
          //
          //
          //

          message =  StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," ma cross ",doWhat);
             if (alertsMessage) Alert(message);
             if (alertsEmail)   SendMail(StringConcatenate(Symbol()," ma cross "),message);
             if (alertsSound)   PlaySound(soundfile);
      }
}

 
thefxpros:

Hi coders.

 I need an help on this question: how to shift horizontally arrows signals of a simple ma cross indicator?

I tried this but it shift only on the left, i need even on the right.

 Thanks

 

Did you try shifting the buffer instead of shifting the single value

Something like :

   SetIndexShift(0,arrowHshift);
   SetIndexShift(1,arrowHshift);

And then revert these lines to have no shift at all

//
// instead of 
//


         if (trend[i] == 1)
               CrossUp[i+arrowHshift] = Low[i]  - arrowsDisplacement * gap;
         else  CrossDn[i+arrowHshift] = High[i] + arrowsDisplacement * gap; 

//
// it has to be
//

         if (trend[i] == 1)
               CrossUp[i] = Low[i]  - arrowsDisplacement * gap;
         else  CrossDn[i] = High[i] + arrowsDisplacement * gap; 
 
thefxpros:

Hi coders.

 I need an help on this question: how to shift horizontally arrows signals of a simple ma cross indicator?

I tried this but it shift only on the left, i need even on the right.

 Thanks

 

PS: to shift the values now you have to use + values to shift the arrows to the right and - values to shift the values to the left (attaching the test code and it works OK for any case of shifting the arrows - left or right)

Files:
_test.mq4  8 kb
 
mladen:
Does that mean that there should be two volty channel indicators?

mladen

Sorry for not answering sooner, I was hopping to come back with a solution to the indicator question but that didn't happen

Yes, that's correct. sorry for the misunderstanding. I was answering steven about the 2MA indicator. I was unable to use the existing indicator for both entry & reentry as MR Tools did for the PrCh indicator, though my EA could never get the reentry correct, It like swing at smoke.

Anyway I can do it in the EA with 2 voltys so no need to create this indicator.  


Thanks for the help

Ray

 
pls can u help me code this indicator to EA I only want it to trade one candle when the arrow appear and close it when the candle close pls u can make it option i need it
 

Hello.

 

I´m trying to make an alert based on shved supply - demand indicator in accordance with stochastic crossover. I am informed that this indicator can be used to crate EA´s since it stores info in buffers however i am not super confident reading and understanding mql4 yet and has no mmore then 2-3 month of experimentin time. 

 

Therefore i hope someone out there could help me write the iCustom line to check wether the price is within zoene or not.

 

//+------------------------------------------------------------------+
//|                                              Indicator: chan.mq4 |
//|                                       Created with EABuilder.com |
//|                                             http://eabuilder.com |
//+------------------------------------------------------------------+
#property copyright "Created with EABuilder.com"
#property link      "http://eabuilder.com"
#property version   "1.00"
#property description ""

#include <stdlib.mqh>
#include <stderror.mqh>

//--- indicator settings
#property indicator_chart_window
#property indicator_buffers 2

#property indicator_type1 DRAW_ARROW
#property indicator_width1 5
#property indicator_color1 0xFFAA00
#property indicator_label1 "Buy"

#property indicator_type2 DRAW_ARROW
#property indicator_width2 5
#property indicator_color2 0x1A00FF
#property indicator_label2 "Sell"

//--- indicator buffers
double Buffer1[];
double Buffer2[];

double myPoint; //initialized in OnInit

void myAlert(string type, string message)
  {
   if(type == "print")
      Print(message);
   else if(type == "error")
     {
      Print(type+" | chan @ "+Symbol()+","+Period()+" | "+message);
     }
   else if(type == "order")
     {
     }
   else if(type == "modify")
     {
     }
  }

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {   
   IndicatorBuffers(2);
   SetIndexBuffer(0, Buffer1);
   SetIndexEmptyValue(0, 0);
   SetIndexArrow(0, 241);
   SetIndexBuffer(1, Buffer2);
   SetIndexEmptyValue(1, 0);
   SetIndexArrow(1, 242);
   //initialize myPoint
   myPoint = Point();
   if(Digits() == 5 || Digits() == 3)
     {
      myPoint *= 10;
     }
   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[])
  {
   int limit = rates_total - prev_calculated;
   //--- counting from 0 to rates_total
   ArraySetAsSeries(Buffer1, true);
   ArraySetAsSeries(Buffer2, true);
   //--- initial zero
   if(prev_calculated < 1)
     {
      ArrayInitialize(Buffer1, 0);
      ArrayInitialize(Buffer2, 0);
     }
   else
      limit++;
   
   //--- main loop
   for(int i = limit-1; i >= 0; i--)
     {
      if (i >= MathMin(5000-1, rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation   
      //Indicator Buffer 1
      if(iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i) < 20
      && iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i+1) > 20 //Stochastic Oscillator crosses below fixed value
          !!!!!  && iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", i ***************** check if price is in upper zone
      )
        {
         Buffer1[i] = Low[i]; //Set indicator value at Candlestick Low
        }
      else
        {
         Buffer1[i] = 0;
        }
      //Indicator Buffer 2
      if(iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i) > 80
      && iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i+1) < 80 //Stochastic Oscillator crosses above fixed value
           !!!! && iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", i ***************  check if price is in lower zone
      )
        {
         Buffer2[i] = High[i]; //Set indicator value at Candlestick High
        }
      else
        {
         Buffer2[i] = 0;
        }
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+

 

 I dont expect anyone to invest time in helping me out, but if i dont post i dont have any chances at all, so I tought id give it a try.

 

Peace and love fellow traders 

 
NWFstudent:

Hello.

 

I´m trying to make an alert based on shved supply - demand indicator in accordance with stochastic crossover. I am informed that this indicator can be used to crate EA´s since it stores info in buffers however i am not super confident reading and understanding mql4 yet and has no mmore then 2-3 month of experimentin time. 

 

Therefore i hope someone out there could help me write the iCustom line to check wether the price is within zoene or not.

 

 

 I dont expect anyone to invest time in helping me out, but if i dont post i dont have any chances at all, so I tought id give it a try.

 

Peace and love fellow traders 

Do something like this (check the comments too)

   //
   //
   // checking if the price is withing the lower zone
   //
   //
   
   if (Close[i] <= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 6,i) &&
       Close[i] >= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 7,i))
   //
   //
   // checking if the price is withing the upper zone
   //
   //
   
   if (Close[i] <= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 4,i) &&
       Close[i] >= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 5,i))
       
   //
   //
   // PS: that indicator stores values only for current bar in the buffers, so it works only for i==0
   //
   //
   //       
 
mladen:

Do something like this (check the comments too)

Thank you, you must be the kindest administrator of any  page. Your work is so apperciated.

 

Take care. 

 
dotmund:
pls can u help me code this indicator to EA I only want it to trade one candle when the arrow appear and close it when the candle close pls u can make it option i need it

pls help me out

Reason: