기고글 토론 "초보자를 위한 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 завершается.

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