전문가 자문 커뮤니티 - 페이지 3

 
퇴비

나는 빨리 보았고 (아직 파지 않았음) 당신을 위해 계산된 point 에 대한 호소를 찾았습니다.
그것을 "던지고" 어리석게 Point를 넣어보십시오. 아마도 문제는 이것입니다(MarketInfo를 통한 포인트가 항상 필요한 방식으로 나오지 않을 수 있습니까?).

네, 항상...
정규화를 시도할 수 있지만 =)

그리고 이것이 항상 허용되는 것은 아닙니다. 전문가는 여러 쌍을 거래할 수 있으며 그 요점은 다를 수 있습니다...
 
문제는 최초의 컴퓨터 칩만큼 오래되었습니다.
이것은 물론 슬픈 일이지만 ... 어떻게 든 빠져 나와야합니까? 레나트가 뭐라도 말해주기를...
 
if ( orderstoploss == 0.0 || (  orderstoploss < ( bid - TrailingStop * point ) ) )


orderstoploss = 1.29211(소수점 5자리)
입찰가=1.29716(또한 5자리)
후행 정지 = 50
포인트=0.001
그런 다음 (입찰가 - TrailingStop * 포인트)=1.29216>1.29211
사실, 이것은 숫자 가 갑자기 5와 같아야 한다는 것을 요구합니다.
그리고 더 나아가

if ( orderstoploss == 0.0 || (  orderstoploss < ( bid - TrailingStop * point ) ) )


로 쉽게 교체할 수 있습니다.

if ( orderstoploss < ( bid - TrailingStop * point )) )


내가 보기에 손절매 수준이 없는지 확인하는 것은 추적할 때 필요하지 않은 것 같습니다.
사실 나 자신을 고쳐야 한다. 이익이 있을 때만 손절매를 하면 마진 콜까지 기다릴 준비가 됩니다.
다른 것을 찾지 못했습니다. 어떤 쌍에서 후행이 올바르게 작동하지 않았으며 강한 움직임이 있었습니까?

 
안녕하세요.
나는 비교를 위해 모든 것을 정수로 가져옵니다. 그리고 일반적으로 가능한 한 저장하고
주어진 값(배열, 변수 등)을 사용합니다.
저것들. int 유형의 변수는 -2147483648에서 2147483647 사이의 값을 가질 수 있습니다.
이 치수는 십자가에 매우 적합합니다.
따라서 1.2999와 1.3000은 12999와 13000으로 줄여서 안전하게 비교할 수 있고,
마침표가있는 쓰레기를 두려워하지 않습니다.

여기에 예를 들어 예시를 스케치했습니다. :)
int Normalize(double double_value, int digits) - приводит double в int  (1.2999 в 12999)
double Restore(int int_value, int digits) - приводит полученный ранее int в double (12999 в 1.2999)


여기

//+------------------------------------------------------------------+
//|                                                   ShiftPoint.mq4 |
//|                                                            Begun |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   return(0);
}
//+------------------------------------------------------------------+
int Normalize(double double_value, int digits)
{
	return (NormalizeDouble(double_value,digits)*MathPow(10,digits));
}
double Restore(int int_value, int digits)
{
	return (NormalizeDouble((int_value/MathPow(10,digits)),digits));
}
//+------------------------------------------------------------------+
int start()
{
	double	Test_Value =  1.29999999;
	int	Test_int;
	double	Test_double;

	Test_int         = Normalize(Test_Value,Digits);
	Test_double   = Restore(Test_int,Digits);
	Print("-----------------------------");
	Print("Restored value    = ",DoubleToStr(Test_double,Digits));
	Print("Shift Point Value = ",Test_int);
	Print("Real Double Value = ",DoubleToStr(Test_Value,8));
}
//+------------------------------------------------------------------+



산출:
shiftpoint EURUSD,H1: 실제 더블 값 = 1.29999999
시프트포인트 EURUSD,H1: 시프트 포인트 값 = 13000
shiftpoint EURUSD,H1: 복원된 값 = 1.3000

 
왠만하면 교체하세요
if ( orderstoploss < ( bid - TrailingStop * point )) )



if ( TrailingStop < ( bid -orderstoploss)/ point  )


옵션으로.

 
참여해 주셔서 감사합니다!
로쉬 17.04.05 22:29
손절매 수준이 없는지 확인하는 것은 내가 볼 때 후행할 때 필요하지 않은 것 같습니다.
동의하지 않습니다. 후행은 명확해야 합니다. 활성화되면 SL이 설정됩니다.

어떤 쌍에서 후행이 올바르게 작동하지 않았으며 강한 움직임이 있었습니까?
이제 Expert Advisor는 히브리어로 작동합니다 - 주기적으로 오류가 발생합니다... 하루 종일... 제 생각에는 그게 요점이 아닌 것 같습니다..

왠만하면 교체하세요
지금 시도해 보겠습니다. 아마도 도움이 될 것입니다.) 내일 말씀드리겠습니다...

시작 17.04.05 22:46
안녕하세요.
나는 비교를 위해 모든 것을 정수로 가져옵니다.
안녕하세요 =) 이것은 물론 옵션입니다 ...하지만 나는 그렇게 변태 할 필요가 없다고 생각했습니다 .. 개발자의 최소한 한 마디 - 그들은 여전히 더 잘 알고 있습니다 ..
 
죄송합니다. 토론에 참여하지 않았습니다.

2dev:
문제는 첫 번째 컴퓨터 칩만큼 오래되었습니다.

맞습니다. 이것은 근본적인 문제이며 부동 소수점 숫자를 비교하는 것은 위험합니다.
중요한 장소에서는 Normalize()를 통해 지속적으로 숫자를 일정한 정밀도로 가져옵니다.

어떤 산술 구현을 사용합니까?

더블(8바이트) 유형의 표준입니다.

그건 그렇고, 우리는 오류를 피하기 위해 거래 요청 에서 전송 된 모든 가격을 강제로 정규화합니다.
손절매 요청을 1.2932461로 보낼 수 있지만 1.2932가 설정됩니다.
같은 가격에 정류소 재설정 시도가 실수가 아닌지 확인 부탁드립니다.
 
같은 가격에 정류소 재설정 시도가 실수가 아닌지 확인 부탁드립니다.

3명이 시청했습니다 =) Renat이 와서 실수를 손가락으로 가리켰습니다 =)))
물론 지금 확인해 보겠습니다만 아마 이게 요점이겠죠... "bid - TrailingStop * point "를 normalize 하지 않았고, 이 구성은 order 수정에 포함됩니다...
어떻게 든 우리는 부주의합니다, 여러분;)
 
중요한 장소에서는 Normalize()를 통해 지속적으로 숫자를 일정한 정밀도로 가져옵니다.

시작이 제안한 Normalize()를 의미합니까?
 
В важных местах постоянно приводите числа к определенной точности через Normalize().

시작이 제안한 Normalize()를 의미합니까?

죄송합니다. 표준 NormalizeDouble 을 의미했습니다.