Like this:
It can be drawn with "DRAW_HISTOGRAM2".
Hi Dear Nagisa and thank you very much for your answer.
I'm new in MQL and Especially in the indicators. I used this method, but I did not get the correct results on this code (Red cloud was disappeared.).
I think this problem arises because this code uses the same color for both Senkou-Spans buffers.
Do you have any suggestions or solutions for this?
Thank you again for your response and attention
We wish the best for you
Sincerely
There was a mistake in my answer. The correct answer is "DRAW_COLOR_HISTOGRAM2".
In this case, a buffer is added to specify the color.
//+------------------------------------------------------------------+ //| Ichimoku.mq4 | //| Copyright 2005-2014, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2005-2014, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property description "Ichimoku Kinko Hyo" #property strict #property indicator_chart_window #property indicator_buffers 7 #property indicator_color1 Red // Tenkan-sen #property indicator_color2 Blue // Kijun-sen #property indicator_color3 SandyBrown // Up Kumo #property indicator_color4 Thistle // Down Kumo #property indicator_color5 Lime // Chikou Span #property indicator_color6 SandyBrown // Up Kumo bounding line #property indicator_color7 Thistle // Down Kumo bounding line //--- input parameters input int InpTenkan = 9; // Tenkan-sen input int InpKijun = 26; // Kijun-sen input int InpSenkou = 52; // Senkou Span B //--- buffers double ExtTenkanBuffer[]; double ExtKijunBuffer[]; double ExtSpanA_Buffer[]; double ExtSpanB_Buffer[]; double ExtChikouBuffer[]; double ExtSpanA2_Buffer[]; double ExtSpanB2_Buffer[]; //--- int ExtBegin; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit(void) { IndicatorDigits(Digits); //--- SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(0, ExtTenkanBuffer); SetIndexDrawBegin(0, InpTenkan - 1); SetIndexLabel(0, "Tenkan Sen"); //--- SetIndexStyle(1, DRAW_LINE); SetIndexBuffer(1, ExtKijunBuffer); SetIndexDrawBegin(1, InpKijun - 1); SetIndexLabel(1, "Kijun Sen"); //--- ExtBegin = InpKijun; if(ExtBegin < InpTenkan) ExtBegin = InpTenkan; //--- SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_DOT); SetIndexBuffer(2, ExtSpanA_Buffer); SetIndexDrawBegin(2, InpKijun + ExtBegin - 1); SetIndexShift(2, InpKijun); SetIndexLabel(2, NULL); SetIndexStyle(5, DRAW_LINE, STYLE_DOT); SetIndexBuffer(5, ExtSpanA2_Buffer); SetIndexDrawBegin(5, InpKijun + ExtBegin - 1); SetIndexShift(5, InpKijun); SetIndexLabel(5, "Senkou Span A"); //--- SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_DOT); SetIndexBuffer(3, ExtSpanB_Buffer); SetIndexDrawBegin(3, InpKijun + InpSenkou - 1); SetIndexShift(3, InpKijun); SetIndexLabel(3, NULL); SetIndexStyle(6, DRAW_LINE, STYLE_DOT); SetIndexBuffer(6, ExtSpanB2_Buffer); SetIndexDrawBegin(6, InpKijun + InpSenkou - 1); SetIndexShift(6, InpKijun); SetIndexLabel(6, "Senkou Span B"); //--- SetIndexStyle(4, DRAW_LINE); SetIndexBuffer(4, ExtChikouBuffer); SetIndexShift(4, -InpKijun); SetIndexLabel(4, "Chikou Span"); //--- initialization done } //+------------------------------------------------------------------+ //| Ichimoku Kinko Hyo | //+------------------------------------------------------------------+ 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 i, k, pos; double high_value, low_value; //--- if(rates_total <= InpTenkan || rates_total <= InpKijun || rates_total <= InpSenkou) return(0); //--- counting from 0 to rates_total ArraySetAsSeries(ExtTenkanBuffer, false); ArraySetAsSeries(ExtKijunBuffer, false); ArraySetAsSeries(ExtSpanA_Buffer, false); ArraySetAsSeries(ExtSpanB_Buffer, false); ArraySetAsSeries(ExtChikouBuffer, false); ArraySetAsSeries(ExtSpanA2_Buffer, false); ArraySetAsSeries(ExtSpanB2_Buffer, false); ArraySetAsSeries(open, false); ArraySetAsSeries(high, false); ArraySetAsSeries(low, false); ArraySetAsSeries(close, false); //--- initial zero if(prev_calculated < 1) { for(i = 0; i < InpTenkan; i++) ExtTenkanBuffer[i] = 0.0; for(i = 0; i < InpKijun; i++) ExtKijunBuffer[i] = 0.0; for(i = 0; i < ExtBegin; i++) { ExtSpanA_Buffer[i] = 0.0; ExtSpanA2_Buffer[i] = 0.0; } for(i = 0; i < InpSenkou; i++) { ExtSpanB_Buffer[i] = 0.0; ExtSpanB2_Buffer[i] = 0.0; } } //--- Tenkan Sen pos = InpTenkan - 1; if(prev_calculated > InpTenkan) pos = prev_calculated - 1; for(i = pos; i < rates_total; i++) { high_value = high[i]; low_value = low[i]; k = i + 1 - InpTenkan; while(k <= i) { if(high_value < high[k]) high_value = high[k]; if(low_value > low[k]) low_value = low[k]; k++; } ExtTenkanBuffer[i] = (high_value + low_value) / 2; } //--- Kijun Sen pos = InpKijun - 1; if(prev_calculated > InpKijun) pos = prev_calculated - 1; for(i = pos; i < rates_total; i++) { high_value = high[i]; low_value = low[i]; k = i + 1 - InpKijun; while(k <= i) { if(high_value < high[k]) high_value = high[k]; if(low_value > low[k]) low_value = low[k]; k++; } ExtKijunBuffer[i] = (high_value + low_value) / 2; } //--- Senkou Span A pos = ExtBegin - 1; if(prev_calculated > ExtBegin) pos = prev_calculated - 1; for(i = pos; i < rates_total; i++) { ExtSpanA_Buffer[i] = (ExtKijunBuffer[i] + ExtTenkanBuffer[i]) / 2; ExtSpanA2_Buffer[i] = ExtSpanA_Buffer[i]; } //--- Senkou Span B pos = InpSenkou - 1; if(prev_calculated > InpSenkou) pos = prev_calculated - 1; for(i = pos; i < rates_total; i++) { high_value = high[i]; low_value = low[i]; k = i + 1 - InpSenkou; while(k <= i) { if(high_value < high[k]) high_value = high[k]; if(low_value > low[k]) low_value = low[k]; k++; } ExtSpanB_Buffer[i] = (high_value + low_value) / 2; ExtSpanB2_Buffer[i] = ExtSpanB_Buffer[i]; } //--- Chikou Span pos = 0; if(prev_calculated > 1) pos = prev_calculated - 1; for(i = pos; i < rates_total; i++) ExtChikouBuffer[i] = close[i]; //--- return(rates_total); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+The source code below is the version converted to 5, where I've highlighted the changes:
#property indicator_chart_window #property indicator_buffers 7 #property indicator_plots 7 #property indicator_color1 Red // Tenkan-sen #property indicator_color2 Blue // Kijun-sen #property indicator_color3 SandyBrown // Up Kumo #property indicator_color4 Thistle // Down Kumo #property indicator_color5 Lime // Chikou Span #property indicator_color6 SandyBrown // Up Kumo bounding line #property indicator_color7 Thistle // Down Kumo bounding line #property indicator_style1 DRAW_LINE #property indicator_style2 DRAW_LINE #property indicator_style3 DRAW_HISTOGRAM, STYLE_DOT #property indicator_style4 DRAW_HISTOGRAM, STYLE_DOT #property indicator_style5 DRAW_LINE #property indicator_style6 DRAW_LINE, STYLE_DOT #property indicator_style7 DRAW_LINE, STYLE_DOT //--- input parameters input int InpTenkan = 9; // Tenkan-sen input int InpKijun = 26; // Kijun-sen input int InpSenkou = 52; // Senkou Span B //--- buffers double ExtTenkanBuffer[]; double ExtKijunBuffer[]; double ExtSpanA_Buffer[]; double ExtSpanB_Buffer[]; double ExtChikouBuffer[]; double ExtSpanA2_Buffer[]; double ExtSpanB2_Buffer[]; //--- int ExtBegin; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit(void) { IndicatorSetInteger(INDICATOR_DIGITS, _Digits); //--- //SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(0, ExtTenkanBuffer, INDICATOR_DATA); PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, InpTenkan - 1); PlotIndexSetString(0, PLOT_LABEL, "Tenkan Sen"); //--- //SetIndexStyle(1, DRAW_LINE); SetIndexBuffer(1, ExtKijunBuffer, INDICATOR_DATA); //SetIndexDrawBegin(1, InpKijun - 1); PlotIndexSetInteger(1, PLOT_DRAW_BEGIN, InpKijun - 1); //SetIndexLabel(1, "Kijun Sen"); PlotIndexSetString(1, PLOT_LABEL, "Kijun Sen"); //--- ExtBegin = InpKijun; if(ExtBegin < InpTenkan) ExtBegin = InpTenkan; //--- //SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_DOT); SetIndexBuffer(2, ExtSpanA_Buffer, INDICATOR_DATA); PlotIndexSetInteger(2, PLOT_DRAW_BEGIN, InpKijun + ExtBegin - 1); //SetIndexShift(2, InpKijun); PlotIndexSetInteger(2, PLOT_SHIFT, InpKijun); PlotIndexSetString(2, PLOT_LABEL, "Senkou Span A"); //SetIndexStyle(5, DRAW_LINE, STYLE_DOT); SetIndexBuffer(5, ExtSpanA2_Buffer, INDICATOR_DATA); PlotIndexSetInteger(5, PLOT_DRAW_BEGIN, InpKijun + ExtBegin - 1); PlotIndexSetInteger(5, PLOT_SHIFT, InpKijun); PlotIndexSetString(5, PLOT_LABEL, "Senkou Span A"); //--- //SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_DOT); SetIndexBuffer(3, ExtSpanB_Buffer, INDICATOR_DATA); PlotIndexSetInteger(3, PLOT_DRAW_BEGIN, InpKijun + InpSenkou - 1); PlotIndexSetInteger(3, PLOT_SHIFT, InpKijun); PlotIndexSetString(3, PLOT_LABEL, "Senkou Span B"); //SetIndexStyle(6, DRAW_LINE, STYLE_DOT); SetIndexBuffer(6, ExtSpanB2_Buffer, INDICATOR_DATA); PlotIndexSetInteger(6, PLOT_DRAW_BEGIN, InpKijun + InpSenkou - 1); PlotIndexSetInteger(6, PLOT_SHIFT, InpKijun); PlotIndexSetString(6, PLOT_LABEL, "Senkou Span B"); //--- //SetIndexStyle(4, DRAW_LINE); SetIndexBuffer(4, ExtChikouBuffer, INDICATOR_DATA); PlotIndexSetInteger(4, PLOT_SHIFT, -InpKijun); PlotIndexSetString(4, PLOT_LABEL, "Chikou Span"); //--- initialization done }
No change in OnCalculate() Function.
The indicator compiles without errors or warnings, but:
1- No drawing is done on the chart.
2- The data is displayed correctly in the data window but the Senko Spans are repeated 2 times. Of course, my main problem is in understanding the lack of drawing on the chart.
I would be very grateful if you could guide me so that I know where the problems are in my work.
Sincerely
I fixed some pieces but now it have:
1- problem with drawing Kumo
2- when i uncomment all drawings, i get compilation warning that say : indicator buffers amount is less than needed.
(I commented Tenkan-sen, Kijun-sen and Chiko Span because they had no problem.)
#property indicator_chart_window #property indicator_buffers 7 #property indicator_plots 7 #property indicator_color1 Red // Tenkan-sen #property indicator_color2 Blue // Kijun-sen #property indicator_color3 SandyBrown // Up Kumo #property indicator_color4 Thistle // Down Kumo #property indicator_color5 Lime // Chikou Span #property indicator_color6 SandyBrown // Up Kumo bounding line #property indicator_color7 Thistle // Down Kumo bounding line //#property indicator_type1 DRAW_LINE // Tenkan-sen //#property indicator_type2 DRAW_LINE // Kijun-sen #property indicator_type3 DRAW_HISTOGRAM2 // Up Kumo //#property indicator_style3 STYLE_DOT #property indicator_type4 DRAW_HISTOGRAM2 // Down Kumo //#property indicator_style4 STYLE_DOT //#property indicator_type5 DRAW_LINE // Chikou Span #property indicator_type6 DRAW_LINE // Up Kumo bounding line #property indicator_type7 DRAW_LINE // Down Kumo bounding line //#property indicator_style7 STYLE_DOT //--- input parameters input int InpTenkan = 9; // Tenkan-sen input int InpKijun = 26; // Kijun-sen input int InpSenkou = 52; // Senkou Span B //--- buffers double ExtTenkanBuffer[]; double ExtKijunBuffer[]; double ExtSpanA_Buffer[]; double ExtSpanB_Buffer[]; double ExtChikouBuffer[]; double ExtSpanA2_Buffer[]; double ExtSpanB2_Buffer[]; //--- int ExtBegin; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) { IndicatorSetInteger(INDICATOR_DIGITS, _Digits); //--- //--- ExtBegin = InpKijun; if(ExtBegin < InpTenkan) ExtBegin = InpTenkan; //SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(0, ExtTenkanBuffer, INDICATOR_DATA); PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, InpTenkan - 1); PlotIndexSetString(0, PLOT_LABEL, "Tenkan Sen"); //--- //SetIndexStyle(1, DRAW_LINE); SetIndexBuffer(1, ExtKijunBuffer, INDICATOR_DATA); //SetIndexDrawBegin(1, InpKijun - 1); PlotIndexSetInteger(1, PLOT_DRAW_BEGIN, InpKijun - 1); //SetIndexLabel(1, "Kijun Sen"); PlotIndexSetString(1, PLOT_LABEL, "Kijun Sen"); //--- //SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_DOT); SetIndexBuffer(2, ExtSpanA_Buffer, INDICATOR_DATA); PlotIndexSetInteger(2, PLOT_DRAW_BEGIN, InpKijun + ExtBegin - 1); //SetIndexShift(2, InpKijun); PlotIndexSetInteger(2, PLOT_SHIFT, InpKijun); PlotIndexSetString(2, PLOT_LABEL, NULL); //SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_DOT); SetIndexBuffer(3, ExtSpanB_Buffer, INDICATOR_DATA); PlotIndexSetInteger(3, PLOT_DRAW_BEGIN, InpKijun + InpSenkou - 1); PlotIndexSetInteger(3, PLOT_SHIFT, InpKijun); PlotIndexSetString(3, PLOT_LABEL, NULL); //SetIndexStyle(4, DRAW_LINE); SetIndexBuffer(4, ExtChikouBuffer, INDICATOR_DATA); PlotIndexSetInteger(4, PLOT_SHIFT, -InpKijun); PlotIndexSetString(4, PLOT_LABEL, "Chikou Span"); //SetIndexStyle(5, DRAW_LINE, STYLE_DOT); SetIndexBuffer(5, ExtSpanA2_Buffer, INDICATOR_DATA); PlotIndexSetInteger(5, PLOT_DRAW_BEGIN, InpKijun + ExtBegin - 1); PlotIndexSetInteger(5, PLOT_SHIFT, InpKijun); PlotIndexSetString(5, PLOT_LABEL, "Senkou Span A"); //SetIndexStyle(6, DRAW_LINE, STYLE_DOT); SetIndexBuffer(6, ExtSpanB2_Buffer, INDICATOR_DATA); PlotIndexSetInteger(6, PLOT_DRAW_BEGIN, InpKijun + InpSenkou - 1); PlotIndexSetInteger(6, PLOT_SHIFT, InpKijun); PlotIndexSetString(6, PLOT_LABEL, "Senkou Span B"); //--- initialization done return(INIT_SUCCEEDED); }
I have rewritten it with some corrections and reorganized the content as it is very hard to understand.
#property version "1.00" #property indicator_chart_window #property indicator_buffers 8 #property indicator_plots 6 //--- plot ExtTenkan #property indicator_label1 "ExtTenkan" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- plot ExtKijun #property indicator_label2 "ExtKijun" #property indicator_type2 DRAW_LINE #property indicator_color2 clrBlue #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- plot ExtSpanA_ #property indicator_label3 "ExtSpanA_" #property indicator_type3 DRAW_LINE #property indicator_color3 clrSandyBrown #property indicator_style3 STYLE_SOLID #property indicator_width3 1 //--- plot ExtSpanB_ #property indicator_label4 "ExtSpanB_" #property indicator_type4 DRAW_LINE #property indicator_color4 clrThistle #property indicator_style4 STYLE_SOLID #property indicator_width4 1 //--- plot ExtChikou #property indicator_label5 "ExtChikou" #property indicator_type5 DRAW_LINE #property indicator_color5 clrLime #property indicator_style5 STYLE_SOLID #property indicator_width5 1 //--- plot ExtHisto_ #property indicator_label6 "ExtHisto_" #property indicator_type6 DRAW_COLOR_HISTOGRAM2 #property indicator_color6 clrSandyBrown,clrThistle #property indicator_style6 STYLE_DOT #property indicator_width6 1 //--- input parameters input int InpTenkan = 9; // Tenkan-sen input int InpKijun = 26; // Kijun-sen input int InpSenkou = 52; // Senkou Span B //--- indicator buffers double ExtTenkanBuffer[]; double ExtKijunBuffer[]; double ExtSpanA_Buffer[]; double ExtSpanB_Buffer[]; double ExtChikouBuffer[]; double ExtHisto_Buffer1[]; double ExtHisto_Buffer2[]; double ExtHisto_Colors[]; int ExtBegin; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0, ExtTenkanBuffer, INDICATOR_DATA); SetIndexBuffer(1, ExtKijunBuffer, INDICATOR_DATA); SetIndexBuffer(2, ExtSpanA_Buffer, INDICATOR_DATA); SetIndexBuffer(3, ExtSpanB_Buffer, INDICATOR_DATA); SetIndexBuffer(4, ExtChikouBuffer, INDICATOR_DATA); SetIndexBuffer(5, ExtHisto_Buffer1, INDICATOR_DATA); SetIndexBuffer(6, ExtHisto_Buffer2, INDICATOR_DATA); SetIndexBuffer(7, ExtHisto_Colors, INDICATOR_COLOR_INDEX); IndicatorSetInteger(INDICATOR_DIGITS, _Digits); PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, InpTenkan - 1); PlotIndexSetInteger(1, PLOT_DRAW_BEGIN, InpKijun - 1); ExtBegin = InpKijun; if(ExtBegin < InpTenkan) ExtBegin = InpTenkan; PlotIndexSetInteger(2, PLOT_DRAW_BEGIN, InpKijun + ExtBegin - 1); PlotIndexSetInteger(5, PLOT_DRAW_BEGIN, InpKijun + ExtBegin - 1); PlotIndexSetInteger(2, PLOT_SHIFT, InpKijun); PlotIndexSetInteger(3, PLOT_SHIFT, InpKijun); PlotIndexSetInteger(4, PLOT_SHIFT, -InpKijun); PlotIndexSetInteger(5, PLOT_SHIFT, InpKijun); //--- 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 i, k, pos; double high_value, low_value; //--- if(rates_total <= InpTenkan || rates_total <= InpKijun || rates_total <= InpSenkou) return(0); //--- initial zero if(prev_calculated < 1) { for(i = 0; i < InpTenkan; i++) ExtTenkanBuffer[i] = 0.0; for(i = 0; i < InpKijun; i++) ExtKijunBuffer[i] = 0.0; for(i = 0; i < ExtBegin; i++) { ExtSpanA_Buffer[i] = 0.0; ExtHisto_Buffer1[i] = 0.0; } for(i = 0; i < InpSenkou; i++) { ExtSpanB_Buffer[i] = 0.0; ExtHisto_Buffer2[i] = 0.0; } } //--- Tenkan Sen pos = InpTenkan - 1; if(prev_calculated > InpTenkan) pos = prev_calculated - 1; for(i = pos; i < rates_total; i++) { high_value = high[i]; low_value = low[i]; k = i + 1 - InpTenkan; while(k <= i) { if(high_value < high[k]) high_value = high[k]; if(low_value > low[k]) low_value = low[k]; k++; } ExtTenkanBuffer[i] = (high_value + low_value) / 2; } //--- Kijun Sen pos = InpKijun - 1; if(prev_calculated > InpKijun) pos = prev_calculated - 1; for(i = pos; i < rates_total; i++) { high_value = high[i]; low_value = low[i]; k = i + 1 - InpKijun; while(k <= i) { if(high_value < high[k]) high_value = high[k]; if(low_value > low[k]) low_value = low[k]; k++; } ExtKijunBuffer[i] = (high_value + low_value) / 2; } //--- Senkou Span A pos = ExtBegin - 1; if(prev_calculated > ExtBegin) pos = prev_calculated - 1; for(i = pos; i < rates_total; i++) { ExtSpanA_Buffer[i] = (ExtKijunBuffer[i] + ExtTenkanBuffer[i]) / 2; } //--- Senkou Span B pos = InpSenkou - 1; if(prev_calculated > InpSenkou) pos = prev_calculated - 1; for(i = pos; i < rates_total; i++) { high_value = high[i]; low_value = low[i]; k = i + 1 - InpSenkou; while(k <= i) { if(high_value < high[k]) high_value = high[k]; if(low_value > low[k]) low_value = low[k]; k++; } ExtSpanB_Buffer[i] = (high_value + low_value) / 2; ExtHisto_Buffer2[i] = ExtSpanB_Buffer[i]; ExtHisto_Buffer1[i] = ExtSpanA_Buffer[i]; ExtHisto_Colors[i] = ExtSpanA_Buffer[i] > ExtSpanB_Buffer[i] ? 0 : 1; } //--- Chikou Span pos = 0; if(prev_calculated > 1) pos = prev_calculated - 1; for(i = pos; i < rates_total; i++) ExtChikouBuffer[i] = close[i]; //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
I have rewritten it with some corrections and reorganized the content as it is very hard to understand.
Dear Nagisa
I really appreciate your taking the time and for your help. Thank you very much for the kindness you gave me and the comprehensive and complete explanations you gave.
You are very kind and helpful. The codes you corrected are very important to me and I learned a lot from you.
I hope you are always happy and healthy and I wish you the best.
Sincerely,
With best regards.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
with respect
Like this: