high[iHighest]

 

hi

 i wrote a very simple indicator

but it dose not  work 

//+------------------------------------------------------------------+
//|                                               Dive-sample001.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 clrBlue
double Signal1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
    SetIndexBuffer(0,Signal1);    
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3);
   IndicatorShortName("h200");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
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 Counted_bars=prev_calculated;
 for (int i= rates_total-Counted_bars-1; i>=0; i--)
   Signal1[i]=NormalizeDouble(High[iHighest(Symbol(),PERIOD_H4,MODE_HIGH,10,i+1)],5);
   
 }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Seyedmasoud Hashemi:

hi

 i wrote a very simple indicator

but it dose not  work 

you need to use iBarShift to get shift value of the H4 Period. right now you're using the shift of the chart period which may differ

Documentation on MQL5: Constants, Enumerations and Structures / Chart Constants / Chart Timeframes
Documentation on MQL5: Constants, Enumerations and Structures / Chart Constants / Chart Timeframes
  • www.mql5.com
All predefined timeframes of charts have unique identifiers. The PERIOD_CURRENT identifier means the current period of a chart, at which a mql5-program is running.
 
In future please post in the correct section
I will move this topic to the MQL4 and Metatrader 4 section.
 
  1.  for (int i= rates_total-Counted_bars-1; i>=0; i--)
       Signal1[i]=NormalizeDouble(High[iHighest(Symbol(),PERIOD_H4,MODE_HIGH,10,i+1)],5);
       
     }
    //--- return value of prev_calculated for next call
       return(rates_total);
    After the first run you return rates_total (Bars). Therefor on all subsequent runs your for loop is i=rates_total-rates_total-1=-1, i>=0==FALSE and your loop never runs again.

  2. Signal1[i]=NormalizeDouble(High[iHighest(Symbol(),PERIOD_H4,MODE_HIGH,10,i+1)],5);
    You are mixing apples and oranges.

  3. You used NormalizeDouble, It's use is usually wrong, as it is in your case.
    1. Floating point has infinite number of decimals, it's your not understanding floating point and that some numbers can't be represented exactly. (like 1/10.)
                Double-precision floating-point format - Wikipedia, the free encyclopedia

      See also The == operand. - MQL4 programming forum

    2. Print out your values to the precision you want with DoubleToString - Conversion Functions - MQL4 Reference.

    3. SL/TP (stops) need to be normalized to tick size (not Point) — code fails on metals. (On 5Digit Broker Stops are only allowed to be placed on full pip values. How to find out in mql? - MQL4 programming forum) and abide by the limits Requirements and Limitations in Making Trades - Appendixes - MQL4 Tutorial and that requires understanding floating point equality Can price != price ? - MQL4 programming forum

    4. Open price for pending orders need to be adjusted. On Currencies, Point == TickSize, so you will get the same answer, but it won't work on Metals. So do it right: Trailing Bar Entry EA - MQL4 programming forum or Bid/Ask: (No Need) to use NormalizeDouble in OrderSend - MQL4 programming forum

    5. Lot size must also be adjusted to a multiple of LotStep and check against min and max. If that is not a power of 1/10 then NormalizeDouble is wrong. Do it right.

    6. MathRound() and NormalizeDouble() are rounding in a different way. Make it explicit.
                MT4:NormalizeDouble - MQL5 programming forum
                How to Normalize - Expert Advisors and Automated Trading - MQL5 programming forum

    7. Prices you get from the terminal are already normalized.

    8. PIP, Point, or Tick are all different in general.
                What is a TICK? - MQL4 programming forum