//+------------------------------------------------------------------+ //| ShowOrdersOnChart.mq4 | //| Rukuki_Ake | //| http://firefun.ru | //+------------------------------------------------------------------+ #property copyright "Rukuki_Ake" #property link "http://firefun.ru" #property indicator_chart_window int iOrdersTotal = 0; int iOpenedOrders = 0; // êîëè÷åñòâî îòêðûòûõ îðäåðîâ ïî äàííîìó èíñòðóìåíòó int aOpenedOrderTypes[0]; string aOpenedOrderSymbols[0]; datetime aOpenedOrderOpenTimes[0]; double aOpenedOrderOpenPrices[0]; int aOpenedOrderTickets[0]; double aOpenedOrderProfits[0]; double aOpenedOrderSwaps[0]; double aOpenedOrderLots[0]; int iOrdersHistoryTotal = 0; int iClosedOrders = 0; int aClosedOrderTypes[0]; string aClosedOrderSymbols[0]; datetime aClosedOrderOpenTimes[0]; datetime aClosedOrderCloseTimes[0]; double aClosedOrderOpenPrices[0]; double aClosedOrderClosePrices[0]; int aClosedOrderTickets[0]; double aClosedOrderProfits[0]; double aClosedOrderSwaps[0]; double aClosedOrderLots[0]; string sSymbol; int init() { sSymbol = Symbol(); } int deinit() { fDeleteOrderObjects (); } void fInitOrders(bool bAll=true) { int iOrderType; int iCounter = 0; string sOrderSymbol; /* Îòêðûòûå îðäåðà */ iOrdersTotal=OrdersTotal(); if (iOpenedOrders>0) { ArrayResize(aOpenedOrderTypes,0); ArrayResize(aOpenedOrderSymbols,0); ArrayResize(aOpenedOrderOpenTimes,0); ArrayResize(aOpenedOrderOpenPrices,0); ArrayResize(aOpenedOrderTickets,0); ArrayResize(aOpenedOrderProfits,0); ArrayResize(aOpenedOrderSwaps,0); ArrayResize(aOpenedOrderLots,0); iOpenedOrders=0; } for(int i=0;i<iOrdersTotal;i++) if (OrderSelect(i,SELECT_BY_POS)==true) { iOrderType=OrderType(); sOrderSymbol=OrderSymbol(); if (sOrderSymbol==sSymbol && (iOrderType == OP_BUY || iOrderType == OP_SELL)) { iOpenedOrders++; ArrayResize(aOpenedOrderTypes,iOpenedOrders); ArrayResize(aOpenedOrderSymbols,iOpenedOrders); ArrayResize(aOpenedOrderOpenTimes,iOpenedOrders); ArrayResize(aOpenedOrderOpenPrices,iOpenedOrders); ArrayResize(aOpenedOrderTickets,iOpenedOrders); ArrayResize(aOpenedOrderProfits,iOpenedOrders); ArrayResize(aOpenedOrderSwaps,iOpenedOrders); ArrayResize(aOpenedOrderLots,iOpenedOrders); aOpenedOrderTypes[iOpenedOrders-1]=iOrderType; aOpenedOrderSymbols[iOpenedOrders-1]=sOrderSymbol; aOpenedOrderOpenTimes[iOpenedOrders-1]=OrderOpenTime(); aOpenedOrderOpenPrices[iOpenedOrders-1]=OrderOpenPrice(); aOpenedOrderTickets[iOpenedOrders-1]=OrderTicket(); aOpenedOrderProfits[iOpenedOrders-1]=OrderProfit(); aOpenedOrderSwaps[iOpenedOrders-1]=OrderSwap(); aOpenedOrderLots[iOpenedOrders-1]=OrderLots(); } } /* Çàêðûòûå îðäåðà */ if (bAll) { iOrdersHistoryTotal=OrdersHistoryTotal(); if (iClosedOrders>0) { ArrayResize(aClosedOrderTypes,0); ArrayResize(aClosedOrderSymbols,0); ArrayResize(aClosedOrderOpenTimes,0); ArrayResize(aClosedOrderCloseTimes,0); ArrayResize(aClosedOrderOpenPrices,0); ArrayResize(aClosedOrderClosePrices,0); ArrayResize(aClosedOrderTickets,0); ArrayResize(aClosedOrderProfits,0); ArrayResize(aClosedOrderSwaps,0); ArrayResize(aClosedOrderLots,0); iClosedOrders=0; } for(int j=0;j<iOrdersHistoryTotal;j++) if (OrderSelect(j,SELECT_BY_POS,MODE_HISTORY)==true) { iOrderType=OrderType(); sOrderSymbol=OrderSymbol(); if (sOrderSymbol==sSymbol && (iOrderType == OP_BUY || iOrderType == OP_SELL)) { iClosedOrders++; ArrayResize(aClosedOrderTypes,iClosedOrders); ArrayResize(aClosedOrderSymbols,iClosedOrders); ArrayResize(aClosedOrderOpenTimes,iClosedOrders); ArrayResize(aClosedOrderCloseTimes,iClosedOrders); ArrayResize(aClosedOrderOpenPrices,iClosedOrders); ArrayResize(aClosedOrderClosePrices,iClosedOrders); ArrayResize(aClosedOrderTickets,iClosedOrders); ArrayResize(aClosedOrderProfits,iClosedOrders); ArrayResize(aClosedOrderSwaps,iClosedOrders); ArrayResize(aClosedOrderLots,iClosedOrders); aClosedOrderTypes[iClosedOrders-1]=iOrderType; aClosedOrderSymbols[iClosedOrders-1]=sOrderSymbol; aClosedOrderOpenTimes[iClosedOrders-1]=OrderOpenTime(); aClosedOrderCloseTimes[iClosedOrders-1]=OrderCloseTime(); aClosedOrderOpenPrices[iClosedOrders-1]=OrderOpenPrice(); aClosedOrderClosePrices[iClosedOrders-1]=OrderClosePrice(); aClosedOrderTickets[iClosedOrders-1]=OrderTicket(); aClosedOrderProfits[iClosedOrders-1]=OrderProfit(); aClosedOrderSwaps[iClosedOrders-1]=OrderSwap(); aClosedOrderLots[iClosedOrders-1]=OrderLots(); } } } } void fDrawOrders(bool bAll=true) { for(int i=0;i<iOpenedOrders;i++) { ObjectCreate("rukukiLine"+aOpenedOrderTickets[i],OBJ_VLINE,0,aOpenedOrderOpenTimes[i],0,0,0,0,0); ObjectSet("rukukiLine"+aOpenedOrderTickets[i],OBJPROP_BACK,true); ObjectSet("rukukiLine"+aOpenedOrderTickets[i],OBJPROP_STYLE,STYLE_DASHDOTDOT); ObjectCreate("rukukiArrow"+aOpenedOrderTickets[i],OBJ_ARROW,0,aOpenedOrderOpenTimes[i],aOpenedOrderOpenPrices[i]); if (aOpenedOrderTypes[i] == OP_BUY) { ObjectSet("rukukiArrow"+aOpenedOrderTickets[i],OBJPROP_ARROWCODE,1); ObjectSetText("rukukiLine"+aOpenedOrderTickets[i], StringConcatenate("\nBuy ",aOpenedOrderOpenPrices[i]," ", TimeToStr(aOpenedOrderOpenTimes[i],TIME_SECONDS),"\nEquity: ", (MarketInfo(aOpenedOrderSymbols[i],MODE_BID)-aOpenedOrderOpenPrices[i])/ MarketInfo(aOpenedOrderSymbols[i],MODE_POINT)* MarketInfo(aOpenedOrderSymbols[i],MODE_TICKVALUE)*aOpenedOrderLots[i]+ aOpenedOrderSwaps[i],"\n")); } else { ObjectSet("rukukiArrow"+aOpenedOrderTickets[i],OBJPROP_ARROWCODE,2); ObjectSetText("rukukiLine"+aOpenedOrderTickets[i], StringConcatenate("\nSell ",aOpenedOrderOpenPrices[i]," ", TimeToStr(aOpenedOrderOpenTimes[i],TIME_SECONDS),"\nEquity: ", (aOpenedOrderOpenPrices[i]-MarketInfo(aOpenedOrderSymbols[i],MODE_ASK))/ MarketInfo(aOpenedOrderSymbols[i],MODE_POINT)* MarketInfo(aOpenedOrderSymbols[i],MODE_TICKVALUE)*aOpenedOrderLots[i]+ aOpenedOrderSwaps[i],"\n")); } ObjectSet("rukukiArrow"+aOpenedOrderTickets[i],OBJPROP_BACK,false); if ((aOpenedOrderProfits[i]+aOpenedOrderSwaps[i])>=0) { ObjectSet("rukukiLine"+aOpenedOrderTickets[i],OBJPROP_COLOR,Green); ObjectSet("rukukiArrow"+aOpenedOrderTickets[i],OBJPROP_COLOR,Green); } else { ObjectSet("rukukiLine"+aOpenedOrderTickets[i],OBJPROP_COLOR,Maroon); ObjectSet("rukukiArrow"+aOpenedOrderTickets[i],OBJPROP_COLOR,Maroon); } } if (bAll) { for(int j=0;j<iClosedOrders;j++) { ObjectCreate("rukukiLine"+aClosedOrderTickets[j],OBJ_VLINE,0,aClosedOrderOpenTimes[j],0,0,0,0,0); ObjectSet("rukukiLine"+aClosedOrderTickets[j],OBJPROP_BACK,true); ObjectSet("rukukiLine"+aClosedOrderTickets[j],OBJPROP_STYLE,STYLE_DASHDOTDOT); ObjectCreate("rukukiArrow"+aClosedOrderTickets[j],OBJ_ARROW,0,aClosedOrderOpenTimes[j],aClosedOrderOpenPrices[j]); if (aClosedOrderTypes[j] == OP_BUY) { ObjectSet("rukukiArrow"+aClosedOrderTickets[j],OBJPROP_ARROWCODE,1); ObjectSetText("rukukiLine"+aClosedOrderTickets[j], StringConcatenate("\nBuy ",aClosedOrderOpenPrices[j]," ", TimeToStr(aClosedOrderOpenTimes[j],TIME_SECONDS), "\nClose ", aClosedOrderClosePrices[j]," ", TimeToStr(aClosedOrderCloseTimes[j],TIME_SECONDS) ,"\nBalance: ", (aClosedOrderClosePrices[j]-aClosedOrderOpenPrices[j])/ MarketInfo(aClosedOrderSymbols[j],MODE_POINT)* MarketInfo(aClosedOrderSymbols[j],MODE_TICKVALUE)*aClosedOrderLots[j]+ aClosedOrderSwaps[j],"\n")); } else { ObjectSet("rukukiArrow"+aClosedOrderTickets[j],OBJPROP_ARROWCODE,2); ObjectSetText("rukukiLine"+aClosedOrderTickets[j], StringConcatenate("\nSell ",aClosedOrderOpenPrices[j]," ", TimeToStr(aClosedOrderOpenTimes[j],TIME_SECONDS), "\nClose ", aClosedOrderClosePrices[j]," ", TimeToStr(aClosedOrderCloseTimes[j],TIME_SECONDS) ,"\nBalance: ", (aClosedOrderOpenPrices[j]-aClosedOrderClosePrices[j])/ MarketInfo(aClosedOrderSymbols[j],MODE_POINT)* MarketInfo(aClosedOrderSymbols[j],MODE_TICKVALUE)*aClosedOrderLots[j]+ aClosedOrderSwaps[j],"\n")); } ObjectSet("rukukiArrow"+aClosedOrderTickets[j],OBJPROP_BACK,false); ObjectCreate("rukukiX"+aClosedOrderTickets[j],OBJ_ARROW,0,aClosedOrderOpenTimes[j],aClosedOrderClosePrices[j]); ObjectSet("rukukiX"+aClosedOrderTickets[j],OBJPROP_ARROWCODE,3); ObjectSet("rukukiX"+aClosedOrderTickets[j],OBJPROP_BACK,false); if ((aClosedOrderProfits[j]+aClosedOrderSwaps[j])>=0) { ObjectSet("rukukiLine"+aClosedOrderTickets[j],OBJPROP_COLOR,Green); ObjectSet("rukukiArrow"+aClosedOrderTickets[j],OBJPROP_COLOR,Green); ObjectSet("rukukiX"+aClosedOrderTickets[j],OBJPROP_COLOR,Lime); } else { ObjectSet("rukukiLine"+aClosedOrderTickets[j],OBJPROP_COLOR,Maroon); ObjectSet("rukukiArrow"+aClosedOrderTickets[j],OBJPROP_COLOR,Maroon); ObjectSet("rukukiX"+aClosedOrderTickets[j],OBJPROP_COLOR,Red); } } } } void fDeleteOrderObjects (bool bAll = true) { for(int i=0;i<iOpenedOrders;i++) { ObjectDelete("rukukiLine"+aOpenedOrderTickets[i]); ObjectDelete("rukukiArrow"+aOpenedOrderTickets[i]); } if (bAll) { for(int j=0;j<iClosedOrders;j++) { ObjectDelete("rukukiLine"+aClosedOrderTickets[j]); ObjectDelete("rukukiArrow"+aClosedOrderTickets[j]); ObjectDelete("rukukiX"+aClosedOrderTickets[j]); } } } int start() { if(iOrdersTotal != OrdersTotal() || iOrdersHistoryTotal != OrdersHistoryTotal()) { fDeleteOrderObjects(true); fInitOrders(true); fDrawOrders(true); } else { fDeleteOrderObjects(false); fInitOrders(false); fDrawOrders(false); } return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
Checks for the total of closed orders
Other Features: