エラー130を地獄に落とす - ページ 4

 

k... 明日、コードを投稿します...

これはバックテスターで 起こることだと言うのを忘れていました...前方でどうなるかは分かりませんが、確かにこれも見たくありませんね。

 
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);
  }
 
どう思う?
 
Roger wrote>>

本当にそろそろコード全体を見せるべきでしょう。もし躊躇するならば、PMを使うことができます。

TPがBidより低いようですが

TP < Bid の問題を修正した後、私のストップレベルがこのブローカーでは0であることが判明しました。したがって、注文に SL や TP を付けることができず、注文を出した後すぐに注文修正を使用しなければなりませんでした。

ありがとうございました。

BB

 

私はそれを生成する実際の行を投稿していないので、あなたはTPセットを参照してください、それは。

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) );
ご覧のように、SLもTPもゼロに設定されています...
 

WOAA...私のせいだ--価格が同じ式ではない

後ほど編集します。

修正しても問題は解決しません...同じ現象は発生しませんが、まだ起こります。

 
解決済み...STOPLEVELは、SLやTPがないときでも重要です...