기고글 토론 "초보자를 위한 MQL5 Expert Advisor 코드 작성 가이드" - 페이지 12

 

당시에는 이 버튼을 어떻게 사용하는지 몰랐지만 지금은 알 것 같습니다.

extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.2;
int ticket;
void OnStart()
{
datetime date1=D'2014.10.28.13.22.13';
 if(OrdersTotal()==0)
 {
 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
 }
 if (OrdersTotal()==1 && Hour( )==13 && Minute( )==23 && Seconds ( )>=00)
 {
 bool select1=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
 bool close1=OrderClose(ticket,Lots,Bid,20,Green);
 }
 return(0);
}
[삭제]  
Grenjohn:

그때는 이 버튼을 어떻게 사용하는지 몰랐지만 이제는 알 것 같습니다.

조건에 관한 것입니다:

if( OrdersTotal() == 0 )

지정한 날짜1이 발생했는지 확인하지 않았습니다. 이제 미체결 주문이 없는 경우 첫 번째 체크 표시로 즉시 주문을 개시해야 합니다! 즉, 여기와 동일하게 해야 합니다,

if (OrdersTotal()==1 && Hour( )==13 && Minute( )==23 && Seconds ( )>=00)

하지만 정확한 요일, 시, 분, 초(몇 초)를 지정해야 합니다.

그리고 한 가지 더 있습니다. 가격 sl과 tp는 정규화해야 하며, 그렇지 않으면 오류가 발생할 수 있습니다.

 

차트에 합산이 중지된 것이 있는데 SL 및 TP 가격을 정상화한다는 것이 무엇을 의미하는지 알려주세요.

extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.3;
int ticket;
void OnStart()
{
datetime date1=D'2014.10.28.15.08.30';
 if(OrdersTotal()==0 && Hour( )==15 && Minute( )==08 && Seconds( )>=30)
 {
 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
 }
 if (OrdersTotal()==1 && Hour( )==15 && Minute( )==09 && Seconds( )>=00)
 {
 bool select1=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
 bool close1=OrderClose(ticket,Lots,Bid,20,Green);
 }
 return(0);
}
 
Grenjohn:

이 버튼을 어떻게 사용하는지 이해하지 못했는데 이제 이해한 것 같습니다.

extern datetime date1=D'2014.10.28 13:22:13';
extern datetime date2=D'2014.10.29 13:22:13';
extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.2;
int ticket = 0;

void OnStart()
{
 static int flag = 0;

 switch ( flag )
 {
   // 0 - 위치 없음
   case 0:
   {
     // 날짜1 시간이 되면 포지션을 개설합니다.
     if ( TimeCurrent() >= date1 )
     {
       if ( ticket <= 0 )
       {
         ticket = OrderSend( ... );
       }
       if ( ticket > 0 )
       {
         flag = 1;
       }
     }
     break;
   }
   // 1은 포지션
   case 1:
   {
     // 날짜2 시간이 도착하면 포지션을 청산합니다.
     if ( TimeCurrent() >= date2 )
     {
        if ( ticket > 0 && OrderSelect( ticket, SELECT_BY_TICKET ) && OrderCloseTime() <= 0 )
        {
           if ( OrderClose( ticket, ... ) == true )
           {
              ticket = 0;
              flag = 2;
           }
        }
     }
     break;
   }
 }
}

날짜1이 발생하면 포지션을 오픈하고 날짜2가 발생하면 포지션을 청산한 후 다시 시작할 때까지 아무 작업도 하지 않습니다.

[삭제]  
Grenjohn:

차트에 합산이 중지된 것이 있는데 SL 및 TP 가격을 정상화한다는 것이 무엇을 의미하는지 알려주세요.

https://www.mql5.com/ko/docs/convert/normalizedouble
Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

여러분의 도움과 인내심에 대단히 감사하지만 불행히도 지금까지는 작동하지 않습니다 !!!?

전문가 어드바이저를 추가하려고 하는데 추가되지 않아요!!!!

extern datetime date1=D'2014.10.29 22:29:10';
extern datetime date2=D'2014.10.29 21:30:00';
extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.30;
int ticket = 0;
void OnStart()
{
 static int flag = 0;

 switch ( flag )
 {
   // 0 - 위치 없음
   case 0:
   {
     // 날짜1 시간이 되면 포지션을 개설합니다.
     if ( TimeCurrent() >= date1 )
     {
       if ( ticket <= 0 )
       {
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
       }
       if ( ticket > 0 )
       {
         flag = 1;
       }
     }
     break;
   }
   // 1은 포지션
   case 1:
   {
     // 날짜2 시간이 도착하면 포지션을 청산합니다.
     if ( TimeCurrent() >= date2 )
     {
        if ( ticket > 0 && OrderSelect( ticket, SELECT_BY_TICKET ) && OrderCloseTime() <= 0 )
        {
           if ( OrderClose( ticket,Lots,Bid,20,Green) == true )
           {
              ticket = 0;
              flag = 2;
           }
        }
     }
     break;
   }
 }
}


 
Grenjohn:

여러분의 도움과 인내심에 대단히 감사하지만 지금까지는 불행히도 작동하지 않습니다 !!!?

전문가 어드바이저를 추가하려고 하는데 추가되지 않아요!!!?


이는 전문가 자문가가 아니라 보조지표가 생성되지 않았음을 의미합니다.

마법사를 통해 새 EA를 생성하고 OnStart 함수의 코드와 모든 전역 변수/외부 매개변수만 교체하세요.

[삭제]  
komposter:

이는 전문가 보조가 아니라 보조지표가 생성되었음을 의미합니다.

마법사를 통해 새 EA를 만들고 OnStart 함수의 코드와 모든 전역 변수/외부 매개 변수만 교체합니다.

아마도 스크립트 전용인 OnStart() 함수를 사용하여 Expert Advisor를 만들었을 가능성이 높습니다.
[삭제]  
Grenjohn:

여러분의 도움과 인내심에 대단히 감사하지만 지금까지는 불행히도 작동하지 않습니다 !!!?

전문가 어드바이저를 추가하려고 하는데 추가되지 않아요!!!?


MQL4에서 새 Expert Advisor를 만들고 거기에 기존 코드를 복사 한 다음 줄을

void OnStart()

으로

void OnTick()

이것은 Expert Advisor를 만들려는 경우입니다. 스크립트를 생성하려면 새 스크립트를 생성하고 기존 코드를 변경하지 않고 완전히 복사합니다(시간 기반 거래의 경우 스크립트가 의미가 없음).

 
문서에서 발췌한 내용입니다:
Новый бар характеризуется величиной тикового объема, равной 1, если он больше 1, то выполнение функции OnTick завершается.

이 설명을 충족하는 코드는 어디에 있나요? 이해가 안 되는 부분이 있거나 코드에 그런 내용이 없습니다.