MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1302

 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론

드미트리 쿠스투로프 , 2020.08.27 13:10

인사말.

MT4에는 다음과 같은 것이 있습니다.

 #import "user32.dll"
   int SendMessageA( int hWnd, int Msg, int wParam, char &lParam[]);
   int RegisterWindowMessageA( uchar &lParam[]);
#import

string IndiName= "TestBot" ;

void OnStart ()
  {
   char buf[];
   StringToCharArray ( "MetaTrader4_Internal_Message" , buf);
   int MT4InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray (IndiName, buf);
   long handle= ChartGetInteger ( 0 , CHART_WINDOW_HANDLE );
   Print (MT4InternalMsg);
   bool res=SendMessageA(( int )handle, MT4InternalMsg, 14 , buf);
   Print ( "Функция SendMessageA завершила работу с результатом: " ,res);
  }

이 코드는 특정 Expert Advisor를 시작하기 위해 터미널 창에 명령을 보냅니다.

MT5에도 비슷한 기능이 있나요?

다음과 같이 시도했습니다.

 #import "user32.dll"
   int SendMessageA( long hWnd, long Msg, uint wParam, uchar &lParam[]);
   int RegisterWindowMessageA( uchar &lParam[]);
#import

string IndiName= "TestBot" ;

void OnStart ()
  {
   uchar buf[];
   StringToCharArray ( "MetaTrader5_Internal_Message" , buf);
   long MT5InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray (IndiName, buf);
   long handle= ChartGetInteger ( 0 , CHART_WINDOW_HANDLE );
   Print ( "Window handle: " , handle);
   Print ( "Message: " ,MT5InternalMsg);
   for ( int i = 0 ; i< 100 ; i++){
       bool res=SendMessageA(handle, MT5InternalMsg, i , buf);
       printf ( "Функция SendMessageA завершила работу с результатом: %d, номер: %d " ,res, i);
   }
  }

초과하지 않습니다.

spy++를 검색해 보았지만 MT4와 달리 MT5에는 단어에서 메시지가 전혀 없습니다.

전문가 설정 창을 호출하기만 하면 됩니다.


WinAPI를 통해 스크립트를 실행할 수 있어야 합니다. 5개를 위한 해결책이 있습니까?

 
여기요! 얘들아, 도와줘! 기능이 생각이 안나네요. EA는 하루에 하나의 포지션(00:00에서 23:59 사이), 즉 1일 1주문을 엽니다. 작업은 --> 일련의 연속 손실을 찾아 로그에 출력하는 것입니다(Print() 명령을 통해 한 번 표시). 계열의 요소 수는 키보드에서 입력합니다(예를 들어, 키보드에서 값 5를 입력하고 계열이 4개의 무익한 날로 구성되어 있으면 무시합니다. --> 5일 이상 나타날 때까지 기다립니다. ). 수익이 나지 않는 날이 연속적으로 발생하거나 같은 날 주문이 마감되면 시리즈로 간주됩니다(하루에 한 번 열리며 이미 시장에 판매 중인 날은 하루 이상 "중단"될 수 있음). 로그는 (예를 들어) "최근 시리즈 패배: 01.05, 02.05, 03.05, 04.05, 05.05"를 표시해야 합니다. 중요한 조건: 키보드(extern)에서 입력한 값보다 크거나 같은 계열을 인식하고 그에 따라 로그에 출력합니다.
// //
제 개인적인 생각은 이렇습니다.
1. Fiya는 Losing Orders 배열을 마감 값으로 채웁니다( Mass[i] = OrderCloseTime();). 즉, 어레이는 수익성이 없는 주문을 마감한 날짜와 시간만 저장합니다.
2. 위치 i와 위치 i-1(인접한 2개)의 요소를 비교하기 시작합니다.
2.1 셀 데이터를 날짜의 숫자로 변환하여 비교합니다( TimeDayOfYear(Mass[i]) 및 TimeDayOfYear(Mass[i-1])
2.2, 이러한 비교를 통해 무익한 날이 연이어 가는지 알 수 있습니다(첫 번째 무익한 날 = 178, 이전 날 = 176이라고 가정합시다. --> 날이 연속으로 가지 않기 때문에 시리즈가 없습니다. , 각각 첫 번째 = 178이고 두 번째 177 --> 시리즈인 경우)
2.3 for 루프를 통해 배열의 모든 셀을 살펴보고 인접한 셀을 비교합니다. 이웃에 일련의 손실이 있는 경우   배열 요소   --> 1까지 운전을 시작합니다. 필요한 최소값에 도달합니다.   시리즈로 계산할 수익성 없는 일 수. 2. (항목 1이 충족되는 경우) 시리즈가 종료될 때까지.
2.4 THE SERIES TERMINATES --> 끝나는 배열 요소의 인덱스를 기억하고 시리즈의 요소 수를 기억하십시오(시리즈는 == 또는 키보드에서 입력한 값보다 클 수 있음)
3. ---여기서 구현 문제가 시작됩니다---
3.1 일련의 무익한 날 동안 어떻게든 "뒤로 물러나"는 것이 필요합니다. 각 요소의 날짜를 인식하면서 이 날짜를 datetime --> 문자열에서 번역하고,
3.11 이를 바탕으로 문자열을 채우고(모르겠습니다. 아마도 StringAdd()를 통해?) LOG 파일에 출력합니다(백만 번이 아니라 한 번만).

어드바이저 알고리즘은 역할을 하지 않으며 사용자 정의 기능 자체가 중요합니다.

그리스도를 위해, 도와주세요!
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива...
파일:
 

안녕하세요.
알고리즘 조언이 필요합니다.
주문 개시 블록을 처리하기 전에 다음 요구 사항을 발행하려고 합니다.

이미 매수/매도 주문 이 있고 마지막 주문의 시작 가격이 현재 가격보다 X포인트 낮은 경우 블록을 무시하거나 주문을 열지 마십시오.

알려주십시오 - 코드의 구현 옵션은 무엇입니까?

 

아마도 누군가가 5산을 위해 주문을 보낸 순간부터 실제로 나타날 까지 5산을 측정했을 것입니다. 얼마나 시간이 지나갈 수 있습니까?

나는 주문이 전송되고 거래가 표시되는 순간부터 거래가 통보되는 경우에 더 관심이 있습니다. 얼마나 걸릴 수 있습니까?

 
Сергей Таболин :

k = {1,2,4,8,16,.......}

cn = k[c]

멋진 솔루션))))

 
Vladimir Baskakov :
MQ는 모바일 플랫폼에 맞춤형 지표 를 추가할 계획이 있습니까?

가까운 장래가 아니라 새로운 모바일 단말기에 대한 응답으로 판단합니다. 펜만.

 
Valeriy Yastremskiy :

멋진 솔루션))))

음, 계수를 미리 알고 있다면 어떻게 계산합니까? )))

 
Сергей Таболин :

음, 계수를 미리 알고 있다면 어떻게 계산합니까? )))

계산하면 더 보편적으로 나타납니다.

 

동료 여러분, 모두 좋은 하루 되십시오. 솔루션은 직관적으로 명확합니다. 나는 당신에게서 그것을 원합니다.

후속 폐쇄를 위해 로트의 일부를 선택하는 가장 좋은 방법은 무엇입니까(일반 로트의 부분 폐쇄 - 부품 - 부품 5개 단위).

예를 들어, 로트 2.58이 이해됩니다. 결과적으로 0.51랏으로 4개 부품을 마감하고 5분의 1로 0.54로트를 5로 나눕니다.

이것을 코드로 표현하는 가장 좋은 방법은 무엇입니까? 어떤 체크메이트가 나눗셈의 나머지 부분 을 닫는 데 0.54가 걸리나요?

 
Roman Shiredchenko :

동료 여러분, 모두 좋은 하루 되십시오. 솔루션은 직관적으로 명확합니다. 나는 당신에게서 그것을 원합니다.

후속 폐쇄를 위해 로트의 일부를 선택하는 가장 좋은 방법은 무엇입니까(일반 로트의 부분 폐쇄 - 부품 - 부품 5개 단위).

예를 들어, 로트 2.58이 이해됩니다. 결과적으로 0.51랏으로 4개 부품을 마감하고 5분의 1로 0.54로트를 5로 나눕니다.

이것을 코드로 표현하는 가장 좋은 방법은 무엇입니까? 어떤 체크메이트가 나눗셈의 나머지 부분 을 닫는 데 0.54가 걸리나요?

문서를 읽는 것은 어떻습니까?