Messagebox is closing trades regardless of "Yes" or "No" button clicked
Messagebox is closing trades regardless of "Yes" or "No" button clicked
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"); } } } //+------------------------------------------------------------------+
Checking account access…