Damn Error 130 to Hell - page 4

 

k... will post the code tomorrow...

Forgot to mention this is what happens on backtester... Don't know on forward how it would go, but certainly I don't wanna see this there either.

 
int PriceOpenMode(int op)
  {
  if (op==OP_BUY)
     return(MODE_ASK);
  if (op==OP_SELL)
     return(MODE_BID);
  return(-1);
  }


int PriceCloseMode(int op)
  {
  if (op==OP_BUY)
     return(MODE_BID);
  if (op==OP_SELL)
     return(MODE_ASK);
  return(-1);
  }
  


int ReliableOrderSend(string symbol,int cmd,double volume,double price,int slippage,double stoploss,double takeprofit, string comment="",int magic=0,datetime expiration=0,color arrow_color=CLR_NONE,int MaxPasses=0) 
  {  
  int Gle=ERR_TRADE_CONTEXT_BUSY;        
  int passes=0;  
  int res=-1;  
  while (Gle==ERR_TRADE_CONTEXT_BUSY||Gle==ERR_REQUOTE||Gle==ERR_INVALID_PRICE||Gle==ERR_PRICE_CHANGED||Gle==ERR_OFF_QUOTES)
       {  
          
       if (Gle==ERR_REQUOTE||Gle==ERR_INVALID_PRICE||Gle==ERR_PRICE_CHANGED||Gle==ERR_OFF_QUOTES||passes==0)
         {
         if (passes!=0)
            RefreshRates();
         if (price==0.0)  //if (passes!=0||price==0)
            price=MarketInfo(symbol,PriceOpenMode(cmd));
         }//if (Gle==ERR_REQUOTE)                        
       res=OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,comment,magic,expiration,arrow_color);   
       Gle=GetLastError();       
       if (Gle!=ERR_NO_ERROR)
          Print("ReliableOrderSend error : ",Gle);              
       passes=passes+1;
       
       if (MaxPasses!=0)
         {
          if (passes>=MaxPasses)
            break;
         }

       if (Gle==ERR_REQUOTE||Gle==ERR_INVALID_PRICE||Gle==ERR_PRICE_CHANGED||Gle==ERR_OFF_QUOTES) { price=0.0; }
         
       }//while (Gle==ERR_TRADE_CONTEXT_BUSY||Gle==ERR_REQUOTE)       
  return(res);
  }
     

bool ReliableOrderClose(int ticket, double lots, double price, int slippage, color Color=CLR_NONE,int MaxPasses=0) 
  {
  int Gle=ERR_TRADE_CONTEXT_BUSY;
  int passes=0;  
  bool res;
  int otype;
  double olots;
  string osymbol;
  res=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
  osymbol=OrderSymbol();
  otype=OrderType();
  olots=OrderLots();  
  if (lots==0)
     lots=olots;  
  if (res==True)
    {
    while (Gle==ERR_TRADE_CONTEXT_BUSY||Gle==ERR_REQUOTE||Gle==ERR_INVALID_PRICE||Gle==ERR_PRICE_CHANGED||Gle==ERR_OFF_QUOTES)
       {     
       if (Gle==ERR_REQUOTE||Gle==ERR_INVALID_PRICE||Gle==ERR_PRICE_CHANGED||Gle==ERR_OFF_QUOTES||passes==0)
         {
         if (passes!=0)
            RefreshRates();
         if (price==0.0)  //if (passes!=0||price==0)
            price=MarketInfo(osymbol,PriceCloseMode(otype));
         }//if (Gle==ERR_REQUOTE)                               
       res=OrderClose(ticket,lots,price,slippage,Color);   
       Gle=GetLastError();
       if (Gle!=ERR_NO_ERROR)
          Print("ReliableOrderClose error : ",Gle);           
       passes=passes+1;
       
       if (MaxPasses!=0)
         {
          if (passes>=MaxPasses)
            break;
         }
       
       if (Gle==ERR_REQUOTE||Gle==ERR_INVALID_PRICE||Gle==ERR_PRICE_CHANGED||Gle==ERR_OFF_QUOTES) { price=0.0; }

       }//while (Gle==ERR_TRADE_CONTEXT_BUSY||Gle==ERR_REQUOTE)  
    }
  return(res);
  }
 
bool ReliableModifyStopLoss(int ticket,double NewStopLoss,int MarkColor=CLR_NONE)
  {
  int ot,oti;
  datetime oex;
  string os;
  double oop,otp,point;
  bool res=false;
  bool selected=false;  
  double fixed;
  selected=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);   
  if (selected==True)
    {
     double ns=NormalizeDouble(NewStopLoss,MarketInfo(OrderSymbol(),MODE_DIGITS));
     ot=OrderType();     
     oti=OrderTicket();
     oop=OrderOpenPrice();
     otp=OrderTakeProfit();
     oex=OrderExpiration();
     os=OrderSymbol();
     point=MarketInfo(os,MODE_POINT);
     if (ot==OP_BUY||ot==OP_BUYSTOP||ot==OP_BUYLIMIT)
       {       
        fixed=MarketInfo(os,MODE_ASK)-MarketInfo(os,MODE_STOPLEVEL)*point;
        if (ns>fixed&&ns<=MarketInfo(os,MODE_ASK))
          ns=fixed;
        while(true)
          {
           res=OrderModify(oti,oop,ns,otp,oex,MarkColor);
           if (res==True)
             break;
           else 
            {
             if (GetLastError()==ERR_INVALID_STOPS)               
               ns=ns-point;
             else
               break;
            }
           RefreshRates();
          }//while(true)
       }//if (ot==OP_BUY||ot==OP_BUYSTOP||ot==OP_BUYLIMIT)
     if (ot==OP_SELL||ot==OP_SELLSTOP||ot==OP_SELLLIMIT)
       {
        fixed=MarketInfo(os,MODE_BID)+MarketInfo(os,MODE_STOPLEVEL)*point;
        if (ns<fixed&&ns>=MarketInfo(os,MODE_BID))
          ns=fixed;       
        while(true)
          {           
           res=OrderModify(oti,oop,ns,otp,oex,MarkColor);
           if (res==True)
             break;
           else 
            {
             if (GetLastError()==ERR_INVALID_STOPS)               
               ns=ns+point;             
             else
               break;
            }
           RefreshRates();
          }//while(true)
       }//if (ot==OP_BUY||ot==OP_BUYSTOP||ot==OP_BUYLIMIT)
    }   
  return(res);  
  }

bool ReliableModifyTakeProfit(int ticket,double NewTakeProfit,int MarkColor=CLR_NONE)
  {
  int ot,oti;
  datetime oex;
  string os;
  double oop,osl,point;
  bool res=false;
  bool selected=false;  
  double fixed;
  selected=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);   
  if (selected==True)
    {
     double nt=NormalizeDouble(NewTakeProfit,MarketInfo(OrderSymbol(),MODE_DIGITS));
     ot=OrderType();     
     oti=OrderTicket();
     oop=OrderOpenPrice();
     osl=OrderStopLoss();
     oex=OrderExpiration();
     os=OrderSymbol();
     point=MarketInfo(os,MODE_POINT);
     if (ot==OP_BUY||ot==OP_BUYSTOP||ot==OP_BUYLIMIT)
       {       
        fixed=MarketInfo(os,MODE_ASK)+MarketInfo(os,MODE_STOPLEVEL)*point;       
        if (nt<fixed&&nt>=MarketInfo(os,MODE_ASK))
          nt=fixed;
        while(true)
          {           
           res=OrderModify(oti,oop,osl,nt,oex,MarkColor);
           if (res==True)
             break;
           else 
            {
             if (GetLastError()==ERR_INVALID_STOPS)               
               nt=nt+point;
             else
               break;
            }
           RefreshRates();
          }//while(true)
       }//if (ot==OP_BUY||ot==OP_BUYSTOP||ot==OP_BUYLIMIT)
     if (ot==OP_SELL||ot==OP_SELLSTOP||ot==OP_SELLLIMIT)
       {
        fixed=MarketInfo(os,MODE_BID)-MarketInfo(os,MODE_STOPLEVEL)*point;
        if (nt>fixed&&nt<=MarketInfo(os,MODE_BID))
          nt=fixed;       
        while(true)
          {           
           res=OrderModify(oti,oop,osl,nt,oex,MarkColor);
           if (res==True)
             break;
           else 
            {
             if (GetLastError()==ERR_INVALID_STOPS)               
               nt=nt-point;             
             else
               break;
            }
           RefreshRates();
          }//while(true)
       }//if (ot==OP_BUY||ot==OP_BUYSTOP||ot==OP_BUYLIMIT)
    }   
  return(res);  
  }


int ReliableOrderPlace(string symbol,int cmd,double volume,double price,int slippage,int stoploss,int takeprofit, string comment="",int magic=0,datetime expiration=0,color arrow_color=CLR_NONE,int MaxPasses=0) 
  {
   int res,ticket;
   double oop,tkp,osl;
   res=ReliableOrderSend(symbol,cmd,volume,price,slippage,0,0,comment,magic,expiration,arrow_color,MaxPasses); 
   if (res!=-1)
     {
      ticket=OrderSelect(res,SELECT_BY_TICKET,MODE_TRADES);      
      oop=OrderOpenPrice();
      if (takeprofit!=0)
        {
         if (cmd==OP_BUY||cmd==OP_BUYLIMIT||cmd==OP_BUYSTOP)
           tkp=oop+takeprofit*MarketInfo(symbol,MODE_POINT);
         if (cmd==OP_SELL||cmd==OP_SELLLIMIT||cmd==OP_SELLSTOP)
           tkp=oop-takeprofit*MarketInfo(symbol,MODE_POINT);         
         ReliableModifyTakeProfit(res,tkp);
        }
     }
   if (res!=-1)
     {
      ticket=OrderSelect(res,SELECT_BY_TICKET,MODE_TRADES);      
      oop=OrderOpenPrice();
      if (stoploss!=0)
        {
         if (cmd==OP_BUY||cmd==OP_BUYLIMIT||cmd==OP_BUYSTOP)
           osl=oop-stoploss*MarketInfo(symbol,MODE_POINT);
         if (cmd==OP_SELL||cmd==OP_SELLLIMIT||cmd==OP_SELLSTOP)
           osl=oop+stoploss*MarketInfo(symbol,MODE_POINT);         
         ReliableModifyStopLoss(res,osl);
        }
     }
    return(res);
  }
 
well? any ideas?
 
Roger wrote >>

Really it's time to show the whole code. If you hesitate, you can use PM.

I see you have TP lower then Bid

After fixing the TP < Bid Issue it turned out my stop level was 0 for this broker so I couldn't have any SL or TP with the order and have to use order modify right after placing the Order.

Thanks for your help,

BB

 

I don't see where you see the TP set, as I didn't post the actual line producing it, which is:

tsel=ReliableOrderSend(Symbol(),WhatOperation(OP_SELL,GetPylonRoot(execpyl,MODE_HIGH)+(2*Half)*(BuildLevels+execlev)),LotSize, HighBase+(2*Half)*(BuildLevels+execlev),Slippage,0,0,"",MakeMagic(execpyl,execlev+1,execarea) );
as you see, both SL and TP are set to zero...
 

WOAA....It's my fault--prices are not same formula

Later edit:

Correction doesn't solve problem... it still happens, although does not have same occurrence.

 
Solved... STOPLEVEL matters still when not having SL or TP...