[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 419

 

Forexman77 :
프로그램이 EMA 수준을 가격으로 출력하도록 하는 방법은 무엇입니까? 마침표(1)가 있는 ЕМА1, 마침표(0)가 있는 ЕМА2, ЕМА1이 1.3321, 현재 기간의 ЕМА2가 1.3200이라고 가정해 보겠습니다. 표현식(EMA1-EMA2)의 결과는 0.0121과 같아야 합니다. 확인하기 위해 스크립트를 실행하면 경고에 값 0이 표시되지만 "0.0121"이어야 합니다. 이 문제를 해결하는 방법은 무엇입니까?

double delta = iMA ( NULL , 0 , 1 , 0 , MODE_EMA , PRICE_CLOSE , 0 ) - iMA ( NULL , 0 , 0 , 0 , MODE_EMA , PRICE_CLOSE , 0 );

if (delta == 0.0121 ) Alert ( "Delta=0.0121" ); 
 
Forexman77 :
프로그램이 EMA 수준을 가격으로 출력하도록 하는 방법은 무엇입니까? 마침표(1)가 있는 ЕМА1, 마침표(0)가 있는 ЕМА2, ЕМА1이 1.3321, 현재 기간의 ЕМА2가 1.3200이라고 가정해 보겠습니다. 표현식(EMA1-EMA2)의 결과는 0.0121과 같아야 합니다. 확인하기 위해 스크립트를 실행하면 경고에 값 0이 표시되지만 "0.0121"이어야 합니다. 이 문제를 해결하는 방법은 무엇입니까?

스크립트 자체를 볼 수 있습니까? - 아마도 잘못된 데이터 유형 을 사용하여 예를 들어 double 대신 정수(따라서 0으로 반올림됨)를 얻거나 0 값으로 이어지는 다른 것을 사용합니다. 코드 없이는 이해하기 어렵습니다.

그건 그렇고, 스크립트를 사용하여 이전에 작성한 내용을 확인하는 경우 오류는 스크립트 자체(아마도 지표를 확인하기 위해 특별히 작성됨) 또는 지표 자체의 코드에 있을 수 있습니다.

 
TarasBY :
내가 작성하도록 제안한 주문 필터링이 올바르게 작성되고 계산에서 수수료와 스왑을 고려하면 모든 것이 올바르게 작동합니다.


당신은 분명히 매우 어려운 방법을 제공했습니다.

나는 아무것도 할 수 없습니다.


나는 어리석게도 귀하의 샘플에 다음을 삽입했습니다.

ld_Profit = fGet_ProfitLastCloseOrd ( 12 );    
Print (ld_Profit);

그는 어떤 수치를 제시하지만 그것은 현실과 거리가 멀다.

모든 것이 작동하려면 숫자 12를 입력해야 하는 특히 어리석은 사람들을 위해 표시해 주시겠습니까? "주문 필터링"에 대해 전혀 모르기 때문에 ....

 
lottamer :


당신은 분명히 매우 어려운 방법을 제공했습니다.

나는 아무것도 할 수 없습니다.


나는 어리석게도 귀하의 샘플에 다음을 삽입했습니다.

그는 어떤 수치를 제시하지만 그것은 현실과 거리가 멀다.

모든 것이 작동하려면 숫자 12를 입력해야 하는 특히 어리석은 사람들을 위해 보여줄 수 있습니까? "주문 필터링"에 대해 전혀 모르기 때문에 ....

기능을 완전히 제어하기 위해 모든 중간 계산이 차트에 표시되었습니다.

코드를 작성하는 것만 남아 있습니다.

두 가지 방법이 있습니다. 직접 알아내거나(예제를 사용하여 작업 스크립트를 제공했습니다), 모든 것을 해 줄 사람을 찾으십시오.

추신: 갑자기 그것을 알아내고자 하는 욕구가 있다면 여기에서 시작할 수 있습니다.

 
Chiripaha :

스크립트 자체를 볼 수 있습니까? - 아마도 잘못된 데이터 유형을 사용하여 예를 들어 double 대신 정수(따라서 0으로 반올림됨)를 얻거나 0 값으로 이어지는 다른 것을 사용합니다. 코드 없이는 이해하기 어렵습니다.

그건 그렇고, 스크립트를 사용하여 이전에 작성한 내용을 확인하는 경우 오류는 스크립트 자체(아마도 지표를 확인하기 위해 특별히 작성됨) 또는 지표 자체의 코드에 있을 수 있습니다.


맞습니다. EMA를 int에서 double로 제거했고 모든 것이 원래대로 되었습니다.
 
TarasBY :

기능을 완전히 제어하기 위해 모든 중간 계산이 차트에 표시되었습니다.

코드를 작성하는 것만 남아 있습니다.

두 가지 방법이 있습니다. 직접 알아내거나(예제를 사용하여 작업 스크립트를 제공했습니다), 모든 것을 해 줄 사람을 찾으십시오.

추신: 갑자기 그것을 알아내고자 하는 욕구가 있다면 여기에서 시작할 수 있습니다.


고마워, 나는 확실히 그것을 알아 내려고 노력할 것이다.
 
Forexman77 :
프로그램이 EMA 수준을 가격으로 출력하도록 하는 방법은 무엇입니까? 마침표(1)가 있는 ЕМА1, 마침표(0)가 있는 ЕМА2, ЕМА1이 1.3321, 현재 기간의 ЕМА2가 1.3200이라고 가정해 보겠습니다. 표현식(EMA1-EMA2)의 결과는 0.0121과 같아야 합니다. 확인하기 위해 스크립트를 실행하면 경고에 값 0이 표시되지만 "0.0121"이어야 합니다. 이 문제를 해결하는 방법은 무엇입니까?

int가 아닌 double 유형의 변수를 계산에 사용하십시오.

NormalizeDouble(number1-number2, 원하는 정밀도) 식의 결과를 계산할 때 정규화를 사용합니다.

화면에 결과를 표시하는 데 사용(로그에서) DoubleToStr(수신된 결과, 원하는 정확도);

코드 없이는 더 이상 할 말이 없습니다...

 
Forexman77 :
맞습니다. EMA를 int에서 double로 제거했고 모든 것이 원래대로 되었습니다.

여기에서 이미 찾았습니다 ... 어쨌든 숨겨진 오류와 부정확성을 피하기 위해 이중 유형 의 데이터를 비교하고 계산할 때 정규화를 사용하십시오.
 
Chiripaha :

결론은 다음과 같습니다. 물론 관심을 끌기 위해 일반적인 설명만 제공했기 때문에 조건을 더 자세히 설명하도록 요청할 수 있습니다. 지연이 로봇에 의해 설치되었을 때(미리 여부, 수동 시간적으로 로봇과 거의 동일합니다. 그러나 어쨌든이 경우 브로커와 만 처리해야합니다. 왜냐하면. 그는 아마도 트랜잭션 실행을 대기열에 넣는 자신의 스레드를 가지고 있습니다. 대기열에 먼저 수동 연기가 있는 경우 연기에 대한 실행 시간(다른 클라이언트의 대기열 포함)이 다르므로 가격도 다를 수 있다고 가정합니다. 그리고 로봇이 신호를 형성하는 기간 동안 지연을 설정하면 대기열에 들어가는 것이 다시 명확하지 않으므로 실행 가격의 변동이 가능합니다. 아무 것도 쓰지 않은 위치의 크기도 영향을 줄 수 있습니다... 등등...

하지만...역시 브로커(DC)를 통해서만 알 수 있습니다. 그리고 나는 그가 내가 언급하지 않은 많은 이유를 찾을 것이라고 생각합니다. -그리고 조언은 정확했습니다. 물론 보류중인 주문에 대한 요청이 이동했다고 생각하는 경우 손과 브로커에 로그인하십시오. 그러나 두 가지 다른 개념을 혼동하지 마십시오. 보류 중인 주문과 이 보류 중인 주문에 대한 거래. 보류 주문은 신고된 수량과 가장 가까운 가격으로 시장에 진입하는 주문입니다. 거래는 선언된 금액(로트)에 대해 주문을 실행할 수 있었던 가격입니다. - 그리고 이러한 주문의 가격은 (특히 링크가 제공된 빠른 시장에서) 다를 가능성이 큽니다. 지정가 주문의 경우 주문 가격과 실행 가격은 동일합니다(정의에 따라).

그리고 브로커와 데모와 실제가 다르지 않다는 사실-좋습니다! - 이것은 브로커가 고객을 유치하기 위해 거래를 조작하지 않는다는 것을 암시합니다(귀하의 말에서). - 이 경우 불일치가 보이지 않습니다.


자세한 답변 감사합니다. 무엇인지 명확해졌습니다. Instant Execution 명령 실행 시스템을 사용하면 이 문제가 해결됩니까?

내가 말하지 않은 조건:

로봇은 수동으로 설정한 것보다 지연을 일찍 설정했지만 뉴스로 수정되었습니다.

거래량은 같았고, 거리는 거의 같았습니다.

일반적인 조건에서 거의 완전히 유사했습니다

 
TarasBY :
현재 날짜는 현재 D1 막대(iTime(NULL, PERIOD_D1, 0))의 시작 부분에서 시작되지만 쉬운 방법을 찾고 있지 않습니까?! :)))


여기에서 문제가 발생했습니다.

모든 것이 작동하지만 한 번만 작동합니다. 저것들. 하루의 기간(iTime(NULL, PERIOD_D1 , 0))을 설정하면 다음 날 더 이상 작동하지 않습니다.

테스트를 위한 테스트 코드 작성

GetProfitFromDateInCurrency ( Symbol (), - 1 , - 1 , iTime ( NULL , PERIOD_M1 , 0 ));  

if   (GetProfitFromDateInCurrency()< 1 && GetProfitFromDateInCurrency()>- 1 )
    { My_buy ();  My_close(); }
поставил период МИНУТКИ, так чтобы за минуту слить доллар на спреде и остановиться, ДО НАЧАЛА ВТОРОЙ МИНУТЫ. И он льет и останавливается. А вот почему на второй минуте он не открывает сделок?