MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 501

 
dimkh87 :
안녕하세요. MT4 및 MT5에서 동일한 장비의 차트를 다른 기간으로 오버레이할 수 있습니까? 뿐만 아니라 이러한 기간에 대한 지표도 오버레이할 수 있습니까? 예를 들어, 한 창에서 EUR/USD 쌍 의 차트 3개를 요일, 4시간 및 시간 프레임으로 표시하고 이러한 데이터에서 이동하는 시간 프레임을 오버레이하려고 합니다. 그게 가능합니까? 어떤 도움이 된다면 기쁠 것입니다.

타임라인은 어떻습니까? 또는 너비가 몇 개 작은 반쪽이 있는 막대를 그릴까요?

 
Вадим Мотеюнас :

여러분, 제가 Kim 에서 마지막 위치의 시작 막대 번호 또는 -1을 반환하는 함수를 가져왔습니다.

이 함수를 호출하고 조건을 작성했습니다.

결과적으로 하나의 주문이 열리지만 막대에서 스톱이 맞고 포즈를 입력하기위한 위의 조건이 어쨌든 저장되면이 막대에서 거래가 열리고 Print를 통해 함수가 -1을 반환하는 것을 보았습니다. , 처음에는 주문이 전혀 없었기 때문에 나는 주문이 나타났고 모두 동일하고 정류장 후 같은 바에서 거래가 열립니다. 도와주세요. 내가 무엇을 잘못 했습니까?

 static datetime time_open = 0 ;
if ( Open [ 2 ]> Close [ 2 ] && Open [ 1 ]> Close [ 1 ] && Close [ 1 ]< Low [ 2 ])
     {
       Comment ( "цена входа = " , DoubleToStr ( Low [ 2 ], Digits ));
       if ( Open [ 0 ] != time_open )
         if (NumberOfBarOpenLastPos( "" , 0 ,- 1 ,- 1 )!= 0 ) //вызвал здесь
            ticket= OrderSend ( Symbol (), OP_SELLLIMIT , 0.1 , Low [ 2 ], 2 , 0 , 0 ,magic, 0 );

       if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
        {
         time_open = Open [ 0 ];
         TP= NormalizeDouble ( OrderOpenPrice ()-tp* Point , Digits );
         SL= NormalizeDouble ( OrderOpenPrice ()+sl* Point , Digits );
         modify= OrderModify (ticket, OrderOpenPrice (),SL,TP, 0 );
       }
      }
 
Konstantin Nikitin :
if ( iOpen [ 0 ] != time_open ) 'iOpen' - 선언되지 않은 식별자 를 가리키는 오류를 씁니다.

 
Вадим Мотеюнас :
if ( iOpen [ 0 ] != time_open ) 'iOpen' - 선언되지 않은 식별자 를 가리키는 오류를 씁니다.

Kim은 모든 기능을 작동합니다! 당신은 그것을 올바르게 적용하지 않았습니다.

 
Vitaly Muzichenko :

Kim은 모든 기능을 작동합니다! 당신은 그것을 올바르게 적용하지 않았습니다.

아무도 논쟁하지 않습니다. 어떻게 잘못 사용하는지 이해하고 싶습니다.

 
Вадим Мотеюнас :

아무도 논쟁하지 않습니다. 어떻게 잘못 사용하는지 이해하고 싶습니다.

모든 것을 인쇄하십시오 - 이것은 오류와 단점을 식별하는 올바른 결정입니다.

 Print ( NumberOfBarOpenLastPos( "" , 0 ,- 1 ,- 1 ) );
 
Vitaly Muzichenko :

모든 것을 인쇄하십시오 - 이것은 오류와 단점을 식별하는 올바른 결정입니다.

글쎄, 나는 -1이 반환된다고 말했다. 함수는 열린 주문이 있었던 마지막 막대를 찾지 못했습니다. 올바른 매개변수를 전달하지 않았기 때문에 죄를 지었습니다.

 
int NumberOfBarOpenLastPos(string sym="",int tf=0,int op=-1,int mn=-1)
  {
   datetime oot;
   int      i,k=OrdersTotal();

   if(sym=="") sym=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==sym)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(op<0 || OrderType()==op)
                 {
                  if(mn<0 || OrderMagicNumber()==mn)
                    {
                     if(oot<OrderOpenTime()) oot=OrderOpenTime();//что означает это строка?что текущее время раньше цены открытия ордера, это как?
                    }
                 }
              }
           }
        }
     }
 
Вадим Мотеюнас :

선은 우리가 모든 위치를 살펴보고 가장 최신의 것을 선택/기억한다는 것을 의미합니다. 음, 우리는 그것으로 작업합니다. 이것은 위치가 순서가 아닌 무작위인 경우입니다.

 

여기 기능에는 최신 시간, 즉 마지막 시간에 대한 검색 및 선택이 있습니다.

 int NumberOfBarOpenLastPos( string sym= "" , int tf= 0 , int op=- 1 , int mn=- 1 )
  {
   datetime oot=0; // Инициализируем нулём
   int       i,k= OrdersTotal ();

   if (sym== "" ) sym= Symbol ();
   for (i= 0 ; i<k; i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()==sym)
           {
             if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL )
              {
               if (op< 0 || OrderType ()==op)
                 {
                   if (mn< 0 || OrderMagicNumber ()==mn)
                    {
                     if (oot< OrderOpenTime ()) oot= OrderOpenTime (); // Ищем последнюю позицию
                    }
                 }
              }
           }
        }
     }
   return ( iBarShift (sym, tf, oot, True ));
  }

다음으로, 우리는 하나를 선택했고 그것을 iBarShift 함수 (sym, tf, oot , true )로 대체합니다.

함수는 시간별로 막대 번호를 반환합니다 . 모든 것.

유감스럽게도 확인할 수는 없지만 사용했을 때 I. Kim에서 여기에 게시된 모든 기능처럼 완벽하게 작동했습니다.