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

 
Alexey Viktorov # :

발레리, 라인에 주목

내 코드에서… 나는 오랫동안 5중 함수를 사용해 왔지만 여기에 비슷한 함수가 있습니다.

ssstakaya에게 0을 주었습니다.

바퀴벌레가 어디에 있는지 생각해보세요... 그리고 그들이 MT4 지원을 거부한다는 사실 때문에 우리는 그것이 결코 고쳐지지 않을 것이라고 추측할 수 있습니다...

다른 모든 것은 확인해야 합니다. 나는 기억하고 싶지도 않을 정도로 오랫동안 이것을 귀찮게 하지 않았다.

흠 ... 시간이 에뮬레이트된다) 헷갈릴 필요가 있다)

 int sd;
/*******************Expert initialization function*******************/
int OnInit ()
 {
  sd = ( int )MarketInfo( "EURJPY" , MODE_DIGITS);
   return ( INIT_SUCCEEDED );
 } /******************************************************************/

/************************Expert tick function************************/
void OnTick ()
 {
   datetime lt = iTime ( _Symbol , PERIOD_M15 , 0 );
   static datetime ct = 0 ;
   if (ct != lt)
  {
   ct = lt;
   Print ( DoubleToString ( iMA ( "EURJPY" , PERIOD_M15 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 ), sd),
     " Time[0] " ,TimeToStr( Time[ 0 ]), " iTime(EURJPY,0,0) " ,TimeToStr( iTime ( "EURJPY" , 0 , 0 )));
  }

결과

 2021.09 . 21 15 : 30 : 48.696 2021.08 . 13 20 : 15 : 00   testMulti EURUSD,M15: 129.482 Time[ 0 ] 2021.08 . 13 20 : 15 iTime (EURJPY, 0 , 0 ) 2021.08 . 13 20 : 15
2021.09 . 21 15 : 30 : 48.632 2021.08 . 13 20 : 00 : 00   testMulti EURUSD,M15: 129.495 Time[ 0 ] 2021.08 . 13 20 : 00 iTime (EURJPY, 0 , 0 ) 2021.08 . 13 20 : 00
2021.09 . 21 15 : 30 : 48.568 2021.08 . 13 19 : 45 : 00   testMulti EURUSD,M15: 129.512 Time[ 0 ] 2021.08 . 13 19 : 45 iTime (EURJPY, 0 , 0 ) 2021.08 . 13 19 : 45
2021.09 . 21 15 : 30 : 48.504 2021.08 . 13 19 : 30 : 00   testMulti EURUSD,M15: 129.527 Time[ 0 ] 2021.08 . 13 19 : 30 iTime (EURJPY, 0 , 0 ) 2021.08 . 13 19 : 30
2021.09 . 21 15 : 30 : 48.440 2021.08 . 13 19 : 15 : 00   testMulti EURUSD,M15: 129.539 Time[ 0 ] 2021.08 . 13 19 : 15 iTime (EURJPY, 0 , 0 ) 2021.08 . 13 19 : 15

추신: 그것은 다른 기호에서 막대의 데이터를 가져오는 데 작동합니다))) 그러나 히스토리를 구체적으로 로드해야 합니다. 어레이를 넘어서는 것은 언로드된 기기에서 유일한 방법이거나 먼 막대에서 데이터를 요청하는 유일한 방법입니다.

추신 추신

정말 효과가!!! 나는 모든 인용문 아카이브를 업로드해야했습니다 !!! 필요한 통화 쌍이며 6월 21일부터 1분 동안 작동했습니다.

 
giros # :

MQL5(러시아어)를 배울 수 있는 곳을 알려주실 수 있습니까?

여기 . 나는 다른 것을 읽지 않았다.
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
  • www.mql5.com
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 


 double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice= 0 ;
   ticket= 0 ;
   
   for ( int i= OrdersTotal ()- 2 ; i>= 0 ; i--)
   {
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
             if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return (oldopenprice);
}

안녕하세요. 끝에서 두 번째 오더의 시가를 구하려고 하는데 매도 오더가 없으면 잘 됩니다. 나는 그가 그들도 계산한다는 것을 이해합니다. MQL4

 
makssub # :


안녕하세요. 끝에서 두 번째 오더의 시가를 구하려고 하는데 매도 오더가 없으면 잘 됩니다. 나는 그가 그들도 계산한다는 것을 이해합니다. MQL4

 double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice= 0 ;
   ticket= 0 ;
   
   for ( int i= OrdersTotal ()- 2 ; i>= 0 ; i--)
   {
       if ( OrderSelect ( i , SELECT_BY_POS, MODE_TRADES)) // внимательней к копипасту) цикл по i а перебираешь cnt))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
             if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return (oldopenprice);
}
 
Valeriy Yastremskiy # :


 double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice= 0 ;
   ticket= 0 ;
   
   for ( int cnt= OrdersTotal ()- 2 ; cnt>= 0 ; cnt--)
   {
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
             if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return (oldopenprice);
}

고맙습니다. 다시 확인했지만 여전히 Sell도 고려 중입니다(

 
makssub # :


고맙습니다. 다시 확인했지만 여전히 Sell도 고려 중입니다(

아마도 총 주문 수에서 빼기 때문일 것입니다.

 OrdersTotal ()- 2 

그리고 당신은 단지 찾고 있습니다

OP_BUY
 
makssub # :


고맙습니다. 다시 확인했지만 여전히 Sell도 고려 중입니다(

두 번째 if 앞에 번호, 티켓 및 주문 유형을 인쇄하고 두 번째 if 내부에 인쇄하십시오.

 double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice= 0 ;
   ticket= 0 ;
   
   for ( int cnt= OrdersTotal ()- 2 ; cnt>= 0 ; cnt--)
   {
     if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
      {
Print (" Print 1 "," cnt ",cnt," OrderTicket() ",OrderTicket()," OrderType() ",OrderType());
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
Print (" Print 2 "," cnt ",cnt," OrderTicket() ",OrderTicket()," OrderType() ",OrderType());
            oldticket = OrderTicket();
             if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return (oldopenprice);
}
 
 private:
   CPoint             *startPoint;
   CPoint             *endPoint;

두 개의 생성자가 있습니다. 두 번째에서 첫 번째를 호출하고 위의 변수에 값을 설정하면 두 번째로 리턴할 때 이 변수가 NULL 로 이동합니다.
또한 첫 번째 생성자에서 두 번째 생성자로 코드를 복사하고 호출하지 않으면 모든 것이 작동합니다. 문제가 무엇입니까?

CWave::CWave( string namePref,
             double startPrice,
             datetime startTime,
             double endPrice,
             datetime endTime)
  {
   prevWave = NULL ;
   nextWave = NULL ;
   name = namePref+ "_" + TimeToString (startTime, TIME_DATE | TIME_MINUTES );
   startPoint = new CPoint(startPrice, startTime);
   endPoint = new CPoint(endPrice, endTime);
   dir = startPrice < endPrice ? true : false ;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CWave::CWave( string namePref,
             double startPrice,
             datetime startTime,
             double endPrice,
             datetime endTime,
             CWave *prevWave)
  {
   CWave(namePref, startPrice, startTime, endPrice, endTime);
   this .prevWave = prevWave;
   prevWave.nextWave = & this ;
  }
 
Roman Sharanov NULL 로 이동합니다.
또한 첫 번째 생성자에서 두 번째 생성자로 코드를 복사하고 호출하지 않으면 모든 것이 작동합니다. 문제가 무엇입니까?


문제는 MQL에 있습니다.

비슷한 상황에서 다른 생성자에서 가져온 별도의 방법으로 초기화를 수행합니다.

---

여전히 부모의 생성자를 호출하는 데 문제가 있습니다.

 
Valeriy Yastremskiy # :

두 번째 if 앞에 번호, 티켓 및 주문 유형을 인쇄하고 두 번째 if 내부에 인쇄하십시오.

고맙습니다. 오늘 확인하겠습니다.