오류, 버그, 질문 - 페이지 1503

[삭제]  
Slawa :

이 사실을 놓쳤다. 죄송합니다

아마도 우리가 그것을 고칠 것입니다. 타이밍에 대해서는 말씀드리기 어렵습니다.

고맙습니다.
[삭제]  
Slawa :

당신의 행동을 호전적 무지라고 합니다.

무의미한 글은 이제 그만하고 포럼 회원들을 모욕하지 마세요.

덕. 시간대에 대해 물어보니 전역 수준에서 함수로 변수를 초기화하는 기능을 취소할 필요는 없다는 의견을 피력했다.

 

내 프로그램의 사용자 중 한 명이 테스터에서 프로그램을 시작하는 데 문제가 있는 스크린샷을 보냈습니다.

그것은 무엇이 될 수 있으며 다음에 무엇을 할 수 있습니까?

 
Vladimir Pastushak :

내 프로그램의 사용자 중 한 명이 테스터에서 프로그램을 시작하는 데 문제가 있는 스크린샷을 보냈습니다.

그것은 무엇이 될 수 있으며 다음에 무엇을 할 수 있습니까?

서비스 데스크에 씁니다.
 
Vladimir Pastushak :

내 프로그램의 사용자 중 한 명이 테스터에서 프로그램을 시작하는 데 문제가 있는 스크린샷을 보냈습니다.

그것은 무엇이 될 수 있으며 다음에 무엇을 할 수 있습니까?

몇 번이나 일어났습니다. 터미널을 다시 시작하면 도움이 되었습니다.
 
Vladimir Pastushak :

내 프로그램의 사용자 중 한 명이 테스터에서 프로그램을 시작하는 데 문제가 있는 스크린샷을 보냈습니다.

그것은 무엇이 될 수 있으며 다음에 무엇을 할 수 있습니까?

전체 설명 및 코드(모든 확인 후 삭제됨)와 함께 서비스 데스크로.
[삭제]  
Sergey Genikhov :
iHigh(....) / iLow(...) 함수가 Bid 값을 반환하는지 확인하고 싶습니다.
네. 차트는 입찰 가격을 기반으로 합니다.
[삭제]  
Alexey Kozitsyn :
네. 차트는 입찰 가격을 기반으로 합니다.

오 글쎄 :))))

 

차트에 합류할 때 2016.02.11 00:21:02.663 'MoyforNeuro'는 전문가가 아니며 실행할 수 없으며 컴파일러는 오류를 제공하지 않으며 이전에는 모든 것이 잘 작동했지만 새 빌드가 릴리스된 후에는 문제! 그에게 무슨 문제가 있는지 말해주세요. 여기 전문가가 있습니다.

 //+------------------------------------------------------------------+
//|                                                  Excel_Neuro.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property strict
input string FileName = "OrderEU.txt" ; //- Имя файла в каталоге TerminalPath()+"\experts\files",
                                       //  с которого будут считываться данные о изменениях в ордерах.
input int MagicStart = 99 ;       //- Эксперт удаляет только ордера, магики которых
input int MagicEnd   = 999 ;       //  входят в указанный здесь интервал
input int Sensitivity  = 30 ;         //- Чувствительность сигнала в пунктах.
//extern double NewRisk   = 1.0;         //- Коэффициент изменения риска
//extern bool LittleLots  = true;        //- Если true, то при лоте меньше минимальнодопустимого на этом счёте, будет открыт минимальный лот
input int Stoploss = 30 ;
input int SP = 30 ;                     //- SleepPage - предельное отклонение от цены
//--------------------------------------------------------------------------
extern double Time_shift= 15 ;
//---------------------------------------------------------------------------
 int     OCount= 0 ;
 int    OMagic[ 1000 ];
 string OSymbol[ 1000 ];
 double    OType[ 1000 ];
 double ORisk[ 1000 ];
 double OOP[ 1000 ];
 double OSL[ 1000 ];
 double OTP[ 1000 ];
//---------------------------------------------------------------------------
int start() {
   
 //-----------------------------------------------------------------------------------
     int magic= 0 ;
    
   int _GetLastError = 0 , _OrdersTotal = OrdersTotal ();
   //bool ALLRIGHT=true;
   if (!FileExist(FileName)) return ( 0 );
   FileLoad(FileName);
   //Удаляем старые
   if (CloseAllBeingAbsentPozitions()< 0 ) return ( 0 );
   //Корректируем существующие
       for ( int i= 0 ; i<OCount; i++) {
      magic=OrderExist( "" ,OMagic[i]);
       if (magic> 0 ){
        
      
       if (OrderMagicNumber()==OMagic[i]){
       Print ( "Ордер с таким магиком уже существует" );
       FileDelete (FileName);} 
      } 
       else 
      { 
       //Обрабатываем существующие
            
           for ( int q= 0 ; q<= OrdersTotal (); q++) {  
             if ( OrderSelect (q,SELECT_BY_POS, MODE_TRADES)){
             Print ( "Выбрал ордер " , OrderMagicNumber(), "Всего ордеров " , OrdersTotal ()); 
                  
               if (OrderType()==OType[i]){
               Print ( "Ордер по типу соответствует последнему сигналу" );
               MODIFY(OSymbol[i], magic, OSL[i], OTP[i]);
               }
               else if (OrderType()!=OType[i]){
               Print ( "Удалим ордера другого типа" );
               //if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);return(0);}
               //if(OrderType()==OP_SELL){ OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);return(0);}
               }
            }            
          }
       //Открываем новые позиции 
             if (OType[i]==OP_BUY) {
               if ( MathAbs (MarketInfo(OSymbol[i],MODE_ASK)-OOP[i])<Sensitivity*MarketInfo(OSymbol[i],MODE_POINT)) {
                  BUY(OSymbol[i],ORisk[i], OSL[i], OTP[i], OMagic[i]);
                   Print ( "Удалим файл после открытия БАЙ ордера" );
                   FileDelete (FileName);
               }
            } 
             else if (OType[i]==OP_SELL) {
               if ( MathAbs (MarketInfo(OSymbol[i],MODE_BID)-OOP[i])<Sensitivity*MarketInfo(OSymbol[i],MODE_POINT)) {
                  SELL(OSymbol[i],ORisk[i], OSL[i], OTP[i], OMagic[i]);
                   Print ( "Удалим файл после открытия СЕЛЛ ордера" );
                   FileDelete (FileName);
               }
            } 
         }
  
   } //Next i

   return ( 0 );
} //start()
//---------------------------------------------------------------------------
bool FileExist( string file) {
   int handle= FileOpen (file, FILE_BIN );
   if (handle< 0 ) {
       return ( false );
   } else {
       FileClose (handle);
       return ( true );
   }
} //FileExist()
//---------------------------------------------------------------------------
int FileLoad( string file) {
   int i= 0 , j= 0 ; double k= 0 ;
   string buffer[ 1000 ];
   int handle= FileOpen (file, FILE_BIN );
   if (handle< 0 ) {
       return (- 1 );
   } else {
      k= FileReadArray (handle,buffer, 0 , 1000 );
       FileClose (handle);
       //OCount=0;
       //while(!StringTrimRight(StringTrimLeft(buffer[OCount]))=="") {
       for (OCount= 0 ; OCount<k; OCount++) {
         i = StringFind (buffer[OCount], " " , 0 );
         ORisk[OCount]=StrToDouble( StringSubstr (buffer[OCount], 0 ,i));
         j=i+ 1 ;
         i = StringFind (buffer[OCount], " " ,j);
         OMagic[OCount]=( int )StrToDouble( StringSubstr (buffer[OCount], j,i-j));
         j=i+ 1 ;
         i = StringFind (buffer[OCount], " " ,j);
         OSymbol[OCount]= StringSubstr (buffer[OCount], j,i-j);
         j=i+ 1 ;
         i = StringFind (buffer[OCount], " " ,j);
         OType[OCount]=StrToDouble( StringSubstr (buffer[OCount], j,i-j));
         j=i+ 1 ;
         i = StringFind (buffer[OCount], " " ,j);
         OOP[OCount]=StrToDouble( StringSubstr (buffer[OCount], j,i-j));
         j=i+ 1 ;
         i = StringFind (buffer[OCount], " " ,j);
         OSL[OCount]=StrToDouble( StringSubstr (buffer[OCount], j,i-j));
         j=i+ 1 ;
         OTP[OCount]=StrToDouble( StringSubstr (buffer[OCount], j, 0 ));
         //OCount++;
      } //Next OCount
   }
return (- 1 );
} //FileLoad()
//+------------------------------------------------------------------+
int OrderExist( string fSymbol= "" , int fMagic= 0 , int fType=- 1 ) {
   int   total = OrdersTotal ();
   for ( int i = total- 1 ; i >= 0 ; i--) {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
       if (OrderSymbol()==fSymbol || fSymbol== "" ) {
         if (OrderMagicNumber()==fMagic || fMagic== 0 ) {
             if (OrderType()==fType||fType==- 1 ) {
               return (OrderTicket());
            }
         }
      } // Если свой
   } // Next i
   return (- 1 );
} //OrderExist()
//+------------------------------------------------------------------+
int CloseAllBeingAbsentPozitions() {
   int     Cur_Hour=Hour();                 // Серверное время в часах
   //double Cur_Min =Minute();              // Серверное время в минутах
   //double Cur_time=Cur_Hour; //+ Cur_Min/100;    // Текущее время
   int LE;
   int y,x= 100 ;
   double PriceClose= 0 ,z= 0 ;
   bool Del;
   int   total = OrdersTotal ();
    
   for ( int i = total- 1 ; i >= 0 ; i--) {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
         while (x< 124 ){
            x++;
            y= 24 ;
             if (x- 101 +Time_shift-y< 0 ){ 
            y= 0 ;
            } 
             else {
            y= 24 ;}
            z=x- 101 +Time_shift-y;
             Print ( "Закрываем ордера, Номер магика X= " ,x- 1 , " Выбрал ордер с магиком " ,OrderMagicNumber(), " Время закрытия " ,z);
         
         
         if (OrderMagicNumber()==x&&Cur_Hour==z) continue ;
         Del= true ;
        }
         
         
         for ( int j= 0 ; j<OCount; j++) {
            
             if (OrderMagicNumber()==OMagic[j]) {
               Del= false ;
               break ;
            }
         }
         if (Del) {
             if (OrderType()> 1 &&OrderType()< 6 ) 
             if (OrderDelete(OrderTicket())== true )
             Print ( "Ордер удален" );
             else {
               LE= 135 ;
               while (LE> 134 && LE< 139 ) {
                   if (OrderType()==OP_BUY) {
                     PriceClose=MarketInfo(OrderSymbol(),MODE_BID);
                  } else if (OrderType()==OP_SELL) {
                     PriceClose=MarketInfo(OrderSymbol(),MODE_ASK);
                  }
                   if (OrderClose(OrderTicket(),OrderLots(),PriceClose,SP))
                  LE = GetLastError ();
                   if (LE> 0 ) Print ( "СтаФФка не закрывается по причине ашипки № " ,LE);
               }
               if (LE> 0 ) return (- 1 );
            }
         }
      }
   } // Next i
   return ( 0 );
} //CloseAllPozitions()
//+------------------------------------------------------------------+
int MODIFY( string mySymbol, int magic, double sl = 0 , double tp = 0 ) {
   double stoplimit=MarketInfo(mySymbol, MODE_STOPLEVEL)*MarketInfo(mySymbol,MODE_POINT);
       Print ( "Пытаемся модифицировать" ,OrderMagicNumber());
       //for(int i=0; i<OCount; i++) {
       //for (magic=100; magic <= 123; magic++) {
       //if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
      magic=OrderMagicNumber();
       if ( OrderSelect (magic, SELECT_BY_TICKET)) {
      
       double SLo=OrderStopLoss();
      
       double TPo=OrderTakeProfit();
       //sl=NormalizeDouble(sl,MarketInfo(mySymbol,MODE_DIGITS));
       //tp=NormalizeDouble(tp,MarketInfo(mySymbol,MODE_DIGITS));
      
       if (OrderType()==OP_BUY) {
                 Print ( "Проверяем, является ли ордером БАЙ , тип ордера " ,OrderType());
                 if ( NormalizeDouble (sl, Digits )> NormalizeDouble (SLo, Digits )) {
                sl= NormalizeDouble (sl,( int )MarketInfo(mySymbol,MODE_DIGITS));
                }
                 else {
                sl= NormalizeDouble (SLo,( int )MarketInfo(mySymbol,MODE_DIGITS));
                }
         
                 if ( NormalizeDouble (tp, Digits )< NormalizeDouble (TPo, Digits )) {
                tp= NormalizeDouble (tp,( int )MarketInfo(mySymbol,MODE_DIGITS));
                }
                 else {
                tp= NormalizeDouble (TPo,( int )MarketInfo(mySymbol,MODE_DIGITS));
                }
         
         
         
         if (sl> 0 ) {
             Print ( "Проверяем, есть ли у ордера с/л " ,OrderStopLoss());
             if (MarketInfo(mySymbol,MODE_BID)-sl<stoplimit) {
               Print ( "Слишком близкий стоп (" ,(MarketInfo(mySymbol,MODE_BID)-sl)/MarketInfo(mySymbol,MODE_POINT), " пунктов). Требуется не менее: " , stoplimit/MarketInfo(mySymbol,MODE_POINT));
               return (- 1 );
            }
         }
         if (tp> 0 ) {
             Print ( "Проверяем, есть ли у ордера т/п " ,OrderTakeProfit());
             if (tp-MarketInfo(mySymbol,MODE_ASK)<stoplimit) {
               Print ( "Слишком близкий профит (" ,(tp-MarketInfo(mySymbol,MODE_ASK))/MarketInfo(mySymbol,MODE_POINT), " пунктов). Требуется не менее: " , stoplimit/MarketInfo(mySymbol,MODE_POINT));
               return (- 1 );
            }
         }
      } else if (OrderType()==OP_SELL) {
                 Print ( "Проверяем, является ли ордером СЕЛЛ , тип ордера " ,OrderType());
                 if ( NormalizeDouble (sl, Digits )< NormalizeDouble (SLo, Digits )) {
                sl= NormalizeDouble (sl,( int )MarketInfo(mySymbol,MODE_DIGITS));
                }
                 else {
                sl= NormalizeDouble (SLo,( int )MarketInfo(mySymbol,MODE_DIGITS));
                }
                
                 if ( NormalizeDouble (tp, Digits )> NormalizeDouble (TPo, Digits )) {
                tp= NormalizeDouble (tp,( int )MarketInfo(mySymbol,MODE_DIGITS));
                }
                 else {
                tp= NormalizeDouble (TPo,( int )MarketInfo(mySymbol,MODE_DIGITS));
                }
                                
         if (sl> 0 ) {
             if (sl-MarketInfo(mySymbol,MODE_ASK)<stoplimit) {
               Print ( "Слишком близкий стоп (" ,(sl-MarketInfo(mySymbol,MODE_ASK))/MarketInfo(mySymbol,MODE_POINT), " пунктов). Требуется не менее: " , stoplimit/MarketInfo(mySymbol,MODE_POINT));
               return (- 1 );
            }
         }
         if (tp> 0 ) {
             if (MarketInfo(mySymbol,MODE_BID)-tp<stoplimit) {
               Print ( "Слишком близкий профит (" ,(MarketInfo(mySymbol,MODE_BID)-tp)/MarketInfo(mySymbol,MODE_POINT), " пунктов). Требуется не менее: " , stoplimit/MarketInfo(mySymbol,MODE_POINT));
               return (- 1 );
            }
         }
      }
       if (DoubleToStr(OrderStopLoss(),( int )MarketInfo(mySymbol,MODE_DIGITS))==DoubleToStr(sl,( int )MarketInfo(mySymbol,MODE_DIGITS)) &&
      DoubleToStr(OrderTakeProfit(),( int )MarketInfo(mySymbol,MODE_DIGITS))==DoubleToStr(tp,( int )MarketInfo(mySymbol,MODE_DIGITS))) return ( 0 );
       if (OrderModify(magic,OrderOpenPrice(), sl, tp, 0 )==FALSE) {
         Print ( "Ошибка OrderModify(): " , GetLastError ());
         return (- 1 );
      }
   }
   return ( 0 );
} //Modify()
//+------------------------------------------------------------------+
int BUY( string mySymbol= "" , double lt= 0 , double sl= 0 , double tp= 0 , int mn= 0 ) {
   if (mySymbol== "" ) mySymbol= Symbol ();
   double stoplimit=MarketInfo(mySymbol, MODE_STOPLEVEL)*MarketInfo(mySymbol,MODE_POINT);
   int magic = - 1 ; //покупаем по цене Ask
   int LE= 135 ;
   mn=( int ) NormalizeDouble (mn,( int )MarketInfo(mySymbol,MODE_DIGITS));
   if (lt<MarketInfo(mySymbol, MODE_MINLOT)) return ( 0 );
   if (lt>MarketInfo(mySymbol, MODE_MAXLOT)) lt=MarketInfo(mySymbol, MODE_MAXLOT);
   if (lt>AccountFreeMargin()* 0.90 /MarketInfo(mySymbol,MODE_MARGINREQUIRED)) lt=AccountFreeMargin()* 0.90 /MarketInfo(mySymbol,MODE_MARGINREQUIRED);
   lt = NormalizeDouble (lt, ( int ) MathAbs ( MathLog (MarketInfo(mySymbol, MODE_LOTSTEP))/ MathLog ( 10.0 )));
   if (sl> 0 ) {
      sl= NormalizeDouble (sl,( int )MarketInfo(mySymbol,MODE_DIGITS));
       if (MarketInfo(mySymbol,MODE_BID)-sl<stoplimit) sl=MarketInfo(mySymbol,MODE_BID)-stoplimit;
   }
   if (tp> 0 ) {
      tp= NormalizeDouble (tp,( int )MarketInfo(mySymbol,MODE_DIGITS));
       if (tp-MarketInfo(mySymbol,MODE_ASK)<stoplimit) tp=MarketInfo(mySymbol,MODE_ASK)+stoplimit;
   }
   while (LE> 134 && LE< 139 ) {
      magic = OrderSend (mySymbol, OP_BUY, lt, MarketInfo(mySymbol,MODE_ASK), SP, sl, tp, WindowExpertName(), mn, 0 , Blue); 
      LE = GetLastError ();
       Sleep ( 2000 );
      RefreshRates();
   }
   if (magic > 0 ) Sleep ( 10000 );
   return (magic);
} //BUY()
//+------------------------------------------------------------------+
int SELL( string mySymbol= "" , double lt= 0 , double sl= 0 , double tp= 0 , double mn= 0 ) {
   if (mySymbol== "" ) mySymbol= Symbol ();
   double stoplimit=MarketInfo(mySymbol, MODE_STOPLEVEL)*MarketInfo(mySymbol,MODE_POINT);
   int magic = - 1 ; //продаём по цене Bid
   int LE= 135 ;
   mn= NormalizeDouble (mn,( int )MarketInfo(mySymbol,MODE_DIGITS));
   if (lt<MarketInfo(mySymbol, MODE_MINLOT)) return ( 0 );
   if (lt>MarketInfo(mySymbol, MODE_MAXLOT)) lt=MarketInfo(mySymbol, MODE_MAXLOT);
   if (lt>AccountFreeMargin()* 0.90 /MarketInfo(mySymbol,MODE_MARGINREQUIRED)) lt=AccountFreeMargin()* 0.90 /MarketInfo(mySymbol,MODE_MARGINREQUIRED);
   lt = NormalizeDouble (lt, ( int ) MathAbs ( MathLog (MarketInfo(mySymbol, MODE_LOTSTEP))/ MathLog ( 10.0 )));
   if (sl> 0 ) {
      sl= NormalizeDouble (sl,( int )MarketInfo(mySymbol,MODE_DIGITS));
       if (sl-MarketInfo(mySymbol,MODE_ASK)<stoplimit) sl=MarketInfo(mySymbol,MODE_ASK)+stoplimit;
   }
   if (tp> 0 ) {
      tp= NormalizeDouble (tp,( int )MarketInfo(mySymbol,MODE_DIGITS));
       if (MarketInfo(mySymbol,MODE_BID)-tp<stoplimit) tp=MarketInfo(mySymbol,MODE_BID)-stoplimit;
   }
   while (LE> 134 && LE< 139 ) {
      magic = OrderSend (mySymbol, OP_SELL, lt, MarketInfo(mySymbol,MODE_BID), SP, sl, tp, WindowExpertName(), ( int )mn, 0 , Red); 
      LE = GetLastError ();
       Sleep ( 2000 );
      RefreshRates();
   }
   if (magic > 0 ) Sleep ( 10000 );
   return (magic);
} //SELL()
//+------------------------------------------------------------------+
Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций