Great Trading Strategies

Sorry for the late update folks,

The 12:30pm GBP/USD long trade did not reach TP or S/L, and the conditions did not line up for the AU open EUR/USD short trade. That’s all for today; have a great evening session and I will update the board in the morning! :slight_smile:

Good morning friends,

Hopefully you were able to take advantage of the bullish move last night for a bit of profit :). The conditions lined up for the 7am EUR/USD short trade. Here is the setup:

Entry Price: 1.2812
Exit: at the open of the 11am CST bar
S/L: 1.2872
TP: 1.2792

Be careful throughout the trading day today, as we have definitely entered another period of expanding range while the market determines which definite direction to move.

Happy trading!

The conditions did not line up for the 9:30am GBP/USD long trade, but we are still in the 7am EUR/USD short trade until 11am CST.

Next trade: the 12:30pm GBP/USD long trade.

The 7am EUR/USD short trade did not reach TP or S/L today. Next trade: the 12:30pm GBP/USD long trade.

Are there any pending trades I should set up right now? Sorry I am a newbie, just started reading your thread.

Thanks for the post ramlied,

The next trade today is the 12:30pm GBP/USD long trade. Hopefully this helps :slight_smile:

The conditions did not line up for the 12:30pm GBP/USD long trade. Next trade: the 3pm GBP/USD long trade.

tradetilidie - thank you for you quick reply. What’s the setup for the 3pm gbp/usd long trade? I am sorry if you already posted this but i didnt see it below.

The conditions did not line up for the 3pm GBP/USD long trade. Next trade: the AU open EUR/USD short trade.

The conditions lined up for the AU open EUR/USD short trade. Here is the setup:

Entry Price: 1.2857
Exit: at the open of the 7:30pm CST bar
S/L: 1.2897
TP: 1.2847

Based on current price action, I recommend taking this trade with a lesser lot size.

Good luck!

The AU open EUR/USD short trade reached TP. Here is how the trade played out:

Entry Price: 1.2857
Exit Price: 1.2847

Trade length: 6 bars
Profit: 10 pips ($100)

That’s all for today friends. Have a great, successful evening session and I will update the board in the morning. :slight_smile:

Good morning fellow FXers,

Hopefully you had a profitable overnight session and are ready to make some more pips during the US session :slight_smile:

The conditions lined up for the 7am EUR/USD short trade; here is the setup:

Entry Price: 1.2911
Exit: at the open of the 11am CST bar
S/L: 1.2971
TP: 1.2891

Based on current levels, and the overall movement of the pair, I recommend taking this trade with a lesser lot size. Pay close attention to the way the pair moves today, because this will help to indicate whether we are definitely out of the period of expanding range, and if a new direction has been decided.

Good luck!

Hi, I just started reading this thread, and it is really simple to use, AND Program :slight_smile: So I made an EA for it.

The results was not so good, the last couple of years its been totally flat, whil working good up to around the end of 2008 where it just dipped, and went flat :confused:

Do you guys follow any other rules to maximize profit or filtering out bad trades?

[EDIT] There was a bug in my code(mixed Bid/Ask) at closing, this is fixed, but the graph is not updated(wich actually looks worse :frowning: 65% Win ratio, average win 32$ average loss 76.6$


//+------------------------------------------------------------------+
//|                                                	 EasyMoney.mq4 |
//|                                                    not available |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Richard Hagen."
#property link      "not available"

extern bool Trade_Buy = true;
extern bool Trade_Sell = false;
extern string _description2 ="Money managment:";
extern double Risk = 0.02;
extern bool Compounding = false;
extern double Dollars = 100;
extern string _description3 = "Strategy:";
extern double StopLoss = 0.006;
extern double TakeProfit = 0.002;
extern double BuyHour = 7;
extern double BuyMinutes = 0;
extern double CloseHour = 11;


bool TradeOpen = false;
int TradeID = 0;
bool TradeBuy = false;
double TradeSL = 0;


double SL_Value = 0;
double SL_Pips = 0;
double TP_Pips = 0;
double TP_Value = 0;
double TP_Change = 0;
double TP_Level = 1.5;
int LOT_DIGIT = 1;  
int priceStage = 0; //0: Unkown, 1: Over MA, 2: Under MA
double MaxPrice = 0;
double HighPrice = 0;
double LowPrice = 0;
double crossPrice = 0;
double myPrice = 0;
double lastPrice = 0;

double Lts = 0;
int iError = 0;
double orgProfit;
bool borgProfit;


int init() {
   RefreshRates();
   if(MarketInfo(Symbol(),MODE_MINLOT) == 0.1) LOT_DIGIT = 1;
	else if(MarketInfo(Symbol(),MODE_MINLOT) == 0.01) LOT_DIGIT = 2;
	else if(MarketInfo(Symbol(),MODE_MINLOT) == 0.001) LOT_DIGIT = 3;
   
	return(0);
}


int start() {
	if (TradeOpen) {
		///////////////////////////////////////////////////
		// MANAGE TRADE
		// Max_SL, SL_Multiplier, Trialing_Stop, RiskTP
		///////////////////////////////////////////////////
		
		if (OrderSelect(TradeID, SELECT_BY_TICKET, NULL)) {

		    datetime ctm = OrderCloseTime();
		    if (ctm > 0) {
		       //Order is closed
		       TradeID=0;
		       TradeOpen=false;
		    } else {			
		       if (Hour() >= CloseHour) {
		          RefreshRates();
			      if (TradeBuy) OrderClose(TradeID, OrderLots(), Bid, 3);
			      if (!TradeBuy) OrderClose(TradeID, OrderLots(), Ask, 3);
				  //OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), 3, Yellow);
			    }	  
		    }
      } else {
	      //error selecting trade?? wtf
      }
	} else {
		int i;
		if (Function_New_Bar()) {
		///////////////////////////////////////////////////
		// Check if we are buying or selling
		// (MinimumPipsForCross)
		///////////////////////////////////////////////////
			if ((Hour() == 7) && (Minute() == 0)) {
				int signal = 0; // 1= Buy, 2= Sell
				if (Close[1] > Open[1]) signal = 1;
				if (Close[1] < Open[1]) signal = 2;
				switch (signal) {
					case (1): // Price has just crossed over ma_slow
						//BUY!!!
						//extern double StopLoss = 0.006;
                  //extern double TakeProfit = 0.002;
						RefreshRates();
						myPrice = Ask;
						lastPrice = myPrice;
						//SL_Value = Low[1];
						SL_Value = myPrice - StopLoss;
						
						SL_Pips = StopLoss;
						TP_Value = myPrice + TakeProfit;
						
						Lts = Function_LotSize(SL_Pips);
						//LETS TRADE
						Alert("Kjøp: Pris: ", myPrice, " SL: ", SL_Value, " TP: ", TP_Value);
						while (Trade_Buy)  {
							i = OrderSend(Symbol(), OP_BUY, Lts, myPrice,2, SL_Value, TP_Value);
							if (i > 0) {
								//Completed
								orgProfit = TP_Value;
								borgProfit = false;
								TradeOpen = true;
								TradeID = i;
								TradeBuy = true;
								break;
							} else {
								iError=GetLastError();                 // Failed :(
								if (Function_Error(iError, Lts)) continue;
								else break;
							}
						}
						break;
					case (2): // Price has just crossed under ma_slow
						//SELL!!!
						
						RefreshRates();
						myPrice = Bid;
						lastPrice = myPrice;
						SL_Value = myPrice + StopLoss;
						
						SL_Pips = StopLoss;
						TP_Value = myPrice - TakeProfit;
						Lts = Function_LotSize(SL_Pips);
						
						//LETS TRADE
						Alert("Selg: Pris: ", myPrice, " SL: ", SL_Value, " TP: ", TP_Value);
						while (Trade_Sell)  {
							i = OrderSend(Symbol(), OP_SELL, Lts, myPrice,2, SL_Value, TP_Value);
							if (i > 0) {
								//Completed
								TradeOpen = true;
								TradeID = i;
								TradeBuy = false;
								orgProfit = TP_Value;
								borgProfit = false;
								break;
							} else {
								iError=GetLastError();                 // Failed :(
								if (Function_Error(iError, Lts)) continue;
								else break;
							}
						}
						break;
				}
			}
		}
	}
}



///////////////////////////////////////////////////
// SUPPORT FUNCTIONS
///////////////////////////////////////////////////
double Function_LotSize(double SL) {

//extern double Risk = 0.02;
//extern bool Compounding = true;
//extern double LotSize = 0.1;
   
   
   //Get disposable cash
   double Risk_D;
   if (Compounding) {
      Risk_D = AccountEquity() * Risk;  // = 1%
   } else {
      Risk_D = Dollars;
   }
   
   double Min_Lot=MarketInfo(Symbol(),MODE_MINLOT); 
   double One_Lot=MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double Free   =AccountFreeMargin();   
   double PipValue = MarketInfo(Symbol(), MODE_TICKVALUE);
   double Max_Lot = (AccountFreeMargin()*AccountLeverage() / 100000) * 1;
   double Risk_pip_value= Risk_D / SL_Pips;
   int LOT_DIGIT = 1;   
   if(MarketInfo(Symbol(),MODE_MINLOT) == 0.1) LOT_DIGIT = 1;
   else if(MarketInfo(Symbol(),MODE_MINLOT) == 0.01) LOT_DIGIT = 2;
   else if(MarketInfo(Symbol(),MODE_MINLOT) == 0.001) LOT_DIGIT = 3;
   
   double Lts= (Risk_D/(SL_Pips) / 100000); 
   
   Lts = NormalizeDouble(Lts, LOT_DIGIT);
   if (Min_Lot > Lts) Lts = 0;
   if (0.02 > Lts) Lts = 0;
   if (Max_Lot < Lts) Lts = Max_Lot;
   return (Lts);
}

bool Function_Error(int iError, double Lts = 0.0) {
   string msg = "";
   bool ret = false;

   switch(iError){
      case 135:
         msg="The price has changed. Retrying..";
         RefreshRates();                     // Update data
         ret = true;                           // At the next iteration
      case 136:
         msg="No prices. Waiting for a new tick..";
         while(RefreshRates()==false)        // Up to a new tick
            Sleep(1);                        // Cycle delay
         ret = true;                           // At the next iteration
      case 146:
         msg="Trading subsystem is busy. Retrying..";
         Sleep(500);                         // Simple solution
         RefreshRates();                     // Update data
         ret = true;                           // At the next iteration
      case 138:
         msg="ReQute";
         RefreshRates();                     // Update data
         ret = true;                           // At the next iteration
   }
   switch(iError){
   	case 131 : 
   	  msg="Invalid trade volume.";
   	  break;
      case 2 : 
         msg="Common error.";
         break;                              // Exit 'switch'
      case 5 : 
         msg="Outdated version of the client terminal.";
         break;                              // Exit 'switch'
      case 64: 
         msg="The account is blocked.";
         break;                              // Exit 'switch'
      case 133:
         msg="Trading forbidden";
         break;                              // Exit 'switch'
      case 134:
         msg="Not enough money.";
         break;
      default: 
         msg=("Occurred error " + iError);
         break;// Other alternatives   
   }

   if (!ret) Alert(msg, " Lots: ", Lts);
   return(ret);
}

bool Function_New_Bar () {
	static datetime New_Time;
	bool New_Bar = false;
	if (New_Time==0) {
		New_Time = Time[0];
	}
	if (New_Time!= Time[0]) {
		New_Time = Time[0];
		New_Bar = true;
	}
	return(New_Bar);
} 




[EDIT] Updated with new code 17:07 CET 19.01.12 :wink: [/EDIT]


Thanks for the post Richard87,

One of the problems inherent in coding/back-testing these (or any systems) in MT4 is that they are notorious for having a spotty data feed at best for backtesting (especially if you are using a demo account). Also, I notice the following in the code (which I am not an expert at MQL4):

a. In the “int start” method, one of the if statements is “if hour > 11, orderClose.” Why is this set to greater than 11 and not “==11” since we exit the trade at exactly 11 regardless of price action.

b. In the else statement that begins with the declaring of the “int i” variable, why is the combination of the “Hour” var set to 7 and the “Minute” var to “<3”? Shouldn’t this be set to “Minute == 0” since we enter the trade at the exact open of the 7am bar?

c. I may be missing this, but does this program specify that this is only to enter at the open of the 7am bar, if the 6:30am bar closes up?

d. Does this program only count the bars, based on their closed status (bear or bull closes) instead of ticks?

e. Are all of the times in the program set to CST?

f. I am assuming that this is only referencing the 7am EUR/USD short trade, correct?

I appreciate you taking time to code this. I am sure that the entire community who runs the MT4 platform would love to have a copy of this EA to run for themselves and simply adjust the time and bar parameters to account for all of the other trades being taken.

Thoughts? :slight_smile:

The 7am EUR/USD short trade reached TP. Here is how the trade played out:

Entry Price: 1.2911
Exit Price: 1.2891

Trade length: 3 bars
Profit: 20 pips ($200)

The conditions also lined up for the 9:30am GBP/USD long trade. Here is the setup:

Entry Price: 1.5455
Exit: at the open of the 6:30pm CST bar
S/L: 1.5415
TP: 1.5475

Once again, based on current price movement I recommend taking this trade with a lesser lot size.

Good luck!

Hi, I hope I can be to some help :slight_smile:

a. In the “int start” method, one of the if statements is “if hour > 11, orderClose.” Why is this set to greater than 11 and not “==11” since we exit the trade at exactly 11 regardless of price action.
[B]Thx, that is a bug, I have changed that to Hour() >= 11 just to make sure it was closed if there was a bug in metatrader, and in practice, it always closes the trade at 11.[/B]

b. In the else statement that begins with the declaring of the “int i” variable, why is the combination of the “Hour” var set to 7 and the “Minute” var to “<3”? Shouldn’t this be set to “Minute == 0” since we enter the trade at the exact open of the 7am bar?
[B]Mostly the same as abowe, if there for some reason does not open a bar at 7:00 but at 7:04 it wont open the trade[/B]

c. I may be missing this, but does this program specify that this is only to enter at the open of the 7am bar, if the 6:30am bar closes up?
[B]This functions make sure the close of the last completed bar(the current is [0]) is over the Open[/B]

if (Close[1] > Open[1]) signal = 1;

d. Does this program only count the bars, based on their closed status (bear or bull closes) instead of ticks?
[B]I have run the program with every tick(I use the metacorps data history, so it is incomplete, I have also used the 30m TF[/B]

e. Are all of the times in the program set to CST?
[B]I have no idea, I belive it is tho, as the clock right now in metatrader is 10:59[EDIT]Oandas data feed shows this, I dont know if MeatQuotes data has the same timestamp or something else?[/EDIT][/B]

f. I am assuming that this is only referencing the 7am EUR/USD short trade, correct?
[B]Yes :slight_smile: [/B]

Give me a moment, and I will update the EA with the bug fixes :wink:

Would it be possible to tweak your EA to count closed bar status only, and not ticks? Also, would you be able to make the time and bar status (bear or bull bar) editable from the Expert Advisors window in MT4? The other thing I am wondering about is if it is possible to tell it to enter exactly at a time, and exit exactly at a time using “==” rather than “>=”…This would allow all of us in the community that place these trades manually, to place them automatically using an EA (of course we would need to test it first to verify that it is entering and exiting trades as desired).

Thoughts? Thanks again for your contribution :slight_smile:

Hi, I am not sure what you mean about tick data/bar count?
the EA just checks the last completed candle at 7:00 (now handled with BuyHour and BuyMinute :smiley: ) and if that closes up from open price, it is a buy, and if it closes down from open it is a sell.

And now the ea buys(or sells if you want it to, Trade_Buy and Trade_Sell controlls that part) at the first tick that comes in on the 7:00 candle :slight_smile:

And it will also close the trade at the first tick after specified time( or later just for security :slight_smile: )

so here is the new ea:


//+------------------------------------------------------------------+
//|                                                	 EasyMoney.mq4 |
//|                                                    not available |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Richard Hagen."
#property link      "not available"

extern bool Trade_Buy = true;
extern bool Trade_Sell = false;
extern string _description2 ="Money managment:";
extern double Risk = 0.02;
extern bool Compounding = false;
extern double Dollars = 100;
extern string _description3 = "Strategy:";
extern double StopLoss = 0.006;
extern double TakeProfit = 0.002;
extern double BuyHour = 7;
extern double BuyMinutes = 0;
extern double CloseHour = 11;
extern double CloseMinutes = 0;


bool TradeOpen = false;
int TradeID = 0;
bool TradeBuy = false;
double TradeSL = 0;


double SL_Value = 0;
double SL_Pips = 0;
double TP_Pips = 0;
double TP_Value = 0;
double TP_Change = 0;
double TP_Level = 1.5;
int LOT_DIGIT = 1;  
int priceStage = 0; //0: Unkown, 1: Over MA, 2: Under MA
double MaxPrice = 0;
double HighPrice = 0;
double LowPrice = 0;
double crossPrice = 0;
double myPrice = 0;
double lastPrice = 0;

double Lts = 0;
int iError = 0;
double orgProfit;
bool borgProfit;


int init() {
   RefreshRates();
   if(MarketInfo(Symbol(),MODE_MINLOT) == 0.1) LOT_DIGIT = 1;
	else if(MarketInfo(Symbol(),MODE_MINLOT) == 0.01) LOT_DIGIT = 2;
	else if(MarketInfo(Symbol(),MODE_MINLOT) == 0.001) LOT_DIGIT = 3;
   
	return(0);
}


int start() {
	if (TradeOpen) {
		///////////////////////////////////////////////////
		// MANAGE TRADE
		// Max_SL, SL_Multiplier, Trialing_Stop, RiskTP
		///////////////////////////////////////////////////
		
		if (OrderSelect(TradeID, SELECT_BY_TICKET, NULL)) {

		    datetime ctm = OrderCloseTime();
		    if (ctm > 0) {
		       //Order is closed
		       TradeID=0;
		       TradeOpen=false;
		    } else {			
		       if ((Hour() >= CloseHour) && (Minute() >= CloseMinutes)) {
		          RefreshRates();
			      if (TradeBuy) OrderClose(TradeID, OrderLots(), Bid, 3);
			      if (!TradeBuy) OrderClose(TradeID, OrderLots(), Ask, 3);
				  //OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), 3, Yellow);
			    }	  
		    }
      } else {
	      //error selecting trade?? wtf
      }
	} else {
		int i;
		if (Function_New_Bar()) {
		///////////////////////////////////////////////////
		// Check if we are buying or selling
		// (MinimumPipsForCross)
		///////////////////////////////////////////////////
			if ((Hour() == BuyHour) && (Minute() == BuyMinutes)) {
				int signal = 0; // 1= Buy, 2= Sell
				if (Close[1] > Open[1]) signal = 1;
				if (Close[1] < Open[1]) signal = 2;
				switch (signal) {
					case (1): // Price has just crossed over ma_slow
						//BUY!!!
						//extern double StopLoss = 0.006;
                  //extern double TakeProfit = 0.002;
						RefreshRates();
						myPrice = Ask;
						lastPrice = myPrice;
						//SL_Value = Low[1];
						SL_Value = myPrice - StopLoss;
						
						SL_Pips = StopLoss;
						TP_Value = myPrice + TakeProfit;
						
						Lts = Function_LotSize(SL_Pips);
						//LETS TRADE
						Alert("Kjøp: Pris: ", myPrice, " SL: ", SL_Value, " TP: ", TP_Value);
						while (Trade_Buy)  {
							i = OrderSend(Symbol(), OP_BUY, Lts, myPrice,2, SL_Value, TP_Value);
							if (i > 0) {
								//Completed
								orgProfit = TP_Value;
								borgProfit = false;
								TradeOpen = true;
								TradeID = i;
								TradeBuy = true;
								break;
							} else {
								iError=GetLastError();                 // Failed :(
								if (Function_Error(iError, Lts)) continue;
								else break;
							}
						}
						break;
					case (2): // Price has just crossed under ma_slow
						//SELL!!!
						
						RefreshRates();
						myPrice = Bid;
						lastPrice = myPrice;
						SL_Value = myPrice + StopLoss;
						
						SL_Pips = StopLoss;
						TP_Value = myPrice - TakeProfit;
						Lts = Function_LotSize(SL_Pips);
						
						//LETS TRADE
						Alert("Selg: Pris: ", myPrice, " SL: ", SL_Value, " TP: ", TP_Value);
						while (Trade_Sell)  {
							i = OrderSend(Symbol(), OP_SELL, Lts, myPrice,2, SL_Value, TP_Value);
							if (i > 0) {
								//Completed
								TradeOpen = true;
								TradeID = i;
								TradeBuy = false;
								orgProfit = TP_Value;
								borgProfit = false;
								break;
							} else {
								iError=GetLastError();                 // Failed :(
								if (Function_Error(iError, Lts)) continue;
								else break;
							}
						}
						break;
				}
			}
		}
	}
}



///////////////////////////////////////////////////
// SUPPORT FUNCTIONS
///////////////////////////////////////////////////
double Function_LotSize(double SL) {

//extern double Risk = 0.02;
//extern bool Compounding = true;
//extern double LotSize = 0.1;
   
   
   //Get disposable cash
   double Risk_D;
   if (Compounding) {
      Risk_D = AccountEquity() * Risk;  // = 1%
   } else {
      Risk_D = Dollars;
   }
   
   double Min_Lot=MarketInfo(Symbol(),MODE_MINLOT); 
   double One_Lot=MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double Free   =AccountFreeMargin();   
   double PipValue = MarketInfo(Symbol(), MODE_TICKVALUE);
   double Max_Lot = (AccountFreeMargin()*AccountLeverage() / 100000) * 1;
   double Risk_pip_value= Risk_D / SL_Pips;
   int LOT_DIGIT = 1;   
   if(MarketInfo(Symbol(),MODE_MINLOT) == 0.1) LOT_DIGIT = 1;
   else if(MarketInfo(Symbol(),MODE_MINLOT) == 0.01) LOT_DIGIT = 2;
   else if(MarketInfo(Symbol(),MODE_MINLOT) == 0.001) LOT_DIGIT = 3;
   
   double Lts= (Risk_D/(SL_Pips) / 100000); 
   
   Lts = NormalizeDouble(Lts, LOT_DIGIT);
   if (Min_Lot > Lts) Lts = 0;
   if (0.02 > Lts) Lts = 0;
   if (Max_Lot < Lts) Lts = Max_Lot;
   return (Lts);
}

bool Function_Error(int iError, double Lts = 0.0) {
   string msg = "";
   bool ret = false;

   switch(iError){
      case 135:
         msg="The price has changed. Retrying..";
         RefreshRates();                     // Update data
         ret = true;                           // At the next iteration
      case 136:
         msg="No prices. Waiting for a new tick..";
         while(RefreshRates()==false)        // Up to a new tick
            Sleep(1);                        // Cycle delay
         ret = true;                           // At the next iteration
      case 146:
         msg="Trading subsystem is busy. Retrying..";
         Sleep(500);                         // Simple solution
         RefreshRates();                     // Update data
         ret = true;                           // At the next iteration
      case 138:
         msg="ReQute";
         RefreshRates();                     // Update data
         ret = true;                           // At the next iteration
   }
   switch(iError){
   	case 131 : 
   	  msg="Invalid trade volume.";
   	  break;
      case 2 : 
         msg="Common error.";
         break;                              // Exit 'switch'
      case 5 : 
         msg="Outdated version of the client terminal.";
         break;                              // Exit 'switch'
      case 64: 
         msg="The account is blocked.";
         break;                              // Exit 'switch'
      case 133:
         msg="Trading forbidden";
         break;                              // Exit 'switch'
      case 134:
         msg="Not enough money.";
         break;
      default: 
         msg=("Occurred error " + iError);
         break;// Other alternatives   
   }

   if (!ret) Alert(msg, " Lots: ", Lts);
   return(ret);
}

bool Function_New_Bar () {
	static datetime New_Time;
	bool New_Bar = false;
	if (New_Time==0) {
		New_Time = Time[0];
	}
	if (New_Time!= Time[0]) {
		New_Time = Time[0];
		New_Bar = true;
	}
	return(New_Bar);
} 


PS, I am starting putting together some statistics for the bot about average trade duration, average time for TP and average time for SL :slight_smile:

The conditions did not line up for the 12:30pm GBP/USD long trade, but the 9:30am GBP/USD long trade reached TP. Here is how the trade played out:

Entry Price: 1.5455
Exit Price: 1.5475

Trade length: 0 bars
Profit: 20 pips ($200)

Next trade: the 3pm GBP/USD long trade.

I am checking it out now on my MT4 platform. Thanks again! :slight_smile: I’ll let you know if I run into anything :slight_smile: