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

 
Desead :
사람들은 이전 편집기에서 예약어 위에 마우스를 놓고 f1 키를 누르면 이 기능에 대한 설명이 있는 창이 아래에서 열리는데 지금은 없습니다. 무엇이 문제가 될 수 있습니까?
이전에는 Ctrl+F1을 눌렀습니다.
 
결과를 항상 긍정적으로 만드는 방법을 누가 알려줄까요? (로트 매수 - 매도) = -0.25이지만 항상 양수여야 합니까?
 
mikanit :
결과를 항상 긍정적으로 만드는 방법을 누가 알려줄까요? (로트 매수 - 매도) = -0.25이지만 항상 플러스가 필요합니까?
MathAbs() .
 

그래서 나는 그것을 한다: if (profitbuy+profitsell > SymbProf_magBUY_magSELL* MathAbs(( OrdersTotalMagicBuyLots (MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)())

괄호 안에는 무엇이 있습니까?

 

if (profitbuy+profitsell > SymbProf_magBUY_magSELL* MathAbs(( OrdersTotalMagicBuyLots (MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)(??????))

어디 ???? 뭐라고요?

 
감사합니다.
 

거래량 = 0.05 인 포지션을 엽니다 . 코드가 필요합니다 - 5자리에 대해 100포인트 손실에 도달할 때 위치의 양을 0.01로 줄이는 방법 ???

고맙습니다.

 

얼마나 많은 Expert Advisors를 썼는지, 어디에서나 예금으로 거래할 때 시장 상황 (스톱 레버, 스프레드 등)을 확인합니다. 나는 그들이 그리더를 작성하는 방법을 보았으므로 적어도 일부를 보내기 전에 아무도 보지 못했습니다. 한 주문의 동일한 스톱 레벨 값이 확인되었습니다. 이유는 무엇입니까?

 
alsu :

포럼에는 테스터에 대한 많은 메타리얼과 그 결과가 실제와 다른 이유가 있습니다. 기사 섹션을 보면 이 주제가 두 번 이상 언급되었습니다.

고맙습니다.
 

대안을 찾았습니다.

alsu :

이것은 문자열이 MqlStr이 아니라 정확히 char*로 DLL에 전달됨을 의미합니다. 그러나 ex4 프로그램이 문자열을 MqlString으로 저장 하지 않는다는 의미는 아닙니다. 일반적으로 ex4에서 dll로 매개변수를 전달하는 것은 (개발자에 따르면) 모든 종류의 검사 및 매개변수 변환이 수반되는 다소 복잡한 프로세스입니다.

쥰코 :

MQL4 도움말을 읽으셨습니까? MQL4 문자열은 널 종결자가 있는 동일한 c-문자열입니다.

구조는 문자열 배열을 구성하기 위한 것입니다. 문자열 배열을 더 쉽게 생성할 수 있도록 하는 Purely Metaquotes의 아이디어입니다.

shlwapi.dll 라이브러리의 StrStrA . 시험:

 #property indicator_chart_window
#import "stdlib.ex4"
string IntegerToHexString( int integer_number);//это для перевода десятичного формата в шестнадцатеричный, используем в print.
#import "StrAddress.dll"
int GetStrAddress( string szStr);//из самописной dll.
#import "shlwapi.dll"
int StrStrA( string pszFirst, string pszSrch);//из WinAPI.
#import

int addr1;//будет выходной переменной для функции из самописной dll.
int addr2;//то же самое для функции из WinAPI.

int init()
  {//тестовый прогон; в init(), это чтобы не повторялось
   string s; strAddress (s);
   s= "" ; strAddress (s);
   s=s+ "something" ; strAddress (s);
   s= "MyStr" ; strAddress (s);
   s= "mystr" ; strAddress (s);
   return ( 0 );
  }

int start()
  {
   int     counted_bars=IndicatorCounted();//оставляем блок пустым
   
   return ( 0 );
  }

void strAddress ( string myStr)//тестовая функция
  {
   addr1=GetStrAddress(myStr);//эта из dll
   addr2=StrStrA(myStr,myStr);//эта из WinAPI
   Print ( " строка " , CharToStr( 34 ), myStr, CharToStr( 34 ), " указатель 1: " , IntegerToHexString(addr1), ", указатель 2: " , IntegerToHexString(addr2));//в лог
  }

통나무:

строка "" указатель 1 : 00000000 , указатель 2 : 00000000
строка "" указатель 1 : 043 BE440, указатель 2 : 00000000
строка "something" указатель 1 : 043 C8970 указатель 2 : 043 C8970
строка "MyStr" указатель 1 : 043 BE450, указатель 2 : 043 BE450
строка "mystr" указатель 1 : 043 BE458, указатель 2 : 043 BE458

строка "" указатель 1 : 00000000 , указатель 2 : 00000000
строка "" указатель 1 : 01 C980E0, указатель 2 : 00000000
строка "something" указатель 1 : 01 CDD050, указатель 2 : 01 CDD050
строка "MyStr" указатель 1 : 01 C980F0, указатель 2 : 01 C980F0
строка "mystr" указатель 1 : 01 C980F8, указатель 2 : 01 C980F8

строка "" указатель 1 : 00000000 , указатель 2 : 00000000
строка "" указатель 1 : 01 CAFF20, указатель 2 : 00000000
строка "something" указатель 1 : 01 CA7100, указатель 2 : 01 CA7100
строка "MyStr" указатель 1 : 01 CAFF30, указатель 2 : 01 CAFF30
строка "mystr" указатель 1 : 01 CAFF38, указатель 2 : 01 CAFF38

메커니즘은 다음과 같습니다. /system32의 shlwapi.dll. StrStrA는 StringSubstr 의 WinAPI 대응입니다 . MQL4는 유형이 없는 언어이며 출력에 문자열이 아닌 int를 입력하면 문자열이 아니라 포인터를 얻습니다. StrStrA는 문자열에서 부분 문자열의 첫 번째 발생을 찾고(대소문자를 구분하지만 문자열이 동일하므로 상관하지 않음) 문자열이 동일하므로 문자열의 첫 번째 문자에 대한 포인터를 반환합니다. , 즉. 라인 자체에.

이 코드를 사용할 사람들을 위해 설명하겠습니다. WinAPI에는 문자열 형식이 없습니다. 대신 lpsz 형식(0x00으로 끝나는 문자 배열의 첫 번째 요소에 대한 포인터, 일명 /0)만 사용할 수 있습니다. 메모리 주소에 대한 포인터입니다. 그리고 32비트 메모리 셀(즉, 4바이트)이 있고 int 크기도 4바이트이므로 모든 것이 깔끔하게 맞습니다.

결론: 문자열을 int 배열로 안전하게 패킹할 수 있습니다. 따라서 구조(MQL4에는 구조 및 클래스가 없음)를 에뮬레이트하여 구조 또는 클래스가 필요한 경우 dll에 추가로 전달할 수 있습니다. 데이터 유형 변환을 위한 자체 작성 dll(예: "int(const char*)"(C 유형 변환) 또는 C++의 유사한 구성)은 이제 사용할 수 없습니다.