Verdammter Fehler 130 zur Hölle - Seite 4

 

k... werde den Code morgen posten...

Vergessen zu erwähnen, dass dies im Backtester passiert... Ich weiß nicht, wie es in der Zukunft ablaufen würde, aber ich möchte das natürlich auch dort nicht sehen.

 
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);
  }
 
Und? Irgendwelche Ideen?
 
Roger wrote >>

Es ist wirklich an der Zeit, den ganzen Code zu zeigen. Wenn Sie zögern, können Sie PM verwenden.

Ich sehe, Sie haben TP niedriger als Bid

Nachdem ich das TP < Bid-Problem behoben hatte, stellte sich heraus, dass mein Stop-Level bei diesem Broker 0 war, so dass ich keinen SL oder TP mit der Order haben konnte und die Order direkt nach dem Platzieren der Order ändern musste.

Vielen Dank für Ihre Hilfe,

BB

 

Ich weiß nicht, wo Sie den TP-Satz sehen, da ich die eigentliche Zeile, die ihn produziert, nicht gepostet habe:

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) );
wie Sie sehen, sind sowohl SL als auch TP auf Null gesetzt...
 

WOAA....It's my fault--Preise sind nicht die gleiche Formel

Spätere Bearbeitung:

Die Korrektur löst das Problem nicht... es passiert immer noch, obwohl es nicht dasselbe Vorkommen hat.

 
Gelöst... STOPPLEVEL spielt auch dann eine Rolle, wenn man weder SL noch TP hat...