What while loop?
Simon Liu:
Hi,
In my code i have two lines EntryPriceLine and StopLossLine
If i drag my EntryPriceLine i would like to have real time feedback of the StopLossLine.
So the two lines should always be 12 pips apart. Even while dragging.
I thought using a while loop and WindowRedraw() would fix this, but if i let go of my mousebutton the script is still stuck in the while-loop. As if im still dragging.
Anyone can help? I am using MT4
Please, share the complete code.
Keith Watford:
What while loop?
What while loop?
I edited the code. (if to while). Was testing things late night.
Andrey Barinov:
Please, share the complete code.
#include <Controls/Button.mqh> CButton CloseEA; CButton DrawEP; CButton Scalp; bool drawLine = false; int magic0 = 0654; int magic1 = 1987; int magic2 = 2234; int magic3 = 3363; //Percentage of available balance to risk in each individual trade extern double MaxRiskPerTrade=1; //% of balance to risk in one trade extern double StopLoss=16; //Stop Loss in pips extern double TimeToClose=10; //Time after which scalp-orders cancel bool SetEntryPrice = false; //int x = 0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //DrawEP button DrawEP.Create(0,"DrawEP",0,20,20,50,50); DrawEP.Text(CharToStr(33)); DrawEP.Font("Wingdings"); DrawEP.FontSize(12); DrawEP.Color(clrBlack); DrawEP.ColorBackground(clrAquamarine); DrawEP.ColorBorder(clrBlack); //Close EA button CloseEA.Create(0,"CloseEA",0,20,50,50,80); CloseEA.Text("X"); CloseEA.Font("Verdana"); CloseEA.FontSize(12); CloseEA.Color(clrWhite); CloseEA.ColorBackground(clrRed); //CloseEA.ColorBorder(clrBlack); //Scalp button Scalp.Create(0,"Scalp",0,0,170,50,230); Scalp.Text("Scalp"); Scalp.FontSize(12); Scalp.Color(clrRed); Scalp.ColorBackground(clrKhaki); Scalp.ColorBorder(clrBlack); ObjectCreate("TextBox", "TextBox", OBJ_BUTTON,0,0,0); ObjectSetText("TextBox",""); ObjectSetInteger("TextBox","TextBox",OBJPROP_XDISTANCE, 0); ObjectSetInteger("TextBox","TextBox",OBJPROP_YDISTANCE, 230); ObjectSetInteger("TextBox","TextBox",OBJPROP_XSIZE,200); ObjectSetInteger("TextBox","TextBox",OBJPROP_YSIZE, 100); ObjectCreate("StoplossText", OBJ_LABEL, 0, 0, 0); ObjectSetText("StoplossText","Stoploss:",14, "Verdana", clrBlack); ObjectSet("StoplossText", OBJPROP_CORNER, 0); ObjectSet("StoplossText", OBJPROP_XDISTANCE, 0); ObjectSet("StoplossText", OBJPROP_YDISTANCE, 240); ObjectCreate("Stoploss",OBJ_EDIT,0,0,0); ObjectSetText("Stoploss", DoubleToStr(StopLoss,0),20, "Verdana", clrBlack); ObjectSet("Stoploss", OBJPROP_CORNER, 0); ObjectSet("Stoploss", OBJPROP_XDISTANCE, 120); ObjectSet("Stoploss", OBJPROP_YDISTANCE, 242); ObjectSet("StopLoss",OBJPROP_BGCOLOR, clrWhite); ObjectCreate("MaxRiskPerTradeText", OBJ_LABEL, 0, 0, 0); ObjectSetText("MaxRiskPerTradeText","Risk:",14, "Verdana", clrBlack); ObjectSet("MaxRiskPerTradeText", OBJPROP_CORNER, 0); ObjectSet("MaxRiskPerTradeText", OBJPROP_XDISTANCE, 0); ObjectSet("MaxRiskPerTradeText", OBJPROP_YDISTANCE, 262); ObjectCreate("MaxRiskPerTrade",OBJ_EDIT,0,0,0); ObjectSetText("MaxRiskPerTrade",DoubleToStr(MaxRiskPerTrade,2),20, "Verdana", clrBlack); ObjectSet("MaxRiskPerTrade", OBJPROP_CORNER, 0); ObjectSet("MaxRiskPerTrade", OBJPROP_XDISTANCE, 120); ObjectSet("MaxRiskPerTrade", OBJPROP_YDISTANCE, 264); ObjectCreate("TimeToCloseText", OBJ_LABEL, 0, 0, 0); ObjectSetText("TimeToCloseText","Close time:",14, "Verdana", clrBlack); ObjectSet("TimeToCloseText", OBJPROP_CORNER, 0); ObjectSet("TimeToCloseText", OBJPROP_XDISTANCE, 0); ObjectSet("TimeToCloseText", OBJPROP_YDISTANCE, 284); ObjectCreate("TimeToClose",OBJ_EDIT,0,0,0); ObjectSetText("TimeToClose",DoubleToStr(TimeToClose,0),20, "Verdana", clrBlack); ObjectSet("TimeToClose", OBJPROP_CORNER, 0); ObjectSet("TimeToClose", OBJPROP_XDISTANCE, 120); ObjectSet("TimeToClose", OBJPROP_YDISTANCE, 286); //Convert points to Pips StopLoss = StopLoss *10; //--- return(INIT_SUCCEEDED); } void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //Print("The coordinates of the mouse click on the chart are: x = ",lparam," y = ",dparam); datetime time; double price; int subwindow; ChartXYToTimePrice(0,lparam,dparam,subwindow,time,price); if(id==CHARTEVENT_OBJECT_CLICK && sparam=="DrawEP") { //set stoploss StopLoss = 10*StrToDouble(ObjectDescription("Stoploss")); //place horizontal line at current pric ObjectCreate("EntrypriceLine","EntrypriceLine",OBJ_HLINE,0,0,Bid); ObjectSetInteger("EntrypriceLine","EntrypriceLine",OBJPROP_COLOR,clrBlack); ObjectSetInteger("EntryPriceLine","EntrypriceLine",OBJPROP_SELECTED, TRUE); //ObjectSetText("EntryPriceLine",DoubleToStr(ObjectGet("EntryPrice",OBJPROP_PRICE1)),12); //ObjectSetText("EntryPriceLine","test",12); ObjectCreate("EntryPriceText", "EntryPriceText",OBJ_TEXT, 0,Time[0],Bid+50*Point); //ObjectSetText("EntryPriceText",DoubleToStr(ObjectGet("EntryPrice",OBJPROP_PRICE1),5),14, "Verdana", clrBlack); ObjectSetText("EntryPriceText","Open",14, "Verdana", clrBlack); //place stoploss line ObjectCreate("StopLossLine","StopLossLine",OBJ_HLINE,0,0,(Bid-StopLoss*Point)); ObjectSetInteger("StopLossLine","StopLossLine",OBJPROP_COLOR,clrRed); ObjectSetInteger("StopLossLine","StopLossLine",OBJPROP_SELECTED, TRUE); } if(id==CHARTEVENT_OBJECT_DRAG && sparam=="EntrypriceLine") { Print(ObjectGet("EntrypriceLine",OBJPROP_PRICE1)); ObjectMove("EntryPriceText","EntryPriceText",0,Time[0],ObjectGet("EntrypriceLine",OBJPROP_PRICE1)+50*Point); ObjectMove("StopLossLine", "StopLossLine",0,0,ObjectGet("EntrypriceLine",OBJPROP_PRICE1)-StopLoss*Point); WindowRedraw(); } }
![MQL5 - Language of trade strategies built-in the MetaTrader 5 client terminal](https://c.mql5.com/i/registerlandings/logo-2.png)
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Hi,
In my code i have two lines EntryPriceLine and StopLossLine
If i drag my EntryPriceLine i would like to have real time feedback of the StopLossLine.
So the two lines should always be 12 pips apart. Even while dragging.
I thought using a while loop and WindowRedraw() would fix this, but if i let go of my mousebutton the script is still stuck in the while-loop. As if im still dragging.
Anyone can help? I am using MT4