Download MetaTrader 5

Some part of my codes are not working ...... a little help here ^_^ ?

To add comments, please log in or register
You can test an application before buying it. Find out how to do that!
mrwayne
252
mrwayne 2013.12.20 17:35 

I'm planning to do a buy script for currency pairs which can set a SL and TP level FROM THE ENTRY PRICE which WORKS WITH 2,3,4,5 digits broker . Can someone help me to double check it, the SL and TP are not working .

The way I do it was execute a trade FIRST, then only it will modify to add in the SL and TP level FROM THE ENTRY PRICE . Not adding SL and TP at the instant the order is sent . The 2,3,4,5 digits broker however, not so sure, need an eye for that .

//+------------------------------------------------------------------+
//|                                               Scalping - Buy.mq4 |
//|                  This script belongs to the property of Icey Jr. |
//|                                                                  |
//+------------------------------------------------------------------+


#property copyright "This script belongs to the property of Icey Jr."
#property link ""


//+------------------------------------------------------------------+
//| Script program's external variables                              |
//+------------------------------------------------------------------+
//#property show_inputs

   extern double  FixedLotSize = 0.01 ;
   extern int     Slippage = 2 ;
   extern int     StopLoss = 20 ;
   extern int     TakeProfit = 40 ;
   extern string  TradeComment = "" ;
   extern int     MagicNumber = 131484 ;
//+------------------------------------------------------------------+





//+------------------------------------------------------------------+
//| Script initialize program's function                             |
//+------------------------------------------------------------------+
   int Multiplier ;
   
   
   
      int init()
      {
      
         if ( Digits == 2 )
         Multiplier = 0.01 ;
         if ( Digits == 3 )
         Multiplier = 0.001 * 10 ;
         if ( Digits == 4 )
         Multiplier = 0.0001 ;
         if ( Digits == 5 )
         Multiplier = 0.00001 * 10 ;
         
      return ( 0 ) ;
      }
//+------------------------------------------------------------------+





//+------------------------------------------------------------------+
//| Script start program's function                                  |
//+------------------------------------------------------------------+
   int start()
     {
   
         bool   TradeExists ;
         int    Ticket ;
         int    TradesSent = 0 ;
         double StopLossSettings ;
         double TakeProfitSettings ;
   
   
   
            if ( StopLoss == 0 )
            StopLossSettings = NULL ;
            else
            StopLossSettings = OrderOpenPrice() - ( StopLoss * Multiplier ) ;
            if ( TakeProfit == 0 )
            TakeProfitSettings = NULL ;
            else
            TakeProfitSettings = OrderOpenPrice() + ( TakeProfit * Multiplier ) ;
            
            
            TradeExists = CheckIfTradeAlreadyExists ( Symbol() ) ;
            if ( !TradeExists )
            Ticket = OrderSend ( Symbol() , OP_BUY , FixedLotSize , MarketInfo ( Symbol() , MODE_ASK ) , Slippage , NULL , NULL , TradeComment , MagicNumber , 0 , CLR_NONE ) ;
            if ( Ticket > -1 )
            OrderModify ( Ticket , OrderOpenPrice() , StopLossSettings , TakeProfitSettings , 0 , CLR_NONE ) ;
            if ( Ticket > -1 )
            TradesSent++ ;
   
   
            MessageBox ( TradesSent + " " + Symbol() + " trade had executed successfully :) " , " Information " ) ;
   
   return ( 0 ) ;
   }
//+------------------------------------------------------------------+





//+------------------------------------------------------------------+
//| Script program's sub-function                                    |
//+------------------------------------------------------------------+
   bool CheckIfTradeAlreadyExists ( string Emblem )
   {
      
      if ( OrdersTotal() == 0 )
      return ( False ) ;
      
      
      for ( int cc = 0 ; cc < OrdersTotal() ; cc++ )
      {
         OrderSelect ( cc , SELECT_BY_POS ) ; 
         
         if ( OrderSymbol() == Emblem && OrderMagicNumber() == MagicNumber ) 
         return ( True ) ;
      }
      
   return ( False ) ;
   }
//+------------------------------------------------------------------+
Simon Gniadkowski
Moderator
17999
Simon Gniadkowski 2013.12.20 17:38  
juniorlcq:

I'm planning to do a buy script for currency pairs which can set a SL and TP level FROM THE ENTRY PRICE which WORKS WITH 2,3,4,5 digits broker . Can someone help me to double check it, the SL and TP are not working .

The way I do it was execute a trade FIRST, then only it will modify to add in the SL and TP level FROM THE ENTRY PRICE . Not adding SL and TP at the instant the order is sent . The 2,3,4,5 digits broker however, not so sure, need an eye for that .

You need to check the return values from your trading functions . . . then report the error when they fail along with any relevant variables, please read this: What are Function return values ? How do I use them ?
Keith Watford
Moderator
9620
Keith Watford 2013.12.20 22:23  

How do you get the OrderOpenPrice() before you have even sent the order?

if ( StopLoss == 0 )
            StopLossSettings = NULL ;
            else
            StopLossSettings = OrderOpenPrice() - ( StopLoss * Multiplier ) ;
            if ( TakeProfit == 0 )
            TakeProfitSettings = NULL ;
            else
            TakeProfitSettings = OrderOpenPrice() + ( TakeProfit * Multiplier ) ;
            
            
            TradeExists = CheckIfTradeAlreadyExists ( Symbol() ) ;
            if ( !TradeExists )
            Ticket = OrderSend ( Symbol() , OP_BUY , FixedLotSize , MarketInfo ( Symbol() , MODE_ASK ) , Slippage , NULL , NULL , TradeComment , MagicNumber , 0 , CLR_NONE ) ;
            if ( Ticket > -1 )
            OrderModify ( Ticket , OrderOpenPrice() , StopLossSettings , TakeProfitSettings , 0 , CLR_NONE ) ;
            if ( Ticket > -1 )
            TradesSent++ ;

You need to send the order, then select Ticket, THEN do the calculations for SL and TP before modifying the order

mrwayne
252
mrwayne 2013.12.21 10:24  
I put the SL and TP calculation AFTER the OrderModify .... What about the multiplier above, does it work for 2,3,4,5 digits broker ??
mrwayne
252
mrwayne 2013.12.23 15:12  

I've tried correcting my code around but still not working ... Let me show you the latest one, and is anyone out there who is kind enough to help me figure it out ? I tried here and there but the TP and SL is not working still .... hmmmmmmmmmmmmmmmmmmph can someone help me to correct it ??

//+------------------------------------------------------------------+
//|                                               Scalping - Buy.mq4 |
//|                  This script belongs to the property of Icey Jr. |
//|                                                                  |
//+------------------------------------------------------------------+


#property copyright "This script belongs to the property of Icey Jr."
#property link ""


//+------------------------------------------------------------------+
//| Script program's external variables                              |
//+------------------------------------------------------------------+
//#property show_inputs

   extern double  FixedLotSize = 0.01 ;
   extern int     Slippage = 2 ;
   extern double  StopLoss = 20.0 ;
   extern double  TakeProfit = 40.0 ;
   extern string  TradeComment = "" ;
   extern int     MagicNumber = 131484 ;
//+------------------------------------------------------------------+





//+------------------------------------------------------------------+
//| Script initialize program's function                             |
//+------------------------------------------------------------------+
   double Multiplier ;
   
   
   
      int init()
      {
      
         if ( Digits == 2 )
         Multiplier = 0.01 ;
         if ( Digits == 3 )
         Multiplier = 0.001 * 10 ;
         if ( Digits == 4 )
         Multiplier = 0.0001 ;
         if ( Digits == 5 )
         Multiplier = 0.00001 * 10 ;
         
      return ( 0 ) ;
      }
//+------------------------------------------------------------------+





//+------------------------------------------------------------------+
//| Script start program's function                                  |
//+------------------------------------------------------------------+
   int start()
     {
   
         bool   TradeExists ;
         int    Ticket ;
         int    TradesSent = 0 ;
         double StopLossSettings ;
         double TakeProfitSettings ;
   
   
   
            TradeExists = CheckIfTradeAlreadyExists ( Symbol() ) ;
            if ( !TradeExists )
            Ticket = OrderSend ( Symbol() , OP_BUY , FixedLotSize , MarketInfo ( Symbol() , MODE_ASK ) , Slippage , NULL , NULL , TradeComment , MagicNumber , 0 , CLR_NONE ) ;
            if ( Ticket > -1 )
            TradesSent++ ;
            
            
            if ( Ticket > -1 )
            OrderModify ( Ticket , OrderOpenPrice() , StopLossSettings , TakeProfitSettings , 0 , CLR_NONE ) ;
            
            
            if ( OrderType() == OP_BUY )
            {
               if ( StopLoss == 0 )
               StopLossSettings = NULL ;
               else
               StopLossSettings = OrderOpenPrice() - ( StopLoss * Multiplier ) ;
               
               if ( TakeProfit == 0 )
               TakeProfitSettings = NULL ;
               else
               TakeProfitSettings = OrderOpenPrice() + ( TakeProfit * Multiplier ) ;
            }
            
            
            if ( OrderType() == OP_SELL )
            {
               if ( StopLoss == 0 )
               StopLossSettings = NULL ;
               else
               StopLossSettings = OrderOpenPrice() + ( StopLoss * Multiplier ) ;
               
               if ( TakeProfit == 0 )
               TakeProfitSettings = NULL ;
               else
               TakeProfitSettings = OrderOpenPrice() - ( TakeProfit * Multiplier ) ;
            }
   
   
            MessageBox ( TradesSent + " " + Symbol() + " trade had executed successfully :) " , " Information " ) ;
   
   return ( 0 ) ;
   }
//+------------------------------------------------------------------+





//+------------------------------------------------------------------+
//| Script program's sub-function                                    |
//+------------------------------------------------------------------+
   bool CheckIfTradeAlreadyExists ( string Emblem )
   {
      
      if ( OrdersTotal() == 0 )
      return ( False ) ;
      
      
      for ( int cc = 0 ; cc < OrdersTotal() ; cc++ )
      {
         OrderSelect ( cc , SELECT_BY_POS ) ; 
         
         if ( OrderSymbol() == Emblem && OrderMagicNumber() == MagicNumber ) 
         return ( True ) ;
      }
      
   return ( False ) ;
   }
//+------------------------------------------------------------------+
Simon Gniadkowski
Moderator
17999
Simon Gniadkowski 2013.12.23 15:30  
RaptorUK:
You need to check the return values from your trading functions . . . then report the error when they fail along with any relevant variables, please read this: What are Function return values ? How do I use them ?

^^^^^^^^^^^^
Keith Watford
Moderator
9620
Keith Watford 2013.12.24 20:31  

Once again, you are trying to use a value before it has been calculated

            if ( Ticket > -1 )
            OrderModify ( Ticket , OrderOpenPrice() , StopLossSettings , TakeProfitSettings , 0 , CLR_NONE ) ;

StopLossSettings and TakeProfitSettings are both zero when you try to modify the trade.

mrwayne
252
mrwayne 2013.12.27 03:34  

But I do put a if function below there, stating the condition of stop loss 0 value ..... Shouldn't it be correct ??

RaptorUK I've read about the post you gave me, but that seems like doesn't give me a spark .... Perhaps there's some part I need to focus more ?

Hmmmph, oredersend to ordermodify .... should be correct though ...

mrwayne
252
mrwayne 2013.12.27 03:42  

Oh ya RaptorUK I also did this changes after reading the link you gave .... but the TP SL still not working .....

I add a bool Modify ;

and change the ordermodify to this .

	    if ( Ticket > -1 )
            Modify = OrderModify ( Ticket , OrderOpenPrice() , StopLossSettings , TakeProfitSettings , 0 , CLR_NONE ) ;
ssn_
110
ssn_ 2013.12.27 05:58  
juniorlcq:

Oh ya RaptorUK I also did this changes after reading the link you gave .... but the TP SL still not working .....

I add a bool Modify ;

and change the ordermodify to this .


I think you need to select an order first before calling OrderOpenPrice()
mrwayne
252
mrwayne 2013.12.27 07:25  

Hmmmph, good call, but I tried like this and it still doesn't work .....

//+------------------------------------------------------------------+
//| Script start program's function                                  |
//+------------------------------------------------------------------+
   int start()
     {
   
         bool   TradeExists ;
         bool   Modify ;
         bool   Select ;
         int    Ticket ;
         int    TradesSent = 0 ;
         double StopLossSettings ;
         double TakeProfitSettings ;
   
   
   
            TradeExists = CheckIfTradeAlreadyExists ( Symbol() ) ;
            if ( !TradeExists )
            Ticket = OrderSend ( Symbol() , OP_BUY , FixedLotSize , MarketInfo ( Symbol() , MODE_ASK ) , Slippage , NULL , NULL , TradeComment , MagicNumber , 0 , CLR_NONE ) ;
            if ( Ticket > -1 )
            TradesSent++ ;
            
            
            for ( int i = 0 ; i < OrdersTotal() ; i++ )
            {
               if ( Ticket > -1 )
                  Select = OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) ;
                  Modify = OrderModify ( Ticket , OrderOpenPrice() , StopLossSettings , TakeProfitSettings , 0 , CLR_NONE ) ;
            
            
                     if ( OrderType() == OP_BUY )
                     {
                        if ( StopLoss == 0 )
                        StopLossSettings = NULL ;
                        else
                        StopLossSettings = OrderOpenPrice() - ( StopLoss * Multiplier ) ;
               
                        if ( TakeProfit == 0 )
                        TakeProfitSettings = NULL ;
                        else
                        TakeProfitSettings = OrderOpenPrice() + ( TakeProfit * Multiplier ) ;
                     }
            
            
                     if ( OrderType() == OP_SELL )
                     {
                        if ( StopLoss == 0 )
                        StopLossSettings = NULL ;
                        else
                        StopLossSettings = OrderOpenPrice() + ( StopLoss * Multiplier ) ;
               
                        if ( TakeProfit == 0 )
                        TakeProfitSettings = NULL ;
                        else
                        TakeProfitSettings = OrderOpenPrice() - ( TakeProfit * Multiplier ) ;
                     }
                     
            }
   
   
            MessageBox ( TradesSent + " " + Symbol() + " trade had executed successfully :) " , " Information " ) ;
   
   return ( 0 ) ;
   }
//+------------------------------------------------------------------+
123
To add comments, please log in or register