how to use modify function.

 
//+------------------------------------------------------------------+
//|                                                         연습.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "KJW, kojiwoong"
#property link      "KJW, kojiwoong"

extern double lots=0.01;
extern string symbol = "EURUSD";


int MagNum = 111;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  

  
//----




//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int asia_time;
  if(Hour()>=0 && Hour()<=3)
    {
    asia_time = 1;
    }
    else
    {
    asia_time = 2;
    }
    
    // S/R Part
    double yesterday_high, yesterday_low, yesterday_close, today_open;
    double P,S05, R05, S10, R10, S15, R15, S20, R20, S25, R25, S30, R30;
    
    
    yesterday_close=iClose(symbol,PERIOD_D1,1);
    today_open=iOpen(symbol,PERIOD_D1,0);
    yesterday_high=iHigh(symbol,PERIOD_D1,1);
    yesterday_low=iLow(symbol,PERIOD_D1,1);
    
       

   P = NormalizeDouble((yesterday_high + yesterday_low + yesterday_close)/3,Digits);

   R10 = NormalizeDouble((2*P)-yesterday_low,Digits);
   S10 = NormalizeDouble((2*P)-yesterday_high,Digits);

   R05 = NormalizeDouble((P+R10)/2,Digits);
   S05 = NormalizeDouble((P+S10)/2,Digits);

   R20 = NormalizeDouble(P+(yesterday_high-yesterday_low),Digits);
   S20 = NormalizeDouble(P-(yesterday_high-yesterday_low),Digits);

   R15 = NormalizeDouble((R10+R20)/2,Digits);
   S15 = NormalizeDouble((S10+S20)/2,Digits);

   R30 = NormalizeDouble(2*P+(yesterday_high-2*yesterday_low),Digits);
   S30 = NormalizeDouble(2*P-(2*yesterday_high-yesterday_low),Digits);          

   R25 = NormalizeDouble((R20+R30)/2,Digits);
   S25 = NormalizeDouble((S20+S30)/2,Digits);
   
   
   // Bollinger Band Part
   double BBcen,BBup,BBlo;
   
   BBcen = iBands(symbol,15,20,2,0,PRICE_CLOSE,MODE_MAIN,0);
   BBup = iBands(symbol,15,20,2,0,PRICE_CLOSE,MODE_UPPER,0);
   BBlo = iBands(symbol,15,20,2,0,PRICE_CLOSE,MODE_LOWER,0);
   
   // MACD part
   
   double MacdS, MacdF;
   MacdS = iMACD(symbol,15,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
   MacdF = iMACD(symbol,15,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
   
   // ATR part
   double Atr;
      
   Atr = iATR(symbol,15,9,0);
   
   // RSI part
   double Rsi;
   Rsi = iRSI(symbol,1440,9,PRICE_CLOSE,1);
   // MA part
   
   double Ma;
   
   Ma = iMA(symbol,15,8,8,MODE_SMA,PRICE_CLOSE,0);
   
   
   
   // Ordersend part
   
   double close_price,open_price;
   int ONumber;
   
   close_price =iClose(symbol,15,1);
   open_price = iOpen(symbol,15,1);
   
   if((MacdS<MacdF)&&(P<open_price)&&(P==Ask)&&(OrdersTotal() == 0))
   {
   ONumber = OrderSend(symbol,OP_BUY,lots,Ask,5,S05,R05,"Buy position",MagNum,0,Green);
   }
   if(OrdersTotal() == 1)
   {
   OrderSelect(ONumber,SELECT_BY_TICKET);
   if(Ma>((P+R05)/2))
   {
   OrderModify(ONumber,OrderOpenPrice(),P,R10,0,Red);
   
   }
   return(0);
   }
   
   
   
  return(0);
  }
//----

//----

I have tried .. again again.. but i don't know what is wrong.

in my country, Forex is toddler level..

Please explain in detail.

When this code is executed, the following will appear. (invalid ticket for OrderModify function) (OrderModify error 4051)

how can i do?



 
// Ordersend part
   
   double close_price,open_price;
   int ONumber;                                  //==> Setting ONumber to 0  (zero) every tick
  

   
   close_price =iClose(symbol,15,1);
   open_price = iOpen(symbol,15,1);
   
   if((MacdS<MacdF)&&(P<open_price)&&(P==Ask)&&(OrdersTotal() == 0))    // ==>(OrdersTotal() == 0)  means no trading if already

                                                                        // trade open manual opend or from other EA      
   {
   ONumber = OrderSend(symbol,OP_BUY,lots,Ask,5,S05,R05,"Buy position",MagNum,0,Green);
   }
   if(OrdersTotal() == 1)     //  ==>  why not checking all trades for MagNum and right Symbol()  
   {
   OrderSelect(ONumber,SELECT_BY_TICKET);  // Every tick you set ONumber to zero so uncorrect OrderSelect

   if(Ma>((P+R05)/2))
   {
   OrderModify(ONumber,OrderOpenPrice(),P,R10,0,Red);  // fails because int ONumber every tick     
   }
   return(0);
   }
 
deVries:


Hi, deVries!

I will try that! and then if i have any question, I will write it.

Please understand my bed English.

Reason: