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

 
Artyom Trishkin :
최근에 여기에 크로스 플랫폼 표시기 템플릿을 게시했습니다. 그것에서 봐.
표시기버퍼()

당신은 블로그가 필요하고 거기에 같은 질문에 대한 답변을 게시해야합니다 .... 나는 인내심을 가질 것입니다!

여기 https://www.mql5.com/en/forum/160683/page670#comment_9054670

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
  • 2018.10.18
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Igor Makanu :

당신은 블로그가 필요하고 거기에 같은 질문에 대한 답변을 게시해야합니다 .... 나는 인내심을 가질 것입니다!

필요할 수도 있습니다. 예, 시간이 없습니다. 그리고 질문은 항상 동일합니다 +/-

 
문제가 해결되었습니다. 보조 변수에 버퍼의 마지막 일련 번호가 할당되었지만 동시에 디스플레이 설정이 지정되지 않은 경우. 그 전에는 불필요한 버퍼가 목록의 중간에 있었습니다.
 

돕다.

당일 마감된 포지션 대신 미결 주문 을 넣고 싶습니다.

이 함수는 마지막으로 마감된 포지션의 가격으로 주문을 합니다.

하루 동안 마감된 모든 포지션의 가격을 지연시키려면 어떻게 해야 합니까?

oid PriceTimePos( string sy= "" , int op=- 1 , int mn=- 1 ) 
  {
   datetime t;
   bool daa;
   int d,k_= OrdersTotal (),typ_;
   double    r= 0 ;
   int       i,k= OrdersHistoryTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) 
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) 
        {
         if ( OrderSymbol ()== Symbol ()) 
           {
             if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) 
              {
               if (op< 0 || OrderType ()==op) 
                 {
                   if (mn< 0 || OrderMagicNumber ()==mn) 
                    {
                     if ( OrderCloseTime ()>= TimeCurrent ()- 1440 * 60 )
                       {
                        t= OrderCloseTime ();
                        r= OrderOpenPrice ();
                        sl= OrderStopLoss ();
                        tp= OrderTakeProfit ();
                        lot= OrderLots ();
                        typ_= OrderType ();
                         //Print("OpenPrice",r);
                       }
                    }
                 }
              }
           }
        }
     }
// ЕСТЬ ОРДЕР ПО ЦЕНЕ ЗАКРЫТОЙ ПОЗИЦИИ?
   daa= false ;
   for (i= 0 ; i<k; i++) 
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) 
        {
         if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) 
           {
             if ( OrderType ()> 1 && OrderType ()< 6 ) 
              {
               d= MarketInfo ( OrderSymbol (), MODE_DIGITS );
               r= NormalizeDouble (r, d);
               if (r== NormalizeDouble ( OrderOpenPrice (),d)) {daa= true ;}
              }
           }
        }
     }
   if (daa== false ) //ЕСЛИ НЕТ ОРДЕРА ПО ЦЕНЕ, СТАВЛЮ
     {
       double opprord= 0 ;
       for (i= 0 ; i<k_; i++) 
        {
         if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) 
           {
             if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) 
              {
               if ( OrderType ()> 1 && OrderType ()< 6 ) 
                 {
                  d= MarketInfo ( OrderSymbol (), MODE_DIGITS );
                  opprord= OrderOpenPrice ();
                   // r=NormalizeDouble(r, d);
                   if (r!= NormalizeDouble (opprord,d))
                    {
                     if (r> Ask )
                       {
                         if (typ_== OP_BUY )
                          {
                           Print ( "OP_BUYSTOP" ,r);
                           SetOrder( Symbol (), OP_BUYSTOP ,lot,r,sl,tp,_MagicNumber, 0 , "bs" );
                          }
                         if (typ_== OP_SELL )
                          {
                           Print ( "OP_SELLLIMIT" ,r);
                           SetOrder( Symbol (), OP_SELLLIMIT ,lot,r,sl,tp,_MagicNumber, 0 , "sl" );
                          }
                       }

                     //
                     if ( Bid >r)
                       {
                         if (typ_== OP_BUY )
                          {
                           Print ( "OP_BUYLIMIT" ,r);
                           SetOrder( Symbol (), OP_BUYLIMIT ,lot,r,sl,tp,_MagicNumber, 0 , "bl" );
                          }
                         if (typ_== OP_SELL )
                          {
                           Print ( "OP_SELLSTOP" ,r);
                           SetOrder( Symbol (), OP_SELLSTOP ,lot,r,sl,tp,_MagicNumber, 0 , "bs" );
                          }
                       }
                    }
                 }
              }
           }
        }
     }
//return(r);
  }
 
PolarSeaman :

돕다.

당일 마감된 포지션 대신 미결 주문 을 넣고 싶습니다.

이 함수는 마지막으로 마감된 포지션의 가격으로 주문을 합니다.

하루 동안 마감된 모든 포지션의 가격을 지연시키려면 어떻게 해야 합니까?

  1. 마감 시간이 필요한 날짜의 시작 시간보다 긴(예: 어제 전날인 경우 다음 날 시작 시간보다 짧은) 마감 시간을 선택하여 마감 위치 목록을 순환합니다.
  2. 발견된 모든 포지션의 모든 종가(오픈 가격 - 어떤 가격에 베팅하고 싶은지 모르겠습니다)를 구조의 단순한 배열 또는 배열에 넣습니다.
  3. 생성된 배열을 순환하고 배열의 가격으로 보류 중인 주문을 합니다(이 가격에 이미 주문이 있는지 확인 - 동일한 가격에 여러 주문을 하지 않도록).
  4. 배열에서 이미 주문한 가격을 제거할 수도 있지만 이것은 조금 더 복잡합니다...
 

S. Kovalev의 책에 따라 MQL4를 공부하기 시작했는데 코드에 불일치가 있습니다. 이 책은 오래된 MT4 빌드용으로 작성되었습니다.


오류가 발생하지 않도록 이 코드를 처리하는 방법을 알려주세요.

 #property strict

int Count= 0 ;
int init()      
{
   Alert ( "Сработала ф-ия init() при запуске" );   // Сообщение
   return ;                                                                     // Выход из init()
   }   
//--------------------------------------------------------------------
int start()                                                                           // Спец. ф-ия start()
   {
   double Price = Bid ;                                                       // Локальная перемен.
   Count++;                                                                       // Счётчик тиков
   Alert ( "Новый тик " ,Count, " Цена = " ,Price);       // Сообщение
   return ;                                                                         // Выход из start()
   }
int deinit()                                                                               // Спец. ф-ия deinit()
   {
   Alert ( "Сработала ф-ия deinit() при выгрузке" );         // Сообщение
   return ;                                                                                 // Выход из deinit()
   }

실수

'반환' - 함수 는 값을 반환해야 합니다.

1. 그렇게 하는 것이 옳습니까?

 #property strict

int Count= 0 ;
int init()      
{
   Alert ( "Сработала ф-ия init() при запуске" );   // Сообщение
   return ( 0 );                                                                     // Выход из init()
   }   
//--------------------------------------------------------------------
int start()                                                                           // Спец. ф-ия start()
   {
   double Price = Bid ;                                                       // Локальная перемен.
   Count++;                                                                       // Счётчик тиков
   Alert ( "Новый тик " ,Count, " Цена = " ,Price);       // Сообщение
   return ( 0 );                                                                         // Выход из start()
   }
int deinit()                                                                               // Спец. ф-ия deinit()
   {
   Alert ( "Сработала ф-ия deinit() при выгрузке" );         // Сообщение
   return ( 0 );                                                                                 // Выход из deinit()
   }


2. 문제는 교과서에 나와 있는 지식을 사용하여 새 빌드를 위한 코드를 작성하는 것이 얼마나 문제가 됩니까(정보화 시대 요소를 의미합니다)?



파일:
 
Sergey Branin :

S. Kovalev의 책에 따라 MQL4를 공부하기 시작했는데 코드에 불일치가 있습니다. 이 책은 오래된 MT4 빌드용으로 작성되었습니다.


오류가 발생하지 않도록 이 코드를 처리하는 방법을 알려주세요.

실수

'반환' - 함수 는 값을 반환해야 합니다.

1. 그렇게 하는 것이 옳습니까?


2. 문제는 교과서에 제시된 지식을 사용하여 새 빌드를 위한 코드를 작성하는 것이 얼마나 문제가 되는지입니다(정보화 시대 요인을 의미합니다).



목록에서 OnInit(), OnDeinit(), OnTick() 및 기타를 사용합니다.

Документация по MQL5: Обработка событий
Документация по MQL5: Обработка событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Sergey Branin :

S. Kovalev의 책에 따라 MQL4를 공부하기 시작했는데 코드에 불일치가 있습니다. 이 책은 오래된 MT4 빌드용으로 작성되었습니다.


오류가 발생하지 않도록 이 코드를 처리하는 방법을 알려주세요.

실수

'반환' - 함수 는 값을 반환해야 합니다.

1. 그렇게 하는 것이 옳습니까?


2. 문제는 교과서에 나와 있는 지식을 사용하여 새 빌드를 위한 코드를 작성하는 것이 얼마나 문제가 됩니까(정보화 시대 요소를 의미합니다)?



  1. void가 아닌 함수에서 값을 올바르게 반환하지만 여전히 새 레일로 전환하는 것이 좋습니다. 거기에는 복잡한 것이 없습니다.
  2. 작성, 코드 맨 처음에 #property strict 지시문을 삽입하는 것을 잊지 마십시오. 모든 지시문이 작성되고 오류 코드를 읽으십시오. 해당 설명은 설명서에 있으며 모든 것이 잘되고 어렵지 않습니다.
 
Artyom Trishkin :
  1. 마감 시간이 필요한 날짜의 시작 시간보다 긴 위치를 선택하여 마감 위치 목록을 순환합니다.

감사합니다. 첫 번째 사이클에서 적절한 시점에 마감된 포지션 의 시가를 찾습니다. 그것들은 모두 인쇄물에 표시되어 있고 나는 그들에게 영장을 발부해야 합니다.

어레이는 저에게 정글입니다. 시작 가격에 대한 주기를 확인하고 설정하는 방법을 알려주고 이 가격에 대한 첫 번째 검색 주기에 투자하십시오.

따라서 필요한 것 중 가장 오래된 것의 가격에 베팅하고 다음 발견 가격으로 이동하는 방법은 무엇입니까?
 void PriceTimePos( string sy= "" , int op=- 1 , int mn=- 1 )
  {
   datetime t;
   bool daa;
   int d,k_= OrdersTotal (),typ_;
   double    r= 0 ;
   int       i,k= OrdersHistoryTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ))
        {
         if ( OrderSymbol ()== Symbol ())
           {
             if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL )
              {
               if (op< 0 || OrderType ()==op)
                 {
                   if (mn< 0 || OrderMagicNumber ()==mn)
                    {
                     if ( OrderCloseTime ()>= TimeCurrent ()- 1440 * 60 )
                       {
                        t= OrderCloseTime ();
                        r= OrderOpenPrice ();
                        sl= OrderStopLoss ();
                        tp= OrderTakeProfit ();
                        lot= OrderLots ();
                        typ_= OrderType ();
                         //Print("OpenPrice",r);

                         // ЕСТЬ ОРДЕР ПО ЦЕНЕ ЗАКРЫТОЙ ПОЗИЦИИ?
                        daa= false ;
                         for (i= 0 ; i<k; i++)
                          {
                           if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
                             {
                               if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op))
                                {
                                 if ( OrderType ()> 1 && OrderType ()< 6 )
                                   {
                                    d= MarketInfo ( OrderSymbol (), MODE_DIGITS );
                                    r= NormalizeDouble (r, d);
                                     if (r== NormalizeDouble ( OrderOpenPrice (),d)) daa= true ; //else continue;
                                   }
                                }
                             }
                          }
                         if (daa== false ) //ЕСЛИ НЕТ ОРДЕРА ПО ЦЕНЕ, СТАВЛЮ
                          {

                           if (r> Ask )
                             {
                               if (typ_== OP_BUY )
                                {
                                 Print ( "OP_BUYSTOP" ,r);
                                 SetOrder( Symbol (), OP_BUYSTOP ,lot,r,sl,tp,_MagicNumber, 0 , "bs" );
                                }
                               if (typ_== OP_SELL )
                                {
                                 Print ( "OP_SELLLIMIT" ,r);
                                 SetOrder( Symbol (), OP_SELLLIMIT ,lot,r,sl,tp,_MagicNumber, 0 , "sl" );
                                }
                             }

                           //
                           if ( Bid >r)
                             {
                               if (typ_== OP_BUY )
                                {
                                 Print ( "OP_BUYLIMIT" ,r);
                                 SetOrder( Symbol (), OP_BUYLIMIT ,lot,r,sl,tp,_MagicNumber, 0 , "bl" );
                                }
                               if (typ_== OP_SELL )
                                {
                                 Print ( "OP_SELLSTOP" ,r);
                                 SetOrder( Symbol (), OP_SELLSTOP ,lot,r,sl,tp,_MagicNumber, 0 , "bs" );
                                }
                             }

                          }
                         //return(r);
                       }
                    }
                 }
              }
           }
        }
     }
//
  }
 
PolarSeaman :

감사합니다. 첫 번째 사이클에서 적절한 시점에 마감된 포지션 의 시가를 찾습니다. 그것들은 모두 인쇄물에 표시되어 있고 나는 그들에게 영장을 발부해야 합니다.

어레이는 저에게 정글입니다. 시작 가격에 대한 주기를 확인하고 설정하는 방법을 알려주고 이 가격에 대한 첫 번째 검색 주기에 투자하십시오.

나중에 엉망이 된 것을 수정하는 것보다 어레이가 무엇인지 파악하고 이해하는 것이 더 빠릅니다.

또한 배열은 단순하지 않지만 매우 간단합니다.

AK 매거진은 30발을 보관할 수 있습니다. 크기가 30인 배열입니다. 그리고 탄창은 배열에 저장된 데이터입니다.

사실, 이것은 좋은 예가 아닙니다. 0, 1, 2를 얻을 때까지 세 번째 것을 얻을 수 없습니다.

음, 테이블을 상상해보십시오.

인덱스 0
인덱스 1
인덱스 2
인덱스 3
인덱스 4
인덱스5 인덱스6 인덱스 7
인덱스 8
인덱스 9
값 1
값 2
값 3
의미 4
값 5
의미 6
의미 7
값 8
의미 9
값 10

다음은 크기가 10인 간단한 1차원 배열입니다.

값 1은 인덱스 0인 셀에 저장되고 값 2는 인덱스 1인 셀에 저장되고 값 3은 인덱스 2인 셀에 저장됩니다.
...
값 8은 인덱스 7의 셀에 저장되고 값 9는 인덱스 8의 셀에 저장되며 값 10은 인덱스 9의 셀에 저장됩니다.

모든 것이 간단합니다. 값 3을 얻으려면 배열을 참조해야 합니다. 해당 셀 2: Value3=Array[2];