Menu
Brokers
MT4 Forex Brokers
MT5 Forex brokers
PayPal Brokers
Skrill Brokers
Oil Trading Brokers
Gold Trading Brokers
Web Browser Platform
Brokers with CFD Trading
ECN Brokers
Bitcoin FX Brokers
PAMM Forex Brokers
With Cent Accounts
With High Leverage
Cryptocurrency Brokers
Forums
All threads
New threads
New posts
Trending
Search forums
What's new
New threads
New posts
Latest activity
Log in
Register
Search
Search titles only
By:
Search titles only
By:
Menu
Install the app
Install
Reply to thread
Forums
Trading Platforms
MetaTrader Indicators
Horizontal line on chart of iExposure average price
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Message
[QUOTE="Universal Financial Consultancy, post: 127627, member: 41164"] [USER=5898]@hayseed[/USER] I've added some code to make sound alert but it shows error. could you please correct it? [code=mql4]//+------------------------------------------------------------------+ //| iExposure.mq4 | ufc //| Copyright 2007-2014, MetaQuotes Software Corp. | //| http://www.mql4.com | //+------------------------------------------------------------------+ #property copyright "2007-2014, MetaQuotes Software Corp." #property link "http://www.mql4.com" #property strict #property indicator_separate_window #property indicator_buffers 1 #property indicator_minimum 0.0 #property indicator_maximum 0.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 input color InpColor=LightSeaGreen; // Text color extern bool ShowAveragePrice = true; 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 OnInit() { IndicatorShortName(ExtName); SetIndexBuffer(0,ExtMapBuffer); SetIndexStyle(0,DRAW_NONE); IndicatorDigits(0); SetIndexEmptyValue(0,0.0); EventSetTimer(2); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { int windex=WindowFind(ExtName); if(windex>0) ObjectsDeleteAll(windex); ObjectDelete("AverageBuyPrice"); ObjectDelete("AverageSellPrice"); EventKillTimer(); } //+------------------------------------------------------------------+ //| 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[]) { string name; int i,col,line,windex=WindowFind(ExtName); //---- if(windex<0) return(rates_total); //---- header line if(ExtLines<0) { for(col=0; col<8; col++) { name="Head_"+string(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",InpColor); } } 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_"+string(line)+"_"+string(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=(int)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_"+string(line)+"_0"; ObjectSetText(name,ExtSymbols[i],9,"Arial",InpColor); name="Line_"+string(line)+"_1"; ObjectSetText(name,DoubleToStr(ExtSymbolsSummaries[i][DEALS],0),9,"Arial",InpColor); name="Line_"+string(line)+"_2"; ObjectSetText(name,DoubleToStr(buy_lots,2),9,"Arial",InpColor); name="Line_"+string(line)+"_3"; ObjectSetText(name,DoubleToStr(buy_price,digits),9,"Arial",InpColor); name="Line_"+string(line)+"_4"; ObjectSetText(name,DoubleToStr(sell_lots,2),9,"Arial",InpColor); name="Line_"+string(line)+"_5"; ObjectSetText(name,DoubleToStr(sell_price,digits),9,"Arial",InpColor); name="Line_"+string(line)+"_6"; ObjectSetText(name,DoubleToStr(buy_lots-sell_lots,2),9,"Arial",InpColor); name="Line_"+string(line)+"_7"; ObjectSetText(name,DoubleToStr(ExtSymbolsSummaries[i][PROFIT],2),9,"Arial",InpColor); } } //---- remove lines if(total<ExtLines) { for(line=ExtLines; line>total; line--) { name="Line_"+string(line)+"_0"; ObjectSetText(name,""); name="Line_"+string(line)+"_1"; ObjectSetText(name,""); name="Line_"+string(line)+"_2"; ObjectSetText(name,""); name="Line_"+string(line)+"_3"; ObjectSetText(name,""); name="Line_"+string(line)+"_4"; ObjectSetText(name,""); name="Line_"+string(line)+"_5"; ObjectSetText(name,""); name="Line_"+string(line)+"_6"; ObjectSetText(name,""); name="Line_"+string(line)+"_7"; ObjectSetText(name,""); } } //---- to avoid minimum==maximum ExtMapBuffer[Bars-1]=-1; //---- if(ShowAveragePrice) {show();} return(rates_total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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; int i; //---- for(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); } //+------------------------------------------------------------------+ void show() { //---- if(ShowAveragePrice) { double p = NormalizeDouble(ObjectGet("AverageBuyPrice",1),Digits); double q = NormalizeDouble(AveragePrice("buys"),Digits); if(p!=q) {ObjectDelete("AverageBuyPrice");} ObjectCreate("AverageBuyPrice", OBJ_TREND, 0, Time[6], AveragePrice("buys"), Time[0]+4*(60*60*60), AveragePrice("buys")); ObjectSet("AverageBuyPrice", OBJPROP_COLOR, Lime); ObjectSet("AverageBuyPrice", OBJPROP_STYLE, STYLE_SOLID); ObjectSet("AverageBuyPrice", OBJPROP_WIDTH,2); ObjectSet("AverageBuyPrice", OBJPROP_RAY,false); ObjectSet("AverageBuyPrice",OBJPROP_BACK,true); double pp = NormalizeDouble(ObjectGet("AverageSellPrice",1),Digits); double qq = NormalizeDouble(AveragePrice("sells"),Digits); if(pp!=qq) {ObjectDelete("AverageSellPrice");} ObjectCreate("AverageSellPrice", OBJ_TREND, 0, Time[6], AveragePrice("sells"), Time[0]+4*(60*60*60), AveragePrice("sells")); ObjectSet("AverageSellPrice", OBJPROP_COLOR, Red); ObjectSet("AverageSellPrice", OBJPROP_STYLE, STYLE_SOLID); ObjectSet("AverageSellPrice", OBJPROP_WIDTH,2); ObjectSet("AverageSellPrice", OBJPROP_RAY,false); ObjectSet("AverageSellPrice",OBJPROP_BACK,true); } //---- } //---- //---- double AveragePrice(string type) { ///int total = CountOrders(OP_BUY) + CountOrders(OP_SELL); double buyaverage = 0; double sellaverage = 0; double buycount = 0; double sellcount = 0; double average = 0; for(int cnt=OrdersTotal()-1;cnt>=0;cnt--) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) if(OrderSymbol()!=Symbol()) continue; if(OrderType() > OP_SELL) continue; if(OrderType() == OP_BUY) { buyaverage = buyaverage +OrderOpenPrice()*OrderLots(); buycount = buycount + OrderLots(); } if(OrderType() == OP_SELL) { sellaverage = sellaverage + OrderOpenPrice()*OrderLots(); sellcount = sellcount + OrderLots(); } } if(buycount > 0) {buyaverage = NormalizeDouble(buyaverage/buycount, Digits);} if(sellcount > 0) {sellaverage = NormalizeDouble(sellaverage/sellcount, Digits);} if(type == "buys") return(buyaverage); return(sellaverage); } void OnTimer() { if ((Bid > buyaverage) && (buyaverage > 0)) { PlaySound("alert.wav"); } if ((Bid < sellaverage) && (sellaverage > 0)) { PlaySound("alert.wav"); } }[/code] [/QUOTE]
Insert quotes…
Verification
Post reply
Top
Bottom
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.
Accept
Learn more…