Author: Copyright � 2004, MetaQuotes Software Corp.
basketEUR

This script is designed for the MetaTrader platform to provide a specialized visual analysis of currency movements. Unlike standard charts that show the price of a single currency pair, this tool creates a custom "Heiken Ashi" style visualization based on a weighted average of multiple European and Japanese currency pairs.

Core Functionality

The primary purpose of this script is to smooth out market noise by aggregating data from four specific currency pairs: EURUSD, EURGBP, EURCHF, and EURJPY. By combining these sources, the indicator seeks to provide a more comprehensive view of the Euro's strength or movement relative to a basket of diverse currencies.

How the Logic Works

The script processes the market data using the following logical steps:

  • Data Aggregation: Instead of looking at one price point, the tool pulls the "Open," "High," "Low," and "Close" prices for four different pairs simultaneously.
  • Weighted Calculation: Not all currencies are treated equally in this calculation. The logic applies a specific multiplier to the EURGBP data (doubling its influence) before averaging it with the other three pairs. This suggests a strategic preference for the Euro/British Pound relationship within the overall basket.
  • Custom Price Mapping: The script calculates four unique values for every point in time:
    • A synthesized High price.
    • A synthesized Low price.
    • A calculated Opening price.
    • A calculated Closing price.
  • Visual Output: These four values are then plotted on a separate window in your trading platform. It uses specific colors (Royal Blue and Crimson) to draw lines that represent the boundaries of these synthesized prices.

User Experience

For the trader, this means you aren't looking at raw, jagged price action. Instead, you are viewing a smoothed, composite trend. By using this logic, the indicator aims to highlight the underlying momentum of the Euro across a broader range of markets, making it easier to identify general trends while filtering out the "jitter" often found in individual currency pairs.

Price Data Components
Series array that contains open prices of each barSeries array that contains close prices for each barSeries array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
Miscellaneous
Implements a curve of type %1
11 Views
0 Downloads
0 Favorites
basketEUR
//+------------------------------------------------------------------+
//|                                                HeikenAshi_DM.mq4 |
//|                      Copyright c 2004, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//|                                        revised, Dean Malone      |
//+------------------------------------------------------------------+
//| For Heiken Ashi we recommend next chart settings ( press F8 or   |
//| select on menu 'Charts'->'Properties...'):                       |
//|  - On 'Color' Tab select 'Black' for 'Line Graph'                |
//|  - On 'Common' Tab disable 'Chart on Foreground' checkbox and    |
//|    select 'Line Chart' radiobutton                               |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//#property indicator_chart_window
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Crimson
#property indicator_color2 RoyalBlue
#property indicator_color3 Crimson
#property indicator_color4 RoyalBlue
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
//----
int ExtCountedBars=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//|------------------------------------------------------------------|
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE, 0, 1, RoyalBlue);
   SetIndexBuffer(0, ExtMapBuffer1);
   SetIndexLabel(0,"HA_0");                           //included "HA_0" Buffer Label for Data Window                        
   SetIndexStyle(1,DRAW_LINE, 0, 1, Crimson);
   SetIndexBuffer(1, ExtMapBuffer2);
   SetIndexLabel(1,"HA_1");                           //included "HA_1" Buffer Label for Data Window
   SetIndexStyle(2,DRAW_NONE, 0, 3, Crimson);
   SetIndexBuffer(2, ExtMapBuffer3);
   SetIndexLabel(2,"HA_Open");                        //included "HA_Open" Buffer Label for Data Window
   SetIndexStyle(3,DRAW_LINE, 0, 3, Lime);
   SetIndexBuffer(3, ExtMapBuffer4);
   SetIndexLabel(3,"HA_Close");                       //included "HA_Close" Buffer Label for Data Window
//----
   SetIndexDrawBegin(0,10);
   SetIndexDrawBegin(1,10);
   SetIndexDrawBegin(2,10);
   SetIndexDrawBegin(3,10);
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexBuffer(2,ExtMapBuffer3);//HA_Open
   SetIndexBuffer(3,ExtMapBuffer4);//HA_Close
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   double haOpen, haHigh, haLow, haClose;
   if(Bars<=10) return(0);
   ExtCountedBars=IndicatorCounted();
//---- check for possible errors
   if (ExtCountedBars<0) return(-1);
//---- last counted bar will be recounted
   if (ExtCountedBars>0) ExtCountedBars--;
   int pos=Bars-ExtCountedBars-1;
   while(pos>=0)
     {
      haOpen=  (iOpen("EURUSD",0,pos)+iOpen("EURGBP",0,pos)*2+iOpen("EURCHF",0,pos)+iOpen("EURJPY",0,pos)/100)/4;//(ExtMapBuffer3[pos+1]+ExtMapBuffer4[pos+1])/2;
      haClose= (iClose("EURUSD",0,pos)+iClose("EURGBP",0,pos)*2+iClose("EURCHF",0,pos)+iClose("EURJPY",0,pos)/100)/4;//(Open[pos]+High[pos]+Low[pos]+Close[pos])/4;
      haHigh=   (iHigh("EURUSD",0,pos)+iHigh("EURGBP",0,pos)*2+iHigh("EURCHF",0,pos)+iHigh("EURJPY",0,pos)/100)/4;//MathMax(High[pos], MathMax(haOpen, haClose));
      haLow=    (iLow("EURUSD",0,pos)+iLow("EURGBP",0,pos)*2+iLow("EURCHF",0,pos)+iLow("EURJPY",0,pos)/100)/4;//MathMin(Low[pos], MathMin(haOpen, haClose));
      
         ExtMapBuffer1[pos]=haHigh;
         ExtMapBuffer2[pos]=haLow;
         
      ExtMapBuffer3[pos]=haOpen;
      ExtMapBuffer4[pos]=haClose;
 	   pos--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Comments