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

 
Eugen8519 :

이렇게 주문이 마감됩니다

위에 쓴대로 하세요...

또는 OnTick() 코드 게시

 
Eugen8519 :

이렇게 주문이 마감됩니다

이러한 구조는 다음과 같아야 합니다.

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (UseTimeLimit)
     {
       YesStop= true ;
       MqlDateTime str1;
       TimeToStruct ( TimeCurrent () , str1);
       if (str1.hour > startHour && str1.hour < stopHour)
          YesStop= false ;
     }
   if (YesStop== false )
     {
       if (EMA0...)
        {
         .....
         OPENORDER( "Sell" );
        }
   
       if (EMA0...)
        {
         .....
         OPENORDER( "Buy" );
        }
     }
//---
   if (EMA0...)
     {
      .....
      CLOSEORDER( "Sell" );
     }

   if (EMA0...) 
     {
      .....
      CLOSEORDER( "Buy" );
     }
  }
//+------------------------------------------------------------------+
void CLOSEORDER( string ord)
  {
   .....
  }
//---
void OPENORDER( string ord)
  {
   .....
  }
 
음, 조언 감사합니다. 저녁에 확인하고 구독을 취소하겠습니다.
 
MakarFX :

이러한 구조는 다음과 같아야 합니다.

내가 틀리지 않았다면, 당신은 이렇게 쓸 수 있습니다

   if (UseTimeLimit)
     {
       YesStop= true ;
       MqlDateTime str1;
       TimeCurrent (str1);
       if (str1.hour > startHour && str1.hour < stopHour)
          YesStop= false ;
     }
 
Eugen8519 :
음, 조언 감사합니다. 저녁에 확인하고 구독을 취소하겠습니다.

올빼미가 시작될 때 설정에서 UseTimeLimit이 설정되어 있으면

이 함수는 OnTick () 대신 OnInit()에서 더 좋습니다.

 
Vitaly Muzichenko :

내가 틀리지 않았다면, 당신은 이렇게 쓸 수 있습니다

나는 일반적으로 이렇게 쓴다.

 if (TimeHour(time[i])>=Time_Start&&TimeHour(time[i])<TimeFinish)

또는 더 쉽게

 if (Hour()>=Time_Start&&Hour()<TimeFinish)
 

안녕하세요! 표시선의 평균을 올바르게 계산하는 방법을 알려주시겠습니까? Per_1 주기가 있는 주 곡선은 평균 주기 Per_2 가 있는 Buffer_2[] 버퍼가 있는 간단한 평균 블록을 추가할 때까지 정상적으로 그려집니다(Buffer_1[]).

int OnCalculate(표준 옵션)

{

int i, j, 한계;

if(rates_total <= Per_1)

반환(0);

// 마지막으로 계산된 막대가 다시 계산됩니다.

제한 = rate_total - prev_calculated - Per_1;

if(prev_calculated > 0)

제한++;

// 표시기 버퍼의 계산 및 채우기

for(i=0; i < 한계; i++)

{

// 인디케이터의 메인 라인 계산

Buffer_1[i] = 곡선 공식

이중 합계 = 0;

for(j = i; j < Per_2 + i; j++)

{

// 평균 라인 계산

합계 += Buffer_1[j];

Buffer_2[i] = 합계 / Per_2;

}

}

반환(요금 합계);

}

 
Eugen8519 :
그것이 문제입니다. 시작 시간->정지 시간 주문만 열고 닫습니다.
그리고 미결 주문은 스톱아워 이후에 닫히지 않습니다.

스톱아워 이후에는 거래할 수 없기 때문에

저는 오랫동안 포지션에 대한 클로징, 후행 및 기타 지원 이전의 오픈 로직을 작성해 왔습니다. 더 큰 범위에서 사실입니다. 다른 것을 열기 전에 이미 열려 있는 것을 확인해야 합니다.

철자가 정확하면 블록을 다음과 같이 변경하면 됩니다.

 MqlDateTime str;
void OnTick ()
 {
 // Close Positions
 TrailingStop();

 if (условие_закрытия)
  {
   ClosePos();
  }

 // Open Positions
 if (UseTimeLimit)
  {
     TimeCurrent (str);
     if (str.hour > startHour && str.hour < stopHour)
     {
      OpesPos(...);
      ...
     }
  }
// end
}
 

시원한! 작동합니다. 감사합니다!