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

 
Ihor Herasko :

OrderSelect()는 터미널 내부에서 실행되며 서버에 대한 요청은 없습니다. 따라서 각 틱에서 주문 목록에 액세스하는 데 아무런 문제가 없습니다. 대부분의 고문이 그렇게 합니다.

그러나 어레이에 대한 질문은 이미 프로그램의 아키텍처를 나타냅니다. 많은 주문으로 운영되는 복잡한 Expert Advisor의 경우 이것은 단순히 필요합니다. EA가 간단한 논리로 하나의 주문으로 작동하면 어레이가 중복됩니다.

주문의 배열이 있더라도 OrderSelect()를 호출하지 않고는 할 수 없다는 사실을 명확히 하는 것만으로도 가치가 있습니다. 결국, 각 틱에서 이 주문이 여전히 존재하는지 여부를 확인해야 합니다. 설정을 변경할 수도 있습니다.

고맙습니다.
 
Rustam Bikbulatov :

얘들 아, 그것을 알아내는 방법과 시작 위치를 알려주십시오!

예: 0.01이 많은 15개의 주문이 있습니다. 0.07의 거래량으로 어떤 시점에서 거래를 마감해야 합니다.

문제는 하나의 OrderClose(..)로 7개의 주문 또는 0.07랏의 볼륨을 마감하는 방법입니다.

즉시 0.07을 넣으면 거래량이 0.01인 거래가 표시되지 않습니다.

프로그래밍이 처음이라면


     int countS = 3 ;
   if (LastTime!= iTime ( NULL , 1 , 0 )){
       for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--){
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )){
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()== 321 ){ 
         if ( OrderType ()== OP_SELL ){
           irvb= OrderClose ( OrderTicket (), 0.01 , Ask , 3 ,CLR_NONE);
           LastTime= iTime ( NULL , 1 , 0 ); countS--; if (countS== 0 ) break ;   
          }}}}} 

그들은 countS의 형태로 카운터를 만드는 방법을 제안했습니다.

분당 0.01랏의 3번의 거래가 마감되어야 합니다. 이제 모든 주문이 순서대로 계산되도록 변환하는 방법에 대한 질문이 제기되었습니다.

( int i= OrdersTotal ( )- 1 ; i>= 0 ; i--){ 마지막 주문부터 순서대로 이동하면,

for(int p=0; p<OrdersTotal(); p++){이면 첫 번째 주문부터 하나의 주문까지.

카운터는 작동하지만 예를 들어 로트 크기가 0.15인 경우 0.03로트씩 닫히지 않고 1분마다 0.01씩 닫힙니다.

무엇을 추가하는 것이 좋습니까?

주문 수량 및 로트 크기에 관계없이 전체 로트 크기의 일부를 마감할 수 있는 방법은 무엇입니까?
 
Rustam Bikbulatov :


그들은 countS의 형태로 카운터를 만드는 방법을 제안했습니다.

분당 0.01랏의 세 번의 거래가 마감되어야 합니다. 이제 모든 주문이 순서대로 계산되도록 변환하는 방법에 대한 질문이 생겼습니다.

( int i= OrdersTotal ( )- 1 ; i>= 0 ; i--){ 마지막 주문부터 순서대로 이동하면,

for(int p=0; p<OrdersTotal(); p++){이면 첫 번째 주문부터 하나의 주문까지.

카운터는 작동하지만 예를 들어 로트 크기가 0.15인 경우 0.03로트씩 닫히지 않고 1분마다 0.01로 닫힙니다.

무엇을 추가하는 것이 좋습니까?

주문 수량 및 로트 크기에 관계없이 전체 로트 크기의 일부를 마감할 수 있는 방법은 무엇입니까?

그런 작업을 설정할 때(그런데 매우 이상함) "계정 기록" 목록으로 작업해야 합니다. 각각의 새로운 반복에서 이 목록을 살펴보고 현재 분 동안 마감된 주문을 찾아 거래량을 합산해야 합니다. 볼륨이 충분하지 않은 경우 필요한 방법으로 정렬하고(필요한 대로, 따라서 방법을 묻지 마십시오. 이것은 당신을 위한 질문입니다) 한 가지 주문을 받으십시오. 0.01에서 닫습니다. 다음 반복에서 다시.

 
Ihor Herasko :

그런 작업을 설정할 때(그런데 매우 이상함) "계정 기록" 목록으로 작업해야 합니다. 각각의 새로운 반복에서 이 목록을 살펴보고 현재 분 동안 마감된 주문을 찾아 거래량을 합산해야 합니다. 볼륨이 충분하지 않은 경우 필요한 방법으로 정렬하고(필요한 대로, 따라서 방법을 묻지 마십시오. 이것은 당신을 위한 질문입니다) 한 가지 주문을 받으십시오. 0.01에서 닫습니다. 다음 반복에서 다시.

나는 노력할 것이다! 고맙습니다

 
harbor :
터미널에서 메일 메시지 보내기를 구성할 수 없습니다
mail.ru를 통해 작업하는 데 사용되었지만 이제는 등록합니다. 테스트 메시지가 사라지지 않습니다.
누구든지 이것을 처리 했습니까?

자신을 위해 (판매용이 아닌 경우) 우편 문제의 올바른 처리 :

1) 전달될 localhost에 mailman을 설정하고 배달을 보장하며 인증 및 스팸 방지 보호로 현명하지 않습니다. 그렇지 않으면 고문은 모든 종류의 "블랙" 목록에 매우 빨리 들어갑니다.
어렵지 않습니다. win smtp가 내장되어 있고 설정이 간단한 무료 smtp가 있습니다. 직접 스크립팅할 수 있습니다 :-)

2) SendMail() 대신 사용하십시오. 전체 프로세스를 제어하려면 태그, 플래그, 선택적으로 html 및 사진과 함께 보다 합리적인 보고서를 보내십시오.

1 + 2를 결합하면 총 3 :-)을 얻을 수 있습니다. 즉, 매우 합리적이고 안정적인 솔루션입니다.

메일 보내기에 대한 추가 정보: https://www.mql5.com/en/blogs/post/718364

------

SendMail 및 MT 설정의 세부 사항에 대한 도움이 필요하면 스크린샷, 출처에서 발췌, 오류 진단을 첨부하십시오.
단순히 "지하 노크"가 아니도록

TradeBiff - отправка почты со скриншотами
TradeBiff - отправка почты со скриншотами
  • 2018.05.19
  • Maxim Kuznetsov
  • www.mql5.com
Очень важно получать детальные оповещения о действиях любого робота. Универсальный способ оповещений - это отправка почты. TradeBiff будет следить за изменениями и отправлять вам необходимые отчёты. Таким образом у вас в почтовом ящике получится хороший торговый журнал. Постановка задачи Ставим себя на место заказчика и формулируем задачу...
 
" TimeCurrent() "가 사용자 정의 함수에서 호출될 때 마지막 틱의 시간을 반환한다는 것을 올바르게 이해하고 있습니까?
 
Asa saas :
"TimeCurrent()"가 사용자 지정 함수에서 호출될 때 마지막 틱의 시간을 반환한다는 것을 올바르게 이해하고 있습니까?

 

인사말!


주문 번호로 OrderSelect 명령 을 사용하여 주문에 액세스할 수 있습니다.

문제는 기존 주문의 수를 미리 알고 전체를 정렬하지 않도록 할 수 있습니까? 예를 들어, 새 주문을 열 때 이 번호를 기억하십시오.

내가 알기로 이 번호는 1부터 순서대로 할당되어 있습니다. 뉘앙스는 무엇입니까?

미리 감사드립니다.

 
Decromor :

인사말!


주문 번호로 OrderSelect 명령을 사용하여 주문에 액세스할 수 있습니다.

문제는 기존 주문의 수를 미리 알고 전체를 정렬하지 않도록 할 수 있습니까? 예를 들어, 새 주문을 열 때 이 번호를 기억하십시오.

내가 알기로 이 번호는 1부터 순서대로 할당되어 있습니다. 뉘앙스는 무엇입니까?

미리 감사드립니다.

주문 보내기
주문선택

 

내 뇌가 망가졌어, 제발 도와줘!

상관 계산 블록을 작성했습니다. 그러나 OANDA와 Investment.com은 매우 다른 결과를 제공합니다! 그리고 그것은 재미있습니다. 그리고 그것들은 서로 일치하지 않습니다!

내가 어디에서 잘못 되었습니까?


현재 통화쌍은 EURUSD이고 GBPUSD와의 상관관계를 확인하고 있습니다.


외부 문자열 SubSymbol = "GBPUSD";

extern int correlation_time = 24; // 선택한 통화 쌍의 상관 관계를 확인하는 데 몇 시간

.....

// ----------------------- 상관계산 블록 ----------------------- ----------------

정수 기간 = 15;

int bar_number = MathRound(correlation_time*60/마침표);

doublesymbol_avg = 0;

이중 subsymbol_avg = 0;

이중 symbol_price[], subsymbol_price[];

이중 x,y;

정수 j;

정수 시프트 = 0;

ArrayResize (symbol_price, bar_number);

ArrayResize(하위 기호_가격, 막대_번호);

for (j=0; j < bar_number; j++)

{

symbol_price[j] = (iHigh(NULL,기간,j+shift) - iLow(NULL,period,j+shift))/2;

subsymbol_price[j] = (iHigh(SubSymbol,period,j+shift) - iLow(SubSymbol,period,j+shift))/2;

symbol_avg = symbol_avg + symbol_price[j];

subsymbol_avg = subsymbol_avg + subsymbol_price[j];

}

symbol_avg = symbol_avg/bars_number;

subsymbol_avg = subsymbol_avg/bars_number;

이중 ss_xx = 0;

이중 ss_xy = 0;

이중 ss_yy = 0;

for (j=0; j < bar_number; j++)

{

x = symbol_price[j] - symbol_avg;

y = subsymbol_price[j] - subsymbol_avg;

ss_xy = ss_xy + x*y;

ss_xx = ss_xx + x*x;

ss_yy = ss_yy + y*y;

}

이중 상관 관계 = ss_xy/MathSqrt(ss_xx*ss_yy);

경보(상관관계, " ", bar_number);

ArrayFree(symbol_price);

ArrayFree(subsymbol_price);

// ----------------------- 상관계산 블록 끝 -------------------- ----------