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

[삭제]  

여러 날 동안 작동하는 복잡한 논리가 있지만 한 순간에 멈춥니다. 그러나 이것은 때때로 소스 코드를 편집할 수 없는 EX5에서 발생합니다. 지표나 어드바이저가 정지된 측면에서 프로그래밍 방식으로 결정할 수 있습니까? 이 지표 또는 저 지표의 계산된 부분에 대한 통계를 수집하시겠습니까?

지표를 사용하면 일시 중단된 상태에서 기호로 차트 업데이트를 종료하기 때문에 가능한 것 같습니다. 이것은 어떤 지표가 정지를 일으켰는지 지정하지 않은 경우에도 Expert Advisor에 의해 추적될 수 있습니다.

[삭제]  
금지 기록을 세웠다. 금지 기간 동안 그들은 포럼에서 나에게 대답하지만 나는 읽을 수만 있습니다. 그리고 다음 금지 조치가 해제된 후 계속하기 위해 누가, 어디서 응답했는지 기억하기가 매우 어렵습니다. 어떻게 든이 문제를 해결할 수 있습니까 (더 이상 목욕에 들어가지 않는 것이 좋습니다)? 그리고 일반적으로 가끔 읽지만 지금은 답할 시간이 없습니다. "나중에 답변"을 입력하기 위해 일종의 플래그 알림을 나에게 넣을 수 있습니까?
 
comp :
금지 기록을 세웠다. 금지 기간 동안 포럼에서 답변을 해주지만 읽을 수만 있습니다. 그리고 다음 금지 조치가 해제된 후 계속하기 위해 누가, 어디서 응답했는지 기억하기가 매우 어렵습니다. 어떻게 든이 문제를 해결할 수 있습니까 (더 이상 목욕에 들어가지 않는 것이 좋습니다)? 그리고 일반적으로 가끔 읽지만 지금은 답할 시간이 없습니다. "나중에 답변"을 입력하기 위해 일종의 플래그 알림을 나에게 넣을 수 있습니까?
먼저 생각한 다음 실행해야 합니다. 그리고 그 반대도 마찬가지입니다. 그러면 메모리에 문제가 없을 것입니다.
 
Karputov Vladimir :
먼저 생각한 다음 실행해야 합니다. 그리고 그 반대도 마찬가지입니다. 그러면 메모리에 문제가 없을 것입니다.
금말!!!
[삭제]  
Vladimir Pastushak :
금말!!!
완전 응원합니다!!! 질문에 답변이 가능한가요
구성 :
가끔 읽으시는데 지금은 답변드릴 시간이 없습니다. "나중에 답변"을 입력하기 위해 일종의 플래그 알림을 나에게 넣을 수 있습니까?
 
comp :
"나중에 답변"을 입력하기 위해 일종의 플래그 알림을 나에게 넣을 수 있습니까?
나는 당신을 이해합니다. 모든 사람은 시급한 문제에 대한 해결책을 원합니다. 귀하의 경우에는 과잉입니다. 당신은 욕조에 앉아도 개발자를 구축하려고합니다.
 

"지정된 숫자 값의 가장 가까운 정수로 반올림된 값을 반환"하는 MQL4의 MathRound() 에 대한 질문입니다.

코드:

 #property strict
void OnStart ()
  {
   Print ( "1) MathRound(10.50001) = " , MathRound ( 10.50001 ));   // 11.0
   Print ( "2) MathRound(10.49999) = " , MathRound ( 10.49999 ));   // 10.0
  }

결과:


친절한 사람들이 왜 그렇게 설명합니까? 이것이 그렇게되어야한다면 관리에 대한 요청 - 점 뒤의 첫 번째 숫자 만 고려된다는 문서를 추가하십시오.

MathRound - Математические функции - Справочник MQL4
MathRound - Математические функции - Справочник MQL4
  • docs.mql4.com
MathRound - Математические функции - Справочник MQL4
 

동료 여러분, 도와주세요. 당신의 두뇌가 없습니다.

지정가 주문을 한 로봇은 오픈 포지션을 닫을 때(스탑이든 이익이든 상관없이) 나머지 보류를 제거해야 합니다. 위치. 저것. 삭제 트리거는 정확히 포지션을 닫는 이벤트여야 합니다. 저에게 이 경우 이 포지션이 어떻게 청산되었는지는 중요하지 않습니다(청산이 SL에 있는 경우 삭제해야 할 한도가 남아 있지 않다는 조건만 적용됩니다). 그러나 자세히 설명하고 모든 것을 올바르게 수행하면 트리거는 TP입니다.

로봇은 지연을 제거하지만 위치가 닫힌 후가 아니라 배치된 직후에 제거하는 것으로 나타났습니다. 그리고 그는 계속해서 보류 주문을 걸고 삭제 하면서 자신과 싸우기 시작합니다. 무엇이 잘못되었는지 보십시오.

 input double    lot                  = 0.2 ;
input double    TakeProfitPips       = 50 ;
input double    StopLossPips         = 200 ;

int                bar= 0 ;
int                shift= 1 ;
int                tiket;
int                otkt;
double             price;
int                cnt;
double             TPp,SLp;
int                tkt;
int                n;
int                type;

     int _OrdersTotal = 0 ;
     // кол-во позиций, соответствующих критериям (текущий инструмент и заданный MagicNumber),
     // состоянием на текущий тик
     int now_OrdersTotal = 0 ;
     // кол-во позиций, соответствующих критериям (текущий инструмент и заданный MagicNumber),
     // состоянием на предыдущий тик
     static int pre_OrdersTotal = 0 ;
     // массив открытых позиций состоянием на текущий тик
     int now_OrdersArray[][ 2 ]; // [№ в списке][№ тикета, тип позиции]
     // текущий номер позиции в массиве now_OrdersArray (для перебора)
     int now_CurOrder = 0 ;
     // текущий номер позиции в массиве pre_OrdersArray (для перебора)
     int pre_CurOrder = 0 ;
     // массив для хранения количества закрытых позиций каждого типа
     int now_ClosedOrdersArray[ 6 ][ 3 ]; // [тип ордера][тип закрытия] 
 
     // временные флаги
     bool OrderClosed = true , PendingOrderOpened = false ;
     // временные переменные
   

     int pre_OrdersArray[][ 2 ]; // [количество позиций][№ тикета, тип позиции]
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }


void OnTick ()

  {

         if ( OrdersTotal ()== 0 && iTime ( Symbol (), PERIOD_M1 , 1 )== D'14.01.16 16:30' )

        {
        
         price= Open [shift];

         tiket= OrderSend ( Symbol (), OP_SELLLIMIT ,lot,price, 3 ,price+StopLossPips* Point ,price-TakeProfitPips* Point );
         if (tiket< 0 )
           {
             Print ( "Ошибка OrderSend № - " , GetLastError ());
           }
        }

     

   if ( OrdersTotal ()!= 0 )
     {
       for (cnt= 0 ; cnt< OrdersTotal (); cnt++)

         OrderSelect (cnt, SELECT_BY_POS ); // Если есть следующий
        {                                     // Анализ ордеров:
         price= OrderOpenPrice ();
         otkt = OrderTicket ();
         n=otkt;
         //--------------------------------------------------------------

 
         if ( OrderType ()== OP_SELL && OrderMagicNumber ()== 0 )

           {
            tiket= OrderSend ( Symbol (), OP_SELLLIMIT ,lot* 3 ,price+ 100 * Point , 1 ,price+StopLossPips* Point ,price-TakeProfitPips* Point , "My order" ,n);
            tiket= OrderSend ( Symbol (), OP_SELLLIMIT ,lot* 9 ,price+ 200 * Point , 1 ,price+StopLossPips* Point ,price-TakeProfitPips* Point , "My order" ,n);
           }
        }

     }

  
        _OrdersTotal = OrdersTotal (); // запоминаем общее количество позиций
         ArrayResize ( now_OrdersArray, _OrdersTotal ); // изменяем размер массива открытых позиций под текущее кол-во
         ArrayInitialize ( now_OrdersArray, 0.0 ); // обнуляем массив
        now_OrdersTotal = 0 ; // обнуляем количество позиций, соответствующих критериям
         ArrayInitialize ( now_ClosedOrdersArray, 0.0 ); // обнуляем массивы закрытых позиций и сработавших ордеров
       
 
         //+------------------------------------------------------------------+
         //| Перебираем все позиции и записываем в массив 
         //+------------------------------------------------------------------+
         for ( int z = _OrdersTotal - 1 ; z >= 0 ; z -- )
        {
             if ( OrderSelect ( z, SELECT_BY_POS ) )
           
            {
                now_OrdersArray[now_OrdersTotal][ 0 ] = OrderTicket ();
                now_OrdersArray[now_OrdersTotal][ 1 ] = OrderType ();
                now_OrdersTotal ++;
            }
        }
        
         ArrayResize ( now_OrdersArray, now_OrdersTotal ); // изменяем размер массива открытых позиций под кол-во позиций, соответствующих критериям
 
         //+------------------------------------------------------------------+
         //| Перебираем список позиций предыдущего тика, и считаем сколько закрылось позиций и
         //| сработало отложенных ордеров
         //+------------------------------------------------------------------+
         for ( pre_CurOrder = 0 ; pre_CurOrder < pre_OrdersTotal; pre_CurOrder ++ )
        {
            tkt = pre_OrdersArray[pre_CurOrder][ 0 ]; // запоминаем тикет и тип ордера
            type   = pre_OrdersArray[pre_CurOrder][ 1 ];
            
            OrderClosed = true ; // предпологаем, что если это позиция, то она закрылась
           
             for ( now_CurOrder = 0 ; now_CurOrder < now_OrdersTotal; now_CurOrder ++ ) // перебираем все позиции из текущего списка открытых позиций
            {
                 if ( tkt == now_OrdersArray[now_CurOrder][ 0 ] ) // если позиция с таким тикетом есть в списке,
                {   OrderClosed = false ; // значит позиция не была закрыта (ордер не был удалён)
                     break ;
                }
            }
           
             if ( OrderClosed )   // если была закрыта позиция (удалён ордер),
            {
                
                 if ( OrderSelect ( tkt, SELECT_BY_TICKET )) // выбиаем ее
               
                    n = tkt; // присваеваем n номер тикета
                
            }   
      }  
     
         //+------------------------------------------------------------------+
         //| Удаляем ордер с магическим номером = тикету закрытой ранее позиции 
         //+------------------------------------------------------------------+
     for ( int z = _OrdersTotal - 1 ; z >= 0 ; z -- )
        {
             if ( OrderSelect ( z, SELECT_BY_POS ) )
            otkt = OrderTicket ();
             if (n == OrderMagicNumber ())
             { OrderDelete ( otkt );}
         }
         
         return ;
      }
Помогите отредактировать код, пожалуйста
Помогите отредактировать код, пожалуйста
  • www.mql5.com
И начинает бороться сам с собой, постоянно выставляя и удаляя отложенные ордера. - - Категория: общее обсуждение
 
말해 보세요. 거래 로봇이 출시되는 시장을 결정하기 위한 기본 제공 메커니즘이 있습니까? FOREX 및 FORTS 시장을 결정해야 합니다.
 

좋은 사람들, 도와주세요. Macbook의 MT4에 러시아어를 넣을 수 없습니다. 있는 것 같지만 상형 문자로 표시되지만 메타 편집기에서는 모든 것이 정상입니다. 나는 Mac에서 Play를 통해 모든 것을 넣었습니다.

와인 버전 1.9.4. 도움을 주시면 대단히 감사하겠습니다.