TP and SL ten times higher

 

Hello, I made an EA in http://www.forexeadvisor.com/

I have TP set to 90 and SL to 50.

The problem is that upon testing I can see it takes TP 900 and SL 500. In the settings and imput, the values are correct. Changing the values to 9 and 15 doesn't work. Making a manual trade with TP 90 and SL 50 works fine.

Has anyone encountered this problem before?

 
jc_gucci:

Hello, I made an EA in http://www.forexeadvisor.com/

I have TP set to 90 and SL to 50.

The problem is that upon testing I can see it takes TP 900 and SL 500. In the settings and imput, the values are correct. Changing the values to 9 and 15 doesn't work. Making a manual trade with TP 90 and SL 50 works fine.

Has anyone encountered this problem before?

Why doesn't it work ? what errors are you getting ? are you checking return values and reporting errors ? What are Function return values ? How do I use them ?
 

If I change the values to TP 9 and SL 5 a position without any SL or TP opens. (Probably because the minimal values are 50).

 
jc_gucci:

If I change the values to TP 9 and SL 5 a position without any SL or TP opens. (Probably because the minimal values are 50).

If you want to code in mql4 then you need to learn to code . . . shortcuts generally lead to bad code.
 
RaptorUK:
If you want to code in mql4 then you need to learn to code . . . shortcuts generally lead to bad code.


I am aware that my coding skills and forex skills are too low to do any serious trading. I am in the process of learning.

I learned html with a wysiwyg editor. It gives me a head start I can see what my changes actually change in the code and in the end I didn't need the editor any more (I was always aware of how bad the code from a wysiwyg editor is). That is why I use an EA builder.

May process is as follows:

Put my idea in the editor.

Try it out

Find problems.

Try to solve the problems in the editor.

Try to solve the problems in Meta Trader settings.

Try to solve the problem in the code.

If all fails ask in the forum and hope someone encountered the same problem.


My expectations are that someone might tell me what the problem could be and I could edit the code manually to fix it. This way it is more fun because you see direct results of your work and you can try out more complex ideas while learning to code instead of learning to code from scratch.


But back to the problem any idea why is the SL and TP 900/500 instead of 90/50? I know the code sucks but I want to focus at one problem at a time. If you think this code is too bad to even waist time on it I understand.

//+------------------------------------------------------------------+
//|                             EA1 the MA crosser made by Gucci.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//                        DO NOT DELETE THIS HEADER
//             DELETING THIS HEADER IS COPYRIGHT INFRIGMENT 
//
//                   Copyright ©2011, ForexEAdvisor.com
//                 ForexEAdvisor Strategy Builder version 0.2
//                        http://www.ForexEAdvisor.com 
//
// THIS EA CODE HAS BEEN GENERATED USING FOREXEADVISOR STRATEGY BUILDER 0.2 
// on: 7/23/2013 11:07:38 PM
// Disclaimer: This EA is provided to you "AS-IS", and ForexEAdvisor disclaims any warranty
// or liability obligations to you of any kind. 
// UNDER NO CIRCUMSTANCES WILL FOREXEADVISOR BE LIABLE TO YOU, OR ANY OTHER PERSON OR ENTITY,
// FOR ANY LOSS OF USE, REVENUE OR PROFIT, LOST OR DAMAGED DATA, OR OTHER COMMERCIAL OR
// ECONOMIC LOSS OR FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, STATUTORY, PUNITIVE,
// EXEMPLARY OR CONSEQUENTIAL DAMAGES WHATSOEVER RELATED TO YOUR USE OF THIS EA OR 
// FOREXEADVISOR STRATEGY BUILDER     
// Because software is inherently complex and may not be completely free of errors, you are 
// advised to verify this EA. Before using this EA, please read the ForexEAdvisor Strategy Builder
// license for a complete understanding of ForexEAdvisor' disclaimers.  
// USE THIS EA AT YOUR OWN RISK. 
//  
// Before adding this expert advisor to a chart, make sure there are NO
// open positions.
//                      DO NOT DELETE THIS HEADER
//             DELETING THIS HEADER IS COPYRIGHT INFRIGMENT 
//+------------------------------------------------------------------+


extern int MagicNumber=1018;
extern double Lots =0.01;
extern double StopLoss=50;
extern double TakeProfit=90;
extern int TrailingStop=0;
extern int Slippage=3;
//+------------------------------------------------------------------+
//    expert start function
//+------------------------------------------------------------------+
int start()
{
  double MyPoint=Point;
  if(Digits==3 || Digits==5) MyPoint=Point*10;
  
  double TheStopLoss=0;
  double TheTakeProfit=0;
  if( TotalOrdersCount()==0 ) 
  {
     int result=0;
     if((iMA(NULL,0,10,0,MODE_SMA,PRICE_CLOSE,0)>iMA(NULL,0,45,0,MODE_SMA,PRICE_CLOSE,0))&&(iMA(NULL,0,300,0,MODE_SMA,PRICE_CLOSE,0)>iMA(NULL,0,45,0,MODE_SMA,PRICE_CLOSE,0))&&
                         (iMA(NULL,0,10080,0,MODE_SMA,PRICE_CLOSE,0)>iMA(NULL,0,10,0,MODE_SMA,PRICE_CLOSE,0))) // Here is your open buy rule
     {
        result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET);
         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
        }
        return(0);
     }
     if((iMA(NULL,0,10,0,MODE_SMA,PRICE_CLOSE,0)<iMA(NULL,0,45,0,MODE_SMA,PRICE_CLOSE,0))&&(iMA(NULL,0,300,0,MODE_SMA,PRICE_CLOSE,0)<iMA(NULL,0,45,0,MODE_SMA,PRICE_CLOSE,0))&&
                                        (iMA(NULL,0,10080,0,MODE_SMA,PRICE_CLOSE,0)<iMA(NULL,0,10,0,MODE_SMA,PRICE_CLOSE,0))) // Here is your open Sell rule
     {
        result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
        if(result>0)
        {
         TheStopLoss=0;
         TheTakeProfit=0;
         if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
         if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
         OrderSelect(result,SELECT_BY_TICKET);
         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
        }
        return(0);
     }
  }
  
  for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   
         OrderSymbol()==Symbol() &&
         OrderMagicNumber()==MagicNumber 
         )  
        {
         if(OrderType()==OP_BUY)  
           {
            if(TrailingStop>0)  
              {                 
               if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else 
           {
            if(TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
}

int TotalOrdersCount()
{
  int result=0;
  for(int i=0;i<OrdersTotal();i++)
  {
     OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if (OrderMagicNumber()==MagicNumber) result++;

   }
  return (result);
}
 

I also just found out that Meta Trader has problems with MAs with a period bigger than 4000. So please ignore that part.

Sub question:

Even though Meta Trader has a problem showing an indicator with a period bigger than 4000 does it also hove a problem counting with it? ie will the EA work with an MA with a big period? This actually works fine when I test the EA but I back test the EA but I am not sure about live use.

 
jc_gucci:


My expectations are that someone might tell me what the problem could be and I could edit the code manually to fix it. This way it is more fun because you see direct results of your work and you can try out more complex ideas while learning to code instead of learning to code from scratch.

Your code does not check if your trading functions have worked or not, don't you want to know ? and if they didn't work don't you want to know why and what made them fail ?

What are Function return values ? How do I use them ?

 
RaptorUK:

Your code does not check if your trading functions have worked or not, don't you want to know ? and if they didn't work don't you want to know why and what made them fail ?

What are Function return values ? How do I use them ?


Of course I do but as I said, one problem at a time. I think that the fact my SL and TP are different than what I set up is more pressing.


I just started trying things out and learning in the process. I will setup some debug functions once the elementar functionality actually works the way I want it to.

 
jc_gucci:

Of course I do but as I said, one problem at a time. I think that the fact my SL and TP are different than what I set up is more pressing.


I just started trying things out and learning in the process. I will setup some debug functions once the elementar functionality actually works the way I want it to.

There is nothing in the code to prevent a SL of 15 points being set, the SL is not set as part of your OrderSend(), the SL & TP are both set to 0.0 in the OrderSend(), so it is the OrderModify() that sets the SL & TP and it is obviously failing . . . why ?

Hence . . . What are Function return values ? How do I use them ?

 
RaptorUK:

There is nothing in the code to prevent a SL of 15 points being set, the SL is not set as part of your OrderSend(), the SL & TP are both set to 0.0 in the OrderSend(), so it is the OrderModify() that sets the SL & TP and it is obviously failing . . . why ?

Hence . . . What are Function return values ? How do I use them ?


Not in the code but in the platform. I am registered at http://www.ironfx.com/ and I can't set the TP and SL lower than 50 by default.
 
jc_gucci: Not in the code but in the platform. I am registered at WE DON'T CARE and I can't set the TP and SL lower than 50 by default.
  1. That is because your broker does not allow stops closer than 5 pips.
  2. When you registered, perhaps you missed the part about Any discussions except of concerning MetaQuotes Language 4 and auto trading are forbidden. You're off topic for this forum.
Reason: