//+------------------------------------------------------------------+ //| MMI.mq4 | //| Copyright 2015, mrak297. | //| https://www.mql5.com/ru/users/mrak297 | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, mrak297." #property link "https://www.mql5.com/ru/users/mrak297" #property version "15.7" #property strict #property indicator_chart_window //--- input parameters input double Risk=15; input color LabelColor=clrSilver; //Color input int FontSize=10; input ENUM_BASE_CORNER CORNER=CORNER_LEFT_LOWER; //--- double Lots,Spread; ENUM_ANCHOR_POINT ANCHOR=ANCHOR_LEFT_LOWER; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { EventSetMillisecondTimer(250); //--- if(CORNER==CORNER_LEFT_LOWER) ANCHOR=ANCHOR_LEFT_LOWER; else if(CORNER == CORNER_LEFT_UPPER) ANCHOR = ANCHOR_LEFT_UPPER; else if(CORNER == CORNER_RIGHT_LOWER) ANCHOR = ANCHOR_RIGHT_LOWER; else if(CORNER == CORNER_RIGHT_UPPER) ANCHOR = ANCHOR_RIGHT_UPPER; //--- Lots=CalculateLot(Risk); Spread=MarketInfo(_Symbol,MODE_SPREAD); //--- LabelCreate("Lot",10,20); LabelCreate("Risk",10,40); LabelCreate("Spread",10,60); //--- SetLabelText(); //--- 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[]) { return(rates_total); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { Lots=CalculateLot(Risk); Spread=MarketInfo(_Symbol,MODE_SPREAD); //--- SetLabelText(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectDelete(0,"Lot"); ObjectDelete(0,"Risk"); ObjectDelete(0,"Spread"); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double CalculateLot(double risk) { double Free = NormalizeDouble(AccountFreeMargin() * risk / 100, 2); double MargRec = MarketInfo(Symbol(), MODE_MARGINREQUIRED); double MinLot = MarketInfo(Symbol(), MODE_MINLOT); double MaxLot = MarketInfo(Symbol(), MODE_MAXLOT); double LotResult = 0.0; //--- if(Free!=0 && MargRec!=0) LotResult=NormalizeDouble(Free/MargRec,2); else LotResult=-1; //--- if(LotResult!=-1) { if(MinLot!=0) { if(LotResultMaxLot) LotResult=MaxLot; } } //--- return(LotResult); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void LabelCreate(string name,int x,int y) { ObjectDelete(name); //--- ResetLastError(); //--- if(ObjectCreate(0,name,OBJ_LABEL,0,0,0)) { ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y); ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER); ObjectSetString(0,name,OBJPROP_FONT,"Arial"); ObjectSetInteger(0,name,OBJPROP_FONTSIZE,FontSize); ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR); ObjectSetInteger(0,name,OBJPROP_COLOR,LabelColor); ObjectSetInteger(0,name,OBJPROP_HIDDEN,true); ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false); } else Print("Error: ",GetLastError()); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void SetLabelText() { if(Lots!=-1) ObjectSetString(0,"Lot",OBJPROP_TEXT,"Lot = "+DoubleToString(Lots,2)); else ObjectSetString(0,"Lot",OBJPROP_TEXT,"Lot = NaN"); //--- ObjectSetString(0,"Risk",OBJPROP_TEXT,"Risk = "+DoubleToString(Risk,2)); //--- if(Spread!=0) ObjectSetString(0,"Spread",OBJPROP_TEXT,"Spread = "+DoubleToString(Spread,2)); else ObjectSetString(0,"Spread",OBJPROP_TEXT,"Spread = NaN"); } //+--------------------------------------------------------------------+