Messagebox is closing trades regardless of "Yes" or "No" button clicked

Messagebox is closing trades regardless of "Yes" or "No" button clicked

Manage alerts

Loading saved threads...

user14476920 · External communityPost link
External question — Stack Overflow Stack Exchange Author: user14476920 Original post: https://stackoverflow.com/questions/66428544 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. This has genuinely got to be one of the must ludicrous, most ridiculous situation I have even been in with this coding language. Is there any reason as to why my trades are closing, regardless as to the button pressed on the prompted Messagebox - despite the fact my EA is only supposed to close trade when the IDYES button is selected? I click the IDYES button, my trade liquidates, I click the IDNO button, my trade liquidates. Why is me EA doing things I have not told it to do? The word "fuming" cannot express enough how I'm feeling. Here is the snippet below: //+------------------------------------------------------------------+ //| initialization_test.mq4 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ datetime LastActiontime; bool totalOrders = OrdersTotal(); double currencyConversion; double tradeSpread; int ordersTotal; int OnInit() { //--- LastActiontime=Time[0]; if (totalOrders == 0){ totalOrders = true; } //--- return(INIT_SUCCEEDED); } void OnTick() { //--- int LotSize = 1; int RewardFactor = 3; int stopLossPoints = 200; double entryPriceBid = MarketInfo(Symbol(),MODE_BID); double spread = MarketInfo(Symbol(), MODE_SPREAD); double tickvalue = MarketInfo(Symbol(), MODE_TICKVALUE); color sellcolor = clrGreen; bool Newbar = true; currencyConversion = 100000/(tickvalue * 100000); tradeSpread = (spread * tickvalue)*LotSize; if(LastActiontime!=Time[0]) if(OrdersTotal() == 0) if(totalOrders == true){ bool OpenShort = OrderSend(Symbol(),OP_BUY,LotSize,MarketInfo(Symbol(),MODE_BID),100,((entryPriceBid/Point)-(stopLossPoints))*Point,((entryPriceBid/Point)+(stopLossPoints*RewardFactor))*Point,"Spread Charge £"+DoubleToStr((spread * tickvalue)*LotSize,2),Period(),0,sellcolor); LastActiontime=Time[0]; if (OpenShort == true){ bool msgBox = MessageBox("Please confirm the risk on this trade with the margin at the bottom of the terminal. Would you liketo close this trade?"+ "\n"+ "\n£"+DoubleToStr(((tickvalue * LotSize)*stopLossPoints)+ tradeSpread,2),"Information", MB_YESNO|MB_ICONQUESTION|MB_TOPMOST); if (msgBox = IDYES){ ordersTotal = OrdersTotal(); for(int b=ordersTotal-1;b>=0;b--){ if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)==true){ bool closeOrder = OrderClose(OrderTicket(),LotSize,MarketInfo(Symbol(),MODE_BID),300,clrAqua); } } } if (msgBox = IDNO){ return; } Print("The tick value used for this EA is £ "+DoubleToStr(tickvalue , 5)+" and the conversion is "+DoubleToStr(currencyConversion,5)); SendMail("You have opened a position","You have opened a position"); } } } //+------------------------------------------------------------------+
Quote
Report
PaulB · External communityPost link
External answer — Stack Overflow Stack Exchange Author: PaulB Original post: https://stackoverflow.com/a/66458598 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. You have defined the return value from your MessageBox as Boolean, however it should be of type int. int MessageBox(string text, string caption=NULL, int flags=0); Change your code to int msgBox = MessageBox("Please confirm the risk on this trade with the margin at the bottom of the terminal. Would you liketo close this trade?"+ "\n"+ "\n£"+DoubleToStr(((tickvalue * LotSize)*stopLossPoints)+ tradeSpread,2),"Information", MB_YESNO|MB_ICONQUESTION|MB_TOPMOST);
Quote
Report

Post Reply

Quoted from Forex.com.bd-Editorial External question — Stack Overflow Stack Exchange Author: user14476920 Source score (net votes, not local likes): -2 Original post: https://stackoverflow.com/questions/66428544 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. This has genuinely got to be one of the must ludicrous, most ridiculous situation I have even been in with this coding language. Is there any reason as to why my trades are closing, regardless as to the button pressed on the prompted Messagebox - despite the fact my EA is only supposed to close trade when the IDYES button is selected? I click the IDYES button, my trade liquidates, I click the IDNO button, my trade liquidates. Why is me EA doing things I have not told it to do? The word "fuming" cannot express enough how I'm feeling. Here is the snippet below: //+------------------------------------------------------------------+ //| initialization_test.mq4 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ datetime LastActiontime; bool totalOrders = OrdersTotal(); double currencyConversion; double tradeSpread; int ordersTotal; int OnInit() { //--- LastActiontime=Time[0]; if (totalOrders == 0){ totalOrders = true; } //--- return(INIT_SUCCEEDED); } void OnTick() { //--- int LotSize = 1; int RewardFactor = 3; int stopLossPoints = 200; double entryPriceBid = MarketInfo(Symbol(),MODE_BID); double spread = MarketInfo(Symbol(), MODE_SPREAD); double tickvalue = MarketInfo(Symbol(), MODE_TICKVALUE); color sellcolor = clrGreen; bool Newbar = true; currencyConversion = 100000/(tickvalue * 100000); tradeSpread = (spread * tickvalue)*LotSize; if(LastActiontime!=Time[0]) if(OrdersTotal() == 0) if(totalOrders == true){ bool OpenShort = OrderSend(Symbol(),OP_BUY,LotSize,MarketInfo(Symbol(),MODE_BID),100,((entryPriceBid/Point)-(stopLossPoints))*Point,((entryPriceBid/Point)+(stopLossPoints*RewardFactor))*Point,"Spread Charge £"+DoubleToStr((spread * tickvalue)*LotSize,2),Period(),0,sellcolor); LastActiontime=Time[0]; if (OpenShort == true){ bool msgBox = MessageBox("Please confirm the risk on this trade with the margin at the bottom of the terminal. Would you liketo close this trade?"+ "\n"+ "\n£"+DoubleToStr(((tickvalue * LotSize)*stopLossPoints)+ tradeSpread,2),"Information", MB_YESNO|MB_ICONQUESTION|MB_TOPMOST); if (msgBox = IDYES){ ordersTotal = OrdersTotal(); for(int b=ordersTotal-1;b>=0;b--){ if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)==true){ bool closeOrder = OrderClose(OrderTicket(),LotSize,MarketInfo(Symbol(),MODE_BID),300,clrAqua); } } } if (msgBox = IDNO){ return; } Print("The tick value used for this EA is £ "+DoubleToStr(tickvalue , 5)+" and the conversion is "+DoubleToStr(currencyConversion,5)); SendMail("You have opened a position","You have opened a position"); } } } //+------------------------------------------------------------------+

Cancel quote

Checking account access…