Lanet Hata 130 Cehenneme - sayfa 4

 

k... kodu yarın yayınlayacak...

Backtester'da olanın bundan ibaret olduğunu söylemeyi unuttum... İleride nasıl olur bilmiyorum, ama kesinlikle bunu orada da görmek istemiyorum.

 
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);
  }
 
kuyu? herhangi bir fikir?
 
Roger wrote >>

Gerçekten tüm kodu göstermenin zamanı geldi. Tereddüt ederseniz PM kullanabilirsiniz.

Tekliften daha düşük TP'niz olduğunu görüyorum

TP < Teklif Sorununu düzelttikten sonra, bu komisyoncu için durma seviyemin 0 olduğu ortaya çıktı, bu yüzden siparişte herhangi bir SL veya TP'ye sahip olamadım ve Siparişi verdikten hemen sonra sipariş değişikliğini kullanmak zorunda kaldım.

Yardımın için teşekkürler,

BB

 

TP setini nerede gördüğünüzü göremiyorum, çünkü onu üreten asıl satırı göndermedim:

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 ) ) ;
gördüğünüz gibi hem SL hem de TP sıfıra ayarlı...
 

WOAA....Bu benim hatam--fiyatlar aynı formül değil

Daha sonra düzenleme:

Düzeltme sorunu çözmez... Aynı olay olmamasına rağmen yine de oluyor.

 
Çözüldü... STOPLEVEL, SL veya TP'ye sahip olmadığınızda hala önemlidir...