바 끝에서 주문을 마감하도록 도와주세요!

 

바의 끝에서 정확하게 주문을 마감할 코드를 공식화하는 데 도움이 필요합니다. 이것은 특수 스캘퍼 EA를 위한 것이므로 정확한 정밀도가 필요합니다. 내가 의미하는 바를 설명하겠습니다.



여기에서 예를 들어 M15 EUR/USD 차트를 볼 수 있습니다. 이제 내가 X 로 표시된 양초의 시작점에서 긴 거래로 이어진 지표가 있다고 상상해보십시오. 매우 낮지만 그것은 중요하지 않습니다. 제 계산에 따르면 여기에서 최적의 출구는 1 로 표시된 막대의 종점일 것입니다. 까다로운 부분은 의 종가에서 주문을 마감하는 방법을 모른다는 것입니다. bar nr 1, 여기 도움이 필요합니다!

내가 지금 생각할 수 있는 가장 좋은 해결책은 다음과 같습니다(이 가상의 BUY 거래의 경우).


 /////////////////OrderSelect() and other stuff

if ( OrderType() == OP_BUY ){
    
if ( /* blablabla condition && */ Time[ 0 ]>OrderOpenTime()  ){

OrderClose( OrderTicket(), OrderLots(),OrderClosePrice() ,TAKEPROFITPIPS, CLR_NONE );             
RefreshRates();    

}}

이 코드는 정확히 Open[0]에서 매수 거래를 마감하지만 Close[1]에서는 마감하지 않습니다. 그림을 보고 2 로 표시된 막대를 확인하면 막대 2 가 에서 열리지 않았음을 알 수 있기 때문입니다. 이전 가격이 닫았을 때의 가격이 약간 다른 가격으로 열렸습니다. 그리고 때때로 다음과 같이 큰 차이가 발생합니다.



따라서 경험은 다음과 같이 알려줍니다.

닫기[1] != 열기[0]

매우 드문 상황에서 그렇습니다. 이것이 내가 Close[1]에서 바로 주문을 마감해야 하는 이유입니다.

한 가지 실현 가능한 솔루션은 시간을 계산하여(예: M1 및 M15 차트) M1의 경우 60초 또는 M15의 경우 900초로 계산하고 59초 또는 599초에서 주문을 마감하는 것입니다. 이것은 내가 추측하는 틱이 6초라는 것입니다(내가 틀렸다면 정정해 주세요). 그리고 이 시간 문제와 추가적인 미끄러짐 문제로 인해 바가 닫힌 후 거래 방식을 닫을 수 있기 때문에 정확하게 맞출 수 없습니다.

제 질문을 요약해 보겠습니다. 위에서 설명한 것처럼 시간을 계산하는 것이 가능합니까? 그렇다면 미끄러짐과 틱 지연 문제를 피하는 방법은 무엇입니까?

또는 Open[0]이 아닌 Close[1]에서 바로 주문을 마감하는 다른 솔루션을 생각해 낸다면 저는 이에 대해 열려 있습니다. 도와주세요. 이것은 제 EA의 매우 중요한 문제입니다!

 
Proximus :

바의 끝에서 정확히 주문을 마감할 코드를 공식화하는 데 도움이 필요합니다.

마지막 틱을 말할 수 있는 상황이 없습니다. 이 순간이 현재 막대의 마지막 틱 전 한 틱입니다.
 

계수, 나머지가 없는지 확인 하십시오. 행운을 빕니다

 if ( ! MathMod ( TimeCurrent (), PERIOD_M5 * 60 ) ) 

      OrderClose( OrderTicket(), OrderLots(), Bid , slippage );
 
trevone :

계수, 나머지가 없는지 확인하십시오. 행운을 빕니다

그것은 작동하지 않습니다. . . 바의 끝 또는 뒤에 있을 것입니다. . . 바의 끝에서 결코. deVries 가 말했듯이 현재 막대의 끝은 감지할 수 없지만 다음 막대의 시작은 감지할 수 있습니다. . .
 
RaptorUK :
그것은 작동하지 않습니다. . . 바의 끝 또는 뒤에 있을 것입니다. . . 바의 끝에서 결코. deVries 가 말했듯이 현재 막대의 끝은 감지할 수 없지만 다음 막대의 시작은 감지할 수 있습니다. . .


그것이 그렇게 나쁘지 않기 전에, 그것이 없어야 하는 바로 직후입니다. 종가 직전에 항상 가능하지만 종가에 최대한 가깝다면 나는 그 해결책도 받아들일 것입니다. 그러나 그것이 종가 후 단 1회라면 생각한 것보다 좋지 않으므로 허용되지 않습니다. 그러나 현재 틱 이후에 정확히 닫히는 이유는 무엇입니까?


그리고 바가 닫히기 1초 전에 다른 솔루션은 어떻습니까?

M1의 경우 이와 같이

 if ( Time[0]>=OrderOpenTime()+59  ) 

      OrderClose( OrderTicket(), OrderLots(), Bid , slippage );

이 경우 진드기 문제가 있는 경우 해결하는 방법은 무엇입니까?

 
Proximus :

그것이 그렇게 나쁘지 않기 전에, 그것이 없어야 하는 바로 직후입니다. 종가 직전에 항상 가능하지만 종가에 최대한 가깝다면 나는 그 해결책도 받아들일 것입니다. 그러나 그것이 종가 후 단 1회라면 생각한 것보다 좋지 않으므로 허용되지 않습니다. 그러나 현재 틱 이후에 정확히 닫히는 이유는 무엇입니까?


그리고 바가 닫히기 1초 전에 다른 솔루션은 어떻습니까?

M1의 경우 이와 같이

이 경우 틱 문제를 해결하는 방법 은 무엇 입니까?




그렇지 않은 경우 이것은 1분 더 기다리게 하며, 이 경우에도 대기하게 됩니다....
 
Proximus :

그것이 그렇게 나쁘지 않기 전에, 그것이 없어야 하는 바로 직후입니다. 종가 직전에 항상 가능하지만 종가에 최대한 가깝다면 나는 그 해결책도 받아들일 것입니다. 그러나 그것이 종가 후 단 1회라면 생각한 것보다 좋지 않으므로 허용되지 않습니다. 그러나 현재 틱 이후에 정확히 닫히는 이유는 무엇입니까?

틱이 있을 때만 EA( 및 Indicator )에서 발생합니다. 다음 바에 첫 번째 틱이 있을 때까지 막대의 마지막 틱이 언제인지 알 수 있는 방법이 없습니다. . . H1 막대의 경우 틱이 시간 59분 59초에 있더라도 해당 초 동안 다른 틱이 있을 수 있습니다. . .

근위부 :

그리고 바가 닫히기 1초 전에 다른 솔루션은 어떻습니까?

M1의 경우 이와 같이

이 경우 진드기 문제가 있는 경우 해결하는 방법은 무엇입니까?

. . . 그리고 막대의 마지막 5초 동안 눈금이 없을 수 있으므로 막대의 마지막 1초를 기다릴 수 없습니다.

 
RaptorUK :

틱이 있을 때만 EA( 및 Indicator )에서 발생합니다. 다음 바에 첫 번째 틱이 있을 때까지 막대의 마지막 틱이 언제인지 알 수 있는 방법이 없습니다. . . H1 막대의 경우 틱이 시간 59분 59초에 있더라도 해당 초 동안 다른 틱이 있을 수 있습니다. . .

. . . 그리고 막대의 마지막 5초 동안 눈금이 없을 수 있으므로 막대의 마지막 1초를 기다릴 수 없습니다.

따라서 은행 간 환율이 주어진 기간 동안 변경되지 않으면 브로커가 새 가격 데이터를 호출하지 않는다는 것을 이해해야 합니까?

나는 MT4의 눈금이 가격이나 볼륨에 관계없이 X 초 후에 항상 가격을 새로 고친다는 것을 의미한다고 생각했습니다. 따라서 새로 고침 빈도가 3초라고 가정하면 M1에서 57초 또는 그 이전에 해당 거래를 마감하십시오.


이 상황을 감안할 때 다음을 사용할 수 없었습니다.

RefreshRates();   

58초에 마지막 틱을 호출하고 59초에 종료하려면?

 
Proximus :

따라서 은행 간 환율이 주어진 기간 동안 변경되지 않으면 브로커가 새 가격 데이터를 호출하지 않는다는 것을 이해해야 합니까?

나는 MT4의 눈금이 가격이나 볼륨에 관계없이 X 초 후에 항상 가격을 새로 고친다는 것을 의미한다고 생각했습니다. 따라서 새로 고침 빈도가 3초라고 가정하면 M1에서 57초 또는 그 이전에 해당 거래를 마감하십시오.

중개인의 가격이 변경되지 않으면 Bid 및 Ask, 새 틱이 없습니다. . . 일부 덜 거래된 쌍의 자정 GMT 주변 에는 1분 이상 동안 틱이 없을 수 있습니다 . . . 새로운 틱은 사전 설정된 시간 이후에 생성되지 않으며, 가격, Bid 또는 Ask가 변경될 때 발생합니다(그리고 다른 상황에서는 다른 기호 매개변수 의 변경). . .

근위부 :

이 상황을 감안할 때 다음을 사용할 수 없었습니다.

58초에 마지막 틱을 호출하고 59초에 종료하려면?

틱이 없으면 RefreshRates()가 어떻게 호출됩니까?
 

MT4에서 진드기가 어떻게 작동하는지 설명해주셔서 감사합니다.

RaptorUK :

중개인의 가격이 변경되지 않으면 Bid 및 Ask, 새 틱이 없습니다. . . 일부 덜 거래된 쌍의 자정 GMT 주변 에는 1분 이상 동안 틱이 없을 수 있습니다 . . . 새로운 틱은 사전 설정 시간 이후에 생성되지 않으며, 가격, Bid 또는 Ask(그리고 다른 상황에서는 다른 기호 매개변수의 변경)가 변경될 때 발생합니다. . .

틱이 없으면 RefreshRates()가 어떻게 호출됩니까?

글쎄, 나는 RefreshRates()가 브로커가 그의 유동성 공급자로부터 새로운 피드 세트를 호출하도록 강제할 것이라고 생각했지만, 그렇지 않은 것 같다.


어쨌든, 누구든지 이것보다 내 문제에 대한 더 나은 해결책을 찾을 수 있다면 나와 공유하십시오. 매우 중요합니다 ! 감사합니다!

 /////////////////OrderSelect() and other stuff

if ( OrderType() == OP_BUY ){
    
if ( /* blablabla condition && */ Time[0]>OrderOpenTime()  ){

OrderClose( OrderTicket(), OrderLots(),OrderClosePrice() ,TAKEPROFITPIPS, CLR_NONE );             
RefreshRates();    

}}
 
Proximus :

MT4에서 진드기가 어떻게 작동하는지 설명해주셔서 감사합니다.

랩터영국 :

중개인의 가격이 변경되지 않으면 Bid 및 Ask, 새 틱이 없습니다. . . 일부 덜 거래된 쌍의 자정 GMT 주변 에는 1분 이상 동안 틱이 없을 수 있습니다 . . . 새로운 틱은 사전 설정 시간 이후에 생성되지 않으며, 가격, Bid 또는 Ask(그리고 다른 상황에서는 다른 기호 매개변수의 변경)가 변경될 때 발생합니다. . .

틱이 없으면 RefreshRates()가 어떻게 호출됩니까?

글쎄, 나는 RefreshRates()가 브로커가 그의 유동성 공급자로부터 새로운 피드 세트를 불러내도록 할 것이라고 생각했지만, 그렇지 않은 것 같다.


어쨌든, 누구든지 이것보다 내 문제에 대한 더 나은 솔루션을 찾을 수 있다면 나와 공유하십시오. 매우 중요합니다! 감사합니다!


당신이 할 수 있는 최선은 바의 마지막 틱 다음에 다음 틱, 즉 다음 바의 첫 번째 틱을 사용하는 것입니다.