이 의견은 정말 많은 도움이 되며 유용하지만 소수점 이하 자릿수를 더 많이 줍니다. (더 많은 소수가 정상입니다 - 이미 그것에 대해 읽었기 때문에)
나는 여전히 ' NormalizeDouble '에 대해 걱정하고 'NormalizeDouble'보다 더 나은 다른 방법을 찾고 있습니다.
감사해요!
아마도 당신이 성취하고자 하는 바를 정확히 설정하는 것이 가장 좋을 것입니다.
함수 가 주문을 위한 유효한 로트 크기를 반환하도록 하려면 NormalizeDouble() 을 사용할 필요가 없습니다. 내 원래 코드 스니펫 또는 WHRoeder가 이를 달성할 것입니다. 그들 사이에는 개인 취향의 문제가 될 미묘한 차이가 있습니다.
그러나 해당 로트 값에 대해 직접 Print()를 수행하면 0.07000000000000001과 같은 "이상한" 결과를 얻을 수 있습니다.
이것은 OrderSend()의 경우 문제가 되지 않지만 예상한 것과 다를 수 있습니다.
숫자가 "정상적인" 방식으로 표시되도록 하려면 다음 두 가지를 선택할 수 있습니다.
1. 함수에서 NormalizeDouble()을 사용할 수 있습니다. 표준 인쇄물의 경우 값은 예상한 대로입니다. 그러나 (수동으로) 소수 자릿수를 충분히 인쇄하면 결국 그 숫자가 생각한 것과 정확히 일치하지 않는다는 것을 알게 될 것입니다. 이것이 WHRoeder가 만들고자 하는 요점입니다(제 생각에는). 이 솔루션은 가장 우아하지는 않지만 가장 간단합니다. 또는...
2. 로트 크기를 그대로 두고(즉, NormalizeDouble을 사용 하지 않음) 필요할 때 표시 목적으로 값을 조정할 수 있습니다. 필요한 것에 따라 DoubleToStr() 또는 StringFormat() 또는 printf()를 사용 하여 이를 달성할 수 있습니다. 이것은 보다 유연한 접근 방식입니다.
실제 값과 해당 값이 표시되는 방식이 동일할 필요는 없습니다. 정확히 0.07을 저장할 수 없습니다.
제 EA의 일부를 여러분과 함께 게시해야 하므로 저를 더 명확하게 이해하는 데 도움이 되기를 바랍니다. 그래서 그 좋은 코드가 무엇인지 알아야 합니다.
좋은 (명확한) 조언이나 도움을 주십시오. 미리 감사드립니다.
voidOnChartEvent ( constint id , // Event ID constlong & lparam , // Parameter of type long event constdouble & dparam , // Parameter of type double event conststring & sparam // Parameter of type string events ) {
컴파일되지 않고 테스트되지 않은 늦은 밤. _lotSize를 처음 설정한 위치를 알 수 없습니다... _lotSize가 항상 _lotStep의 배수인지 확인해야 합니다. IMHO 모든 로트 계산을 OnChartEvent()와 _lotCalc() 간에 분할하는 것보다 함께 유지하는 것이 좋습니다. 최소/최대/단계를 확인하고 증가/감소를 수행하는 하나의 기능입니다.
그것은 저에게 많은 도움이 되었습니다. 그것은 제 lotSize 및 losStep 문제를 해결했음을 의미합니다. 정말 감사합니다.
{
...
return ( NormalizeDouble (lots, 2 ));
}
이 의견은 정말 많은 도움이 되며 유용하지만 소수점 이하 자릿수를 더 많이 줍니다.
(더 많은 소수가 정상입니다 - 이미 그것에 대해 읽었기 때문에)
나는 여전히 ' NormalizeDouble '에 대해 걱정하고 'NormalizeDouble'보다 더 나은 다른 방법을 찾고 있습니다.
감사해요!
댓글을 써주신 분들께 진심으로 감사드립니다.
@whroeder1 - 귀하의 의견(/링크)을 광범위하게 조사하겠습니다. 감사합니다.
@Marco - LotSize LotStep 문제 이후에 사용하겠습니다. 감사해요!
이 의견은 정말 많은 도움이 되며 유용하지만 소수점 이하 자릿수를 더 많이 줍니다.
(더 많은 소수가 정상입니다 - 이미 그것에 대해 읽었기 때문에)
나는 여전히 ' NormalizeDouble '에 대해 걱정하고 'NormalizeDouble'보다 더 나은 다른 방법을 찾고 있습니다.
감사해요!
아마도 당신이 성취하고자 하는 바를 정확히 설정하는 것이 가장 좋을 것입니다.
함수 가 주문을 위한 유효한 로트 크기를 반환하도록 하려면 NormalizeDouble() 을 사용할 필요가 없습니다. 내 원래 코드 스니펫 또는 WHRoeder가 이를 달성할 것입니다. 그들 사이에는 개인 취향의 문제가 될 미묘한 차이가 있습니다.
그러나 해당 로트 값에 대해 직접 Print()를 수행하면 0.07000000000000001과 같은 "이상한" 결과를 얻을 수 있습니다.
이것은 OrderSend()의 경우 문제가 되지 않지만 예상한 것과 다를 수 있습니다.
숫자가 "정상적인" 방식으로 표시되도록 하려면 다음 두 가지를 선택할 수 있습니다.
1. 함수에서 NormalizeDouble()을 사용할 수 있습니다. 표준 인쇄물의 경우 값은 예상한 대로입니다. 그러나 (수동으로) 소수 자릿수를 충분히 인쇄하면 결국 그 숫자가 생각한 것과 정확히 일치하지 않는다는 것을 알게 될 것입니다. 이것이 WHRoeder가 만들고자 하는 요점입니다(제 생각에는). 이 솔루션은 가장 우아하지는 않지만 가장 간단합니다. 또는...
2. 로트 크기를 그대로 두고(즉, NormalizeDouble을 사용 하지 않음) 필요할 때 표시 목적으로 값을 조정할 수 있습니다. 필요한 것에 따라 DoubleToStr() 또는 StringFormat() 또는 printf()를 사용 하여 이를 달성할 수 있습니다. 이것은 보다 유연한 접근 방식입니다.
실제 값과 해당 값이 표시되는 방식이 동일할 필요는 없습니다. 정확히 0.07을 저장할 수 없습니다.
printf ( "%.24f" ,myVal);
결과: 0.070000000000000006661338
아마도 당신이 성취하고자 하는 바를 정확히 설정하는 것이 가장 좋을 것입니다.
...
와우~ 잘 쓰셨네요~ 댓글 처럼 거의 이해가 됩니다.
그래서 나는 곧 새로운 코멘트를 쓸 것입니다.
//--- 두 번째 편집
내가 언급했듯이 나는 LotSize가 필요하지 않으며 LotStep은 디스플레이에 바로 표시됩니다. LotSize가 필요하고 LotStep 은 모든 곳에서 동일한 것을 표시할 수 있습니다.
나는 단지 그것에 대해 걱정합니다.
동적 로타이징에 관한 것이라면 항상 간단한 기어박스를 연결할 수 있습니다.
double Lots;
Balance= AccountInfoDouble ( ACCOUNT_BALANCE );
if (Balance> 10000 )
{Lots= 10 ; Print ( " Gear Two" );}
if (Balance> 100000 )
{Lots= 100 ; Print ( " Gear Three" );}
if (Balance> 1000000 )
{Lots= 1000 ; Print ( " Gear Four" );}
if (Balance> 10000000 )
{Lots= 10000 ; Print ( " Gear Five" );}
if (Balance< 10000000 )
{Lots= 1000 ; Print ( " Gear Four" );}
if (Balance< 1000000 )
{Lots= 100 ; Print ( " Gear Three" );}
if (Balance< 100000 )
{Lots= 10 ; Print ( " Gear Two" );}
if (Balance< 10000 )
{Lots= 1 ; Print ( " Gear One" );}
if (Balance> 1000000000 )
{Lots= 0 ;}
제 EA의 일부를 여러분과 함께 게시해야 하므로 저를 더 명확하게 이해하는 데 도움이 되기를 바랍니다.
그래서 그 좋은 코드가 무엇인지 알아야 합니다.
좋은 (명확한) 조언이나 도움을 주십시오. 미리 감사드립니다.
const long & lparam , // Parameter of type long event
const double & dparam , // Parameter of type double event
const string & sparam // Parameter of type string events
)
{
_lotCalc();
//-------Process Button---------------------------------------------------------|
if ( sparam == _btnLotMinus )
{
ObjectSetInteger ( 0 , _btnLotMinus, OBJPROP_STATE , false );
_lotSize -= _lotStep;
if ( NormalizeDouble ( _lotSize, 2 ) <= 0 ) _lotSize = _lotMin;
_calcUpdade( CALC_CHANGE_LOT );
Print ( " | Lot: " , _lotSize );
return ;
} //---if Close
// ...
}
double _lotCalc()
{
//---
_lotMin = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
_lotMax = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MAX );
_lotStep = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_STEP );
//---
return ( NormalizeDouble ( _lotSize, 2 ) );
}
제 EA의 일부를 여러분과 함께 게시해야 하므로 저를 더 명확하게 이해하는 데 도움이 되기를 바랍니다.
그래서 그 좋은 코드가 무엇인지 알아야 합니다.
좋은 (명확한) 조언이나 도움을 주십시오. 미리 감사드립니다.
컴파일되지 않고 테스트되지 않은 늦은 밤.
_lotSize를 처음 설정한 위치를 알 수 없습니다... _lotSize가 항상 _lotStep의 배수인지 확인해야 합니다.
IMHO 모든 로트 계산을 OnChartEvent()와 _lotCalc() 간에 분할하는 것보다 함께 유지하는 것이 좋습니다. 최소/최대/단계를 확인하고 증가/감소를 수행하는 하나의 기능 입니다.
const long & lparam , // Parameter of type long event
const double & dparam , // Parameter of type double event
const string & sparam // Parameter of type string events
)
{
_lotCalc();
//-------Process Button---------------------------------------------------------|
if ( sparam == _btnLotMinus )
{
ObjectSetInteger ( 0 , sparam , OBJPROP_STATE , false );
_lotSize = fmax (_lotMin, _lotSize-_lotStep);
_calcUpdade( CALC_CHANGE_LOT );
printf ( " | Lot: %.2f " , _lotSize );
return ;
} //---if Close
// ...
}
void _lotCalc()
{
//---
_lotMin = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
_lotMax = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MAX );
_lotStep = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_STEP );
//---
}
컴파일되지 않고 테스트되지 않은 늦은 밤.
_lotSize를 처음 설정한 위치를 알 수 없습니다... _lotSize가 항상 _lotStep의 배수인지 확인해야 합니다.
IMHO 모든 로트 계산을 OnChartEvent()와 _lotCalc() 간에 분할하는 것보다 함께 유지하는 것이 좋습니다. 최소/최대/단계를 확인하고 증가/감소를 수행하는 하나의 기능입니다.
그것은 저에게 많은 도움이 되었습니다. 그것은 제 lotSize 및 losStep 문제를 해결했음을 의미합니다.
정말 감사합니다.
#Lot 0(영) & (해결된 Lot Size와 Lot Step 문제 사이)- 마감됨
네, lotSize 코드를 잊어버렸기 때문에 init 함수 에서 사용합니다.
_lotSize에 적합한 장소입니까?
감사해요!
{
_pip = Point ;
if ( Digits == 0 || Digits == 2 || Digits == 3 || Digits == 5 ) _pip = 10 * Point ;
_lotSize = _lotValue * MarketInfo ( Symbol (), MODE_MINLOT );
//...
}