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

 
질문이 생겼습니다. 열려 있는 창의 수와 식별자를 찾는 방법. 첫 번째, 현재 및 다음 창의 ID만 가져오는 것을 찾았습니다. 그리고 나는 우리가 총계를 얻을 수 없다는 것을 올바르게 이해하지만 첫 번째, 다음 및 다음 창이 없다는 것을 이해하는 방법을 이해합니다.
 
Valeriy Yastremskiy # :
질문이 생겼습니다. 열려 있는 창의 수와 식별자를 찾는 방법. 첫 번째, 현재 및 다음 창의 ID만 가져오는 것을 찾았습니다. 그리고 나는 우리가 총계를 얻을 수 없다는 것을 올바르게 이해하지만 첫 번째, 다음 및 다음 창이 없다는 것을 이해하는 방법을 이해합니다.
     long currChart= ChartFirst ();
     int i= 0 ;
     while (i< CHARTS_MAX ) {
       if ( ChartSymbol (currChart)==symbol)
         break ;
      currChart= ChartNext (currChart);
       if (currChart==- 1 ) break ;
      i++;
    }
    symb= ChartSymbol (currChart);
 
Vitaly Muzichenko # :

모든 열린 직책에 대해 창이 열려 있다는 것을 받아들이는 것은 불가능합니다. 따라서 알고리즘은 원하는 기호가 있는 창에 대한 검색을 포함해야 하며, 해당 기호가 없으면 창을 열고 상황을 그립니다. 저것들. 레벨에서 발생한 SL 수정을 찾아 레벨의 색상을 제거하거나 변경하십시오.

 
Valeriy Yastremskiy # :

모든 열린 직책에 대해 창이 열려 있다는 것을 받아들이는 것은 불가능합니다. 따라서 알고리즘은 원하는 기호가 있는 창에 대한 검색을 포함해야 하며, 해당 기호가 없으면 창을 열고 상황을 그립니다. 저것들. 레벨에서 발생한 SL 수정을 찾아 레벨의 색상을 제거하거나 변경하십시오.

플래그를 설정하고 열린 창이 있으면 그리기, 열린 창이 없으면 건너뜁니다. 분명히 열고 닫지 않았다면 열고 그리는 것은 의미가 없습니다

     long currChart= ChartFirst ();
     int i= 0 ;
    flag= false ;
     while (i< CHARTS_MAX ) {
       if ( ChartSymbol (currChart)==symbol) {
        flag= true ;
         break ;
      }
      currChart= ChartNext (currChart);
       if (currChart==- 1 ) break ;
      i++;
    }
     if (flag) {
    symb= ChartSymbol (currChart);
    ...
 
Vitaly Muzichenko # :

플래그를 설정하고 열린 창이 있으면 그리기, 열린 창이 없으면 건너뜁니다. 분명히 열고 닫지 않았다면 열고 그리는 것은 의미가 없습니다

신규 개설 여부, 기호가 열리지 않은 경우 이는 고객의 몫입니다. 저에게는 오프닝과 함께 고객의 상황에 대한 보다 완전한 설명입니다. 검색에서 찾고 있는 기호의 창 ID가 필요합니다. 다음 으로 원하는 창에 그립니다.

int FcurrChartSimbol(symbol){   
long currChart= ChartFirst ();
     int i= 0 ;
     while (i< CHARTS_MAX ) {
       if ( ChartSymbol (currChart)==symbol)
       return (currChart);
      currChart= ChartNext (currChart);i++;
       if (currChart==- 1 ) return (- 1 );
      
    }}

Zy 수정했습니다. 같은 기능입니다)))

 
Valeriy Yastremskiy # :

신규 개설 여부, 기호가 열리지 않은 경우 이는 고객의 몫입니다. 저에게는 오프닝과 함께 고객의 상황에 대한 보다 완전한 설명입니다. 검색에서 찾고 있는 기호의 창 ID가 필요합니다. 다음 으로 원하는 창에 그립니다.


Zy 수정했습니다. 같은 기능입니다)))

최적의 경우, 열린 차트로 전역적으로 볼 수 있는 배열을 채운 다음 배열로 작업하십시오.

 int FcurrChartSimbol(symbol) {   
   long currChart= ChartFirst ();
     int i= 0 ;
     while (i< CHARTS_MAX ) {
      i++;
      mass[i- 1 ]=currChart;
      currChart= ChartNext (currChart);
       if (currChart==- 1 )
         break ;
    }
   return (i); // количество графиков
}

다음으로, 예를 들어 위치 수가 변경될 때 채우기를 업데이트하는 이벤트에서 실행합니다.

 int OT=OrderTotal();
if (OT != pOT) {
 FcurrChartSimbol(symbol);
 pOT=OT;
}

이렇게하면 부하가 줄어들고 사이클을 쓸데없이 구동 할 필요가 없습니다.

 
Vitaly Muzichenko # :

최적의 경우, 열린 차트로 전역적으로 볼 수 있는 배열을 채운 다음 배열로 작업하십시오.

다음으로, 예를 들어 위치 수가 변경될 때 채우기를 업데이트하는 이벤트에서 실행합니다.

이렇게하면 부하가 줄어들고 사이클을 쓸데없이 구동 할 필요가 없습니다.

내가 뭔가를 이해하지 못했을 수도 있지만 차트의 개방성을 결정하기 위해 SYMBOL_SELECT 및 SYMBOL_VISIBLE을 사용하지 않는 이유를 이해하지 못합니다.

주문을 진행하고 확인

     if (! SymbolInfoInteger (Order_Symbol, SYMBOL_SELECT ) || ! SymbolInfoInteger (Order_Symbol, SYMBOL_VISIBLE ))
       SymbolSelect (Order_Symbol, true );
 
Alexey Viktorov # :

내가 뭔가를 이해하지 못했을 수도 있지만 차트의 개방성을 결정하기 위해 SYMBOL_SELECT 및 SYMBOL_VISIBLE을 사용하지 않는 이유를 이해하지 못합니다.

주문을 진행하고 확인

글쎄요, 이것은 다른 이야기에서 나온 것이며 열린 차트가 아니라 Market Watch 와 연결되어 있습니다. 아님?

PS 열린 위치가 있으면 어떤 경우에도 Market Watch의 기호가 표시됩니다.
 
Vitaly Muzichenko # :

글쎄요, 이것은 다른 이야기에서 나온 것이며 열린 차트가 아니라 Market Watch 와 연결되어 있습니다. 아님?

PS 열린 위치가 있으면 어떤 경우에도 Market Watch의 기호가 표시됩니다.

SYMBOL_SELECT 예, 하지만 SYMBOL_VISIBLE은 필요하지 않습니다.

그리고 예, 동의합니다. 이것이 반드시 공개 일정은 아닙니다.

 
Vitaly Muzichenko # :

최적의 경우, 열린 차트로 전역적으로 볼 수 있는 배열을 채운 다음 배열로 작업하십시오.

다음으로, 예를 들어 위치 수가 변경될 때 채우기를 업데이트하는 이벤트에서 실행합니다.

이렇게하면 부하가 줄어들고 사이클을 쓸데없이 구동 할 필요가 없습니다.

논리를 조금 이해하지 못했습니다. 위치 열기, SL 수정, 여러 기호에 대한 위치 닫기 이벤트가 모니터링됩니다. 위치 열기 - 주어진 기호가 있는 창이 열려 있는지 검색하고(창 ID를 찾고 있음) 열려 있으면 레벨을 그린 다음 SL 트롤을 모니터링합니다. 열려 있지 않은 경우 원하는 기호와 기간 및 수준을 그리는 창을 열거나 열지 마십시오. 수정 이벤트, 원하는 심볼의 창을 찾아 레벨이 이미 그려지고 레벨의 색상을 변경하거나 다음 레벨을 삭제하고 그립니다.

일반적으로 클라이언트의 영향을 배제하기 위해 작업 초기에 열린 위치가 있고 창이 열려 있지 않은 기호에서 위치와 창을 분석하고 창을 열어야 합니다.