Roger :
일반적으로 초기화 섹션에서 한 번만 확인합니다.
귀하의 코드는 완전하지 않습니다. 1 또는 2(금색) 또는 기타 숫자의 기호가 있습니다.
더 나은 방법을 찾았습니다(여전히 더 많은 브로커와 테스트해야 함). 히스토리 폴더의 symbol.raw를 읽어 eurusd의 이름을 찾은 다음 MarketInfo()를 사용합니다.
/** * determine the pip multiplier (1 or 10) depending on how many * digits the EURUSD symbol has. This is done by first * finding the exact name of this symbol in the symbols.raw * file (it could be EURUSDm or EURUSDiam or any other stupid name * the broker comes up with only to break other people's code) * and then usig MarketInfo() for determining the digits. */ double pointsPerPip(){ int i; int digits; double ppp = 1 ; string symbol; int f = FileOpenHistory( "symbols.raw" , FILE_BIN | FILE_READ ); int count = FileSize (f) / 1936 ; for (i= 0 ; i<count; i++){ symbol = FileReadString (f, 12 ); if ( StringFind (symbol, "EURUSD" ) != - 1 ){ digits = MarketInfo(symbol, MODE_DIGITS); if (digits == 4 ){ ppp = 1 ; } else { ppp = 10 ; } break ; } FileSeek (f, 1924 , SEEK_CUR ); } FileClose (f); return (ppp); }
하나의 통화에만 해당하는 코드였습니다. 다중 통화에 EA를 사용하려면 각 경우에 대해 별도로 계산해야 합니다.
7bit :
더 나은 방법을 찾았습니다(여전히 더 많은 브로커와 테스트해야 함). 히스토리 폴더의 symbol.raw를 읽어 eurusd의 이름을 찾은 다음 MarketInfo()를 사용합니다.
더 나은 방법을 찾았습니다(여전히 더 많은 브로커와 테스트해야 함). 히스토리 폴더의 symbol.raw를 읽어 eurusd의 이름을 찾은 다음 MarketInfo()를 사용합니다.
이것은 그들이 symbol.raw 파일을 변경하면 중단될 것입니다(그리고 MT4의 이전 버전에서는 작동하지 않을 수 있습니다... 아마도 문제가 되지는 않겠지만).
나는 Roger와 같은 방법을 사용하며 아직 문제를 일으키지 않았습니다.
대부분의 경우에 작동합니다. 미래에 맞지 않는 다리를 찾으면 발견했을 때 그 다리를 건너십시오.
CB
대부분의 경우에 작동합니다. 미래에 맞지 않는 다리를 찾으면 발견했을 때 그 다리를 건너십시오.
CB
//++++ These are adjusted for 5 digit brokers. double pips2points, // slippage 3 pips 3=points 30=points pips2dbl; // Stoploss 15 pips 0.0015 0.00150 int Digits.pips; // DoubleToStr(dbl/pips2dbl, Digits.pips) int init() { if (Digits == 5 || Digits == 3) { // Adjust for five (5) digit brokers. pips2dbl = Point*10; pips2points = 10; Digits.pips = 1; } else { pips2dbl = Point; pips2points = 1; Digits.pips = 0; }
WHRoeder :
if ( Digits == 5 || Digits == 3 ) { // Adjust for five (5) digit brokers.당신은 내가 이미 충분하다고 생각한 것과 똑같은 것을 반복하고 있습니다. Digits 변수만 사용하는 것은 현재 실행 중인 기호와 이 기호가 가져야 하는 자릿수를 고려하지 않기 때문에 문제(첫 번째 게시물에서 문제가 정의됨)에 도움이 되지 않습니다. 5 또는 3 대 4 또는 2뿐만 아니라 일부 이국적인 쌍에는 0에서 5까지의 숫자가 있을 수 있습니다. 그렇게 간단했다면 이 스레드를 열지 않았을 것입니다. 따라서 나는 지금 어떤 쌍을 실행하든 상관없이 eurusd의 숫자를 사용하고 있습니다. eurusd의 실제 이름을 찾는 것이 가장 큰 문제였는데 지금까지는 symbol.raw 메서드가 가장 간단하고 신뢰할 수 있는 방법인 것 같습니다.
cloudbreaker :
미래에 맞지 않는 다리를 찾으면 발견했을 때 그 다리를 건너십시오.
깨지지 않는 완벽한 코드를 작성하려고 합니다. (고의적으로) 버그가 있는 코드를 작성하고 수정하기 전에 중단될 때까지 기다리는 것은 소프트웨어 개발 방식에 대한 내 철학에 맞지 않습니다.
미래에 맞지 않는 다리를 찾으면 발견했을 때 그 다리를 건너십시오.
주어진 가격과 관련하여 한 점이 무엇인지 알아낸 다음 가격의 자릿수와 비교하여 어느 자릿수인지 결정하는 것은 단순한 문제가 아닙니까?
이를 달성하는 간단한 방법은 가격을 추가하고 결과가 동일하지 않은 경우 승수 + 동일한 가격과 비교할 수 있습니다. 일치할 때까지 루프에서 승수를 증가시킵니다.
이를 달성하는 간단한 방법은 가격을 추가하고 결과가 동일하지 않은 경우 승수 + 동일한 가격과 비교할 수 있습니다. 일치할 때까지 루프에서 승수를 증가시킵니다.
정확한 숫자를 찾는 더 정교한 알고리즘이 있는 사람이 있습니까? EURUSD의 기호 이름이 얼마나 정확한지 먼저 찾고 나머지는 쉽게 찾는 문제로 귀결된다고 생각합니다. 예를 들어 "EURUSD"를 포함하거나 시작하는 이름을 검색할 수 있도록 사용 가능한 모든 기호를 열거하는 쉬운 방법이 있습니까?