새 막대 표시 - 페이지 4

 
Donald Gibson :

향상된 MQL4 ?

들어본 적이 없습니다.


저도 어제부터 ;) 그리고 정확한 이름은 " Updated MQL4 "인 것 같습니다. MQ 쓰기:

(..) 빌드 600부터 MQL4 프로그래밍 언어가 MQL5 수준에 도달 하도록 완전히 수정되었습니다. 이제 통합 MetaEditor 개발 환경, 단일 스타일, 라이브러리 및 디버깅 도구를 사용하여 MQL4/5에서 거래 로봇을 개발할 수 있습니다.

(...) 따라서 MQL4 기능을 완전히 보존하는 MQL5 언어 기능 및 기능을 최대한 구현하기로 결정했습니다. 즉, ООP 및 기본 코드 컴파일러를 포함한 모든 강력한 MQL5 기능 을 MQL4에서 사용할 수 있게 됩니다. (...)

이를 달성하기 위해 MQL4 및 MQL5 언어를 모두 자동으로 지원 하는 통합 컴파일러 를 개발했습니다. (...)

정의의 문제는 "언어"라는 단어입니다. C++이 언어이고 Basic이 언어인 것과 같은 방식으로 언어는 MQL입니다. 업데이트된 MQL4/MQL5는 MQL의 플랫폼별 모드일 뿐 그 이상도 그 이하도 아닙니다. 따라서 (네이티브) MQL4와 업데이트된 MQL4의 비교는 C 및 C++와 거의 동일합니다. 그리고 MQL4.com을 MQL5.com으로 마이그레이션하여 혼란을 완벽하게 만들었습니다. 이 게시물에서 볼 수 있듯이 대부분의 사람들은 나와 마찬가지로 OOP를 MQL4와 연관시키지 않습니다. 저에게 이것은 항상 MT4와 MT5 플랫폼을 모두 지원하는 MQL5였습니다.

그러나 어쨌든, 그것은 꽤 잘 작동하고 MQL 무엇이든 주변의 다른 모든 형편없는 것들과 비교할 때 최고의 인터페이스입니다.

 

@Lorentzos Roussos

Alain can correct me on this but you may find gaps in instances where on the time horizon of a bar there where no ticks , so no bar will be in place

으으으으으으으으으으으으으으으으으으으으으윽 (아무것도 의미하지 않습니다).

저는 "NewBar-indicator"를 사용하여 이전 막대의 높거나 낮은 스톱을 자동으로 당깁니다.

(사실 "Innenstaebe and Aussenstaebe"(eng. "inside and outside movement" ???)라고 생각하면 조금 더 어렵습니다. 정확한 번역이 뭔지 모르겠습니다.

그러나 나는 이것을 분당 최소 20 - 최대 수백 틱이 있는 유동성 시장에서만 사용할 것입니다.

나는 틱 없이 10분이라는 시간을 찾지 못할 것이라고 생각합니다.

어쨌든 프로그램은 이것을 처리할 수 있어야 합니다.

감사해요!

윌버

 
Willbur :

@Lorentzos Roussos

Upppsss ... 나는 그런 갭을 본 적이 없습니다. (아무것도 의미하지 않습니다).

저는 "NewBar-indicator"를 사용하여 이전 막대의 높거나 낮은 스톱을 자동으로 당깁니다.

(사실 "Innenstaebe and Aussenstaebe"(eng. "inside and outside movement" ???)라고 생각하면 조금 더 어렵습니다. 정확한 번역이 뭔지 모르겠습니다.

그러나 나는 이것을 분당 최소 20 - 최대 수백 틱이 있는 유동성 시장에서만 사용할 것입니다.

나는 틱 없이 10분이라는 시간을 찾지 못할 것이라고 생각합니다.

어쨌든 프로그램은 이것을 처리할 수 있어야 합니다.

감사해요!

윌버

iTime을 사용하고 있습니다. 새 막대가 없으면 어쨌든 실행되지 않습니다. 안전합니다.
 
iTime을 사용하고 있습니다. 새 막대가 없으면 어쨌든 실행되지 않습니다. 안전합니다.

"iTime을 사용 중입니다"은(는) 무슨 뜻인가요? "iTime"은 프로그램의 변수일 뿐입니다. 원하는 경우 "Bert" 또는 "Clarly"로 이름을 지정할 수 있습니다.

- - - - -

오늘은 몇가지 테스트를 해보았습니다. 그리고 당신이 언급한 몇 가지 공백을 찾았습니다.

예를 들어 20:34에 S&P500에는 막대가 있습니다. 20:35와 20:36에는 서버(ActiveTrades)에서 틱과 막대가 없습니다. 다음 틱은 20:37에 도착했습니다.

결과적으로 이 기간 동안 차트에 막대가 없습니다. (첨부된 M1 차트 참조)

확인은 하지 않았지만 이번에는 CopyRates() 함수 내에 막대가 없는 것 같습니다.



이 시점에서 코드를 확인해야 한다고 생각합니다.

20:37 막대의 첫 번째 눈금 세 개를 새 막대로 표시할 것입니다.

(TimeCurrent()는 20:34에서 20:37로 점프합니다! 거기에 도달하려면 PeriodeSeconds()를 세 번 추가해야 합니다.

void OnTick()  
{
//---   if(TimeCurrent()>=projection)   
    {Print("New Bar "+TimeToString(projection,TIME_DATE|TIME_MINUTES));   
     projection=projection+PeriodSeconds();   
    }

윌버


 

모두들 안녕,

누군가가 여전히 찾고 있는 경우를 대비하여 바당 하나의 거래만 열릴 수 있도록 내 코드에서 발췌한 내용이 있습니다.

   if ( iBars ( Symbol (), 0 ) == BarsCurr)DisableTrading = 1 ;
  
   for (i= 0 ;i< OrdersTotal ();i++)
  {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ) == True && OrderMagicNumber () == MagicNumber) DisableTrading = 1 ;
  }

   for (i= OrdersTotal ();i> 0 ;i--)
  {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) == True && OrderMagicNumber () == MagicNumber)
  {
   if (( OrderClosePrice () >= Open [ 0 ] && OrderClosePrice () <= Close [ 0 ]) && ( OrderOpenPrice () >= Open [ 0 ] && OrderOpenPrice ()<= Close [ 0 ]))
  {
  DisableTrading = 1 ;
  }
   }
      }

ibars는 막대로 대체될 수 있으며 disabletrading = 1은 아무 것도 하지 않음을 의미합니다. 막대 부분은 정상적으로 게시된 것을 사용하여 더 이해할 수 있습니다. BarsCurr = 0을 초기화 부분에, BarsCurr = Bars를 코드의 매수/매도 주문 부분에 두십시오.

그래도 문제가 있습니다. 신호 역전으로 마감 순서를 구현하려고 합니다. 아이디어가 있습니까?

 

NewBars의 인정에 대한 논쟁이 조금 길어졌으므로 결과를 간단히 요약해 보겠습니다.

기술 환경:

서버에서 변경(신규 거래 또는 신규 가격 결정)이 감지되면 서버는 신호를 단말기로 보냅니다. 터미널 프로그램은 OnTick() 루틴을 트리거합니다.

이 신호를 통해 다음 정보를 얻습니다.

현재 시간() - 틱이 전송된 서버 시간입니다.

마지막 틱에 대한 정보 - SymbolInfoTick()
• 틱이 발생한 서버 시간
• 묻다
• 입찰
• 최종 가격(일부 제공업체 제외)
• 변경된 사항을 나타내는 플래그.

현재 막대에 대한 정보
– CopyRates()
• 막대의 "이름"(예: "10:20:00").
• 오픈-하이-로우-클로즈

새로운 막대 인식 (예: 기간 = M1)

서버는 무언가가 변경된 경우에만 신호를 보내기 때문에
이름이 "hh.mm:00"인 막대가 "hh:mm:00"보다 늦게 나타날 수 있습니다.

이로 인해 유동성이 거의 없는 기호에 특별한 상황이 발생할 수 있습니다.

기간을 처리하는 솔루션은 다음을 감지하지 못합니다.

TimeCurrent() 막대 "이름"
마지막 틱 10:10:07 10.10:00
다음틱 10:11:30 10:11:00

Nether with that (마침표에 0 틱):

TimeCurrent() 막대 "이름"
마지막 틱 10:10:30 10:10:00
다음 틱 10:13:40 10:13:00 10:12:00 막대가 없습니다!

막대가 아닌 동안 서버 시간이 이미 다음 기간으로 전환되는 상황(서버의 부하가 매우 높을 때?)을 거의 본 적이 없습니다.

TimeCurrent() 막대 "이름"
마지막 틱 10:10:00 10:09:00
다음틱 10:10:00 10:10:00

결론:

불필요한 CopyRates()를 억제하기 위해 TimeCurrent()를 사용하는 것이 좋습니다.

TimeCurent()가 새로운 기간에 도달하면 막대도 전환되는지 확인해야 합니다.

이것은 Alain이 아주 초기에 논의한 코드로 돌아가게 합니다.

https://www.mql5.com/en/forum/22983

윌버

Improve your time execution by removing Bars function calls
Improve your time execution by removing Bars function calls
  • www.mql5.com
After a basic profiling I get the following results :.
 

@emeka 음바네포

내 설명서에는 "iBars"라는 기능 이 언급되어 있지 않습니다.

이것이 MQL5 코드라고 확신합니까?

윌버

 
Willbur :

@emeka 음바네포

내 설명서에는 "iBars"라는 기능이 언급되어 있지 않습니다.

이것이 MQL5 코드라고 확신합니까?

윌버

아, mql5용이 아닙니다. mql4용인 것 같아요. 여전히, iBars는 놀고 있습니다. 이전에 언급한 바와 같이 일반 기능으로서의 막대입니다.

신호 반전 코드에 대한 지원을 여전히 기다리고 있습니다.

감사해요.

 
emeka Mbanefo :

아, mql5용이 아닙니다. mql4용인 것 같아요. 여전히, iBars는 놀고 있습니다. 이전에 언급한 바와 같이 일반 기능으로서의 막대입니다.

신호 반전 코드에 대한 지원을 여전히 기다리고 있습니다.

감사해요.

  • 관련 없는 내용으로 다른 주제를 가로채지 마십시오.
  • 이 주제는 이미 언급했듯이 mql5에 관한 것입니다.
  • 이 주제는 막대당 한 번만 거래하는 것이 아니라 새로운 막대를 감지하는 방법에 관한 것입니다.
  • iBar는 새 막대를 감지할 수 없습니다.
Indicate a new bar
Indicate a new bar
  • www.mql5.com
Another idea could be the check wether the number of bars has been incremented.