Hi, Im trying to change the iExposure indicator view from sub window to main chart window.
I've already tried modifying the code from #property indicator_separate_window to #property indicator_chart_window, but still can't see the indicator in the main "chart" window.
On the chart you are putting this Indicator on what is the range of prices on the Y axis, max and min ? what range of values does this Indicator produce ? they have to be plotted against the same Y axis . . .
iExposure produce information like open orders , buy and sell lots, and profit.
There is a similar indicator named i-Breakeven that can be viewed in the chart window. That's what Im looking, but for the iExposure indicator.
I've checked the i-Breakeven code to compare, and I noticed that changing from:
#property indicator_chart_window
ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
to:
#property indicator_separate_window
ObjectCreate(name, OBJ_LABEL, 1, 0, 0);
The objects moved from chart window to sub window.
So Im trying to do the same changes in the iExposure code, but inverse.
I still can't figure it out.
iExposure produce information like open orders , buy and sell lots, and profit.
OK,
I've already tried modifying the code from #property indicator_separate_window to #property indicator_chart_window, but still can't see the indicator in the main "chart" window.
Do that, and also this . . .
from this . . .
int i,col,line,windex=WindowFind(ExtName);
to this . .
int i,col,line,windex = 0; // WindowFind(ExtName);
Note: not tested this fully . . .
OK,
Do that, and also this . . .
from this . . .
to this . .
Note: not tested this fully . . .
Many thanks Raptor!, now I can see the indicator in the main chart window.
I appreciate your help.
Best regards
Hi,
I want to do exactly the same thing. i.e. move the iExposure indicator to the main window. However, I cannot make it work in the chart_window after making the changes mentioned by RaptorUK. Appreciate if afK could share the working (chart window) indicator here.
Thanks.
Hi RaptorUK,
I've modified the iExposure indicator to display on the chart, and have modified the code so that when you delete the indicator, all the objects are deleted (as the labels from the iExposure would remain on the chart). I'm not sure if I've coded it properly as I'm not a coder.
However, now when I delete this modified iExposure indicator, all the objects including the ones I've drawn on my chart are deleted. I'd only like the objects created by iExposure to be deleted, not every object from the chart. I've searched and searched, and have spent hours trying to do it, but am not able to. Could you please help me?
Thanks,
Elpidius
Elpidius:
However, now when I delete this modified iExposure indicator, all the objects including the ones I've drawn on my chart are deleted
If it makes it any quicker to spot the errors, here's the code:
//+------------------------------------------------------------------+ //| iExposure_main_chart.mq4 | //| modified by Elpidius on 2/03/2014 | //| http://www.forexfactory.com/elpidius | //| | //| Modification from Original Indicator: | //| iExposure.mq4 | //| Copyright © 2007, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property indicator_chart_window #property indicator_buffers 1 #define SYMBOLS_MAX 1024 #define DEALS 0 #define BUY_LOTS 1 #define BUY_PRICE 2 #define SELL_LOTS 3 #define SELL_PRICE 4 #define NET_LOTS 5 #define PROFIT 6 extern color ExtColor=LightSeaGreen; string ExtName="Exposure"; string ExtSymbols[SYMBOLS_MAX]; int ExtSymbolsTotal=0; double ExtSymbolsSummaries[SYMBOLS_MAX][7]; int ExtLines=-1; string ExtCols[8]={"Symbol", "Deals", "Buy lots", "Buy price", "Sell lots", "Sell price", "Net lots", "Profit"}; int ExtShifts[8]={ 10, 80, 130, 180, 260, 310, 390, 460 }; int ExtVertShift=14; double ExtMapBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void init() { IndicatorShortName(ExtName); SetIndexBuffer(0,ExtMapBuffer); SetIndexStyle(0,DRAW_NONE); IndicatorDigits(0); SetIndexEmptyValue(0,0.0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void deinit() { string name; int windex = ObjectsTotal(); for (int i=windex-1; i>=0; i--) { name = ObjectName(i); if (windex>0) ObjectDelete(name); } } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ void start() { string name; int i,col,line,windex=0; // WindowFind(ExtName); //---- if(windex<0) return; //---- header line if(ExtLines<0) { for(col=0; col<8; col++) { name="Head_"+col; if(ObjectCreate(name,OBJ_LABEL,windex,0,0)) { ObjectSet(name,OBJPROP_XDISTANCE,ExtShifts[col]); ObjectSet(name,OBJPROP_YDISTANCE,ExtVertShift); ObjectSetText(name,ExtCols[col],9,"Arial",ExtColor); } } ExtLines=0; } //---- ArrayInitialize(ExtSymbolsSummaries,0.0); int total=Analyze(); if(total>0) { line=0; for(i=0; i<ExtSymbolsTotal; i++) { if(ExtSymbolsSummaries[i][DEALS]<=0) continue; line++; //---- add line if(line>ExtLines) { int y_dist=ExtVertShift*(line+1)+1; for(col=0; col<8; col++) { name="Line_"+line+"_"+col; if(ObjectCreate(name,OBJ_LABEL,windex,0,0)) { ObjectSet(name,OBJPROP_XDISTANCE,ExtShifts[col]); ObjectSet(name,OBJPROP_YDISTANCE,y_dist); } } ExtLines++; } //---- set line int digits=MarketInfo(ExtSymbols[i],MODE_DIGITS); double buy_lots=ExtSymbolsSummaries[i][BUY_LOTS]; double sell_lots=ExtSymbolsSummaries[i][SELL_LOTS]; double buy_price=0.0; double sell_price=0.0; if(buy_lots!=0) buy_price=ExtSymbolsSummaries[i][BUY_PRICE]/buy_lots; if(sell_lots!=0) sell_price=ExtSymbolsSummaries[i][SELL_PRICE]/sell_lots; name="Line_"+line+"_0"; ObjectSetText(name,ExtSymbols[i],9,"Arial",ExtColor); name="Line_"+line+"_1"; ObjectSetText(name,DoubleToStr(ExtSymbolsSummaries[i][DEALS],0),9,"Arial",ExtColor); name="Line_"+line+"_2"; ObjectSetText(name,DoubleToStr(buy_lots,2),9,"Arial",ExtColor); name="Line_"+line+"_3"; ObjectSetText(name,DoubleToStr(buy_price,digits),9,"Arial",ExtColor); name="Line_"+line+"_4"; ObjectSetText(name,DoubleToStr(sell_lots,2),9,"Arial",ExtColor); name="Line_"+line+"_5"; ObjectSetText(name,DoubleToStr(sell_price,digits),9,"Arial",ExtColor); name="Line_"+line+"_6"; ObjectSetText(name,DoubleToStr(buy_lots-sell_lots,2),9,"Arial",ExtColor); name="Line_"+line+"_7"; ObjectSetText(name,DoubleToStr(ExtSymbolsSummaries[i][PROFIT],2),9,"Arial",ExtColor); } } //---- remove lines if(total<ExtLines) { for(line=ExtLines; line>total; line--) { name="Line_"+line+"_0"; ObjectSetText(name,""); name="Line_"+line+"_1"; ObjectSetText(name,""); name="Line_"+line+"_2"; ObjectSetText(name,""); name="Line_"+line+"_3"; ObjectSetText(name,""); name="Line_"+line+"_4"; ObjectSetText(name,""); name="Line_"+line+"_5"; ObjectSetText(name,""); name="Line_"+line+"_6"; ObjectSetText(name,""); name="Line_"+line+"_7"; ObjectSetText(name,""); } } //---- to avoid minimum==maximum ExtMapBuffer[Bars-1]=-1; //---- } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int Analyze() { double profit; int i,index,type,total=OrdersTotal(); //---- for(i=0; i<total; i++) { if(!OrderSelect(i,SELECT_BY_POS)) continue; type=OrderType(); if(type!=OP_BUY && type!=OP_SELL) continue; index=SymbolsIndex(OrderSymbol()); if(index<0 || index>=SYMBOLS_MAX) continue; //---- ExtSymbolsSummaries[index][DEALS]++; profit=OrderProfit()+OrderCommission()+OrderSwap(); ExtSymbolsSummaries[index][PROFIT]+=profit; if(type==OP_BUY) { ExtSymbolsSummaries[index][BUY_LOTS]+=OrderLots(); ExtSymbolsSummaries[index][BUY_PRICE]+=OrderOpenPrice()*OrderLots(); } else { ExtSymbolsSummaries[index][SELL_LOTS]+=OrderLots(); ExtSymbolsSummaries[index][SELL_PRICE]+=OrderOpenPrice()*OrderLots(); } } //---- total=0; for(i=0; i<ExtSymbolsTotal; i++) { if(ExtSymbolsSummaries[i][DEALS]>0) total++; } //---- return(total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int SymbolsIndex(string SymbolName) { bool found=false; //---- for(int i=0; i<ExtSymbolsTotal; i++) { if(SymbolName==ExtSymbols[i]) { found=true; break; } } //---- if(found) return(i); if(ExtSymbolsTotal>=SYMBOLS_MAX) return(-1); //---- i=ExtSymbolsTotal; ExtSymbolsTotal++; ExtSymbols[i]=SymbolName; ExtSymbolsSummaries[i][DEALS]=0; ExtSymbolsSummaries[i][BUY_LOTS]=0; ExtSymbolsSummaries[i][BUY_PRICE]=0; ExtSymbolsSummaries[i][SELL_LOTS]=0; ExtSymbolsSummaries[i][SELL_PRICE]=0; ExtSymbolsSummaries[i][NET_LOTS]=0; ExtSymbolsSummaries[i][PROFIT]=0; //---- return(i); } //+------------------------------------------------------------------+
because u r deleting all the objects on the chart, u have 2 delete only the objects created by the inducator
How would I do that? As I'm not a coder, so it takes me hours to find out how to code something. I've spent at least 5 hours trying to find out how to do this. It seems impossible.
Regards,
Elpidius
![MQL5 - Language of trade strategies built-in the MetaTrader 5 client terminal](https://c.mql5.com/i/registerlandings/logo-2.png)
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hi, Im trying to change the iExposure indicator view from sub window to main chart window.
I've already tried modifying the code from #property indicator_separate_window to #property indicator_chart_window, but still can't see the indicator in the main "chart" window.
Any suggestion?
Here is the original code. Thanks in advance for your help.