포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 886

 
evillive :

왜 추가 변수가 있습니까? 직접 확인이 잘 작동합니다.

여러 번 호출하지 않도록 프로그램의 다른 지점에서 함수의 값을 확인해야 할 때 변수를 시작해야 합니다.
초보자가 더 쉽게 이해할 수 있도록 가변적입니다. 이제 이유가 명확해졌습니다.
 
Vinin :
더 자주 보세요. 질문이 적을 것입니다. 지식이 더 좋아질 것입니다.
무시하다.
 

안녕하세요. 하루가 끝날 때 어떻게든 포지션을 청산해야 합니다(순전히 전문가, 일일 바). 모델링은 개구부 또는 진드기에 의해 발생합니다. 저것들. 우리는 오프닝에 만족하거나 머리 위로 공중제비를 하며 약 15분의 시간 프레임에서 이전 날짜를 분석하고 현재 날짜의 시작과 끝을 잡으려고 노력합니다. 이 문제에 대한 해결책이 있습니까? 몇 가지 가상 가상 옵션이 표시됩니다.

1) 해커-치트(Hacker-Cheat) - 위치 와 가격에 관계없이 언제든지 청산. 정직하지 못하지만 올바른 가격으로 소급하여 포지션을 청산하는 것은 왜곡 없이 가능합니다.

2) 하나의 막대 내에서 개폐를 기반으로 모델링합니다. 저것들. 첫 번째 틱 열기, 다음 틱 닫기.

3) 특정 시간(즉, 하루가 끝날 때)에 자동으로 마감되는 주문.

도움을 주시면 감사하겠습니다. 고맙습니다.

 

벌레?

 int OnInit ()
  {
   int subwindow = ChartWindowFind ( ChartID (),WindowExpertName());
   Print ( "Подокно запрашиваемого индикатора: " ,subwindow);
   
   return ( INIT_SUCCEEDED );
  }

int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   return (rates_total);
  }


2015.04.13 20:51:10.710 인디 AUDJPY,H1: 요청된 표시기 하위 창: -1


 
tuner :

벌레?


2015.04.13 20:51:10.710 인디 AUDJPY,H1: 요청된 표시기 하위 창: -1


아니요, 버그가 아닙니다.

반환 값

성공한 경우 하위 창 번호입니다. 0은 기본 차트 창을 의미합니다. 실패 시 -1 을 반환 합니다.

 
AlexeyVik :

아니요, 버그가 아닙니다.


그리고 지표가 실행되고 있는 현재 차트의 ID와 현재 차트에서 실행 중인 현재 지표의 이름이 함수에 전달되면 실패는 무엇입니까?
 
tuner :
그리고 지표가 실행 중인 현재 차트의 ID와 현재 차트에서 실행 중인 현재 지표의 이름이 함수에 전달되면 실패는 무엇입니까?

내가 당신을 올바르게 이해하고 첨부 한 표시기 테스트 코드가 작동하는 하위 창의 번호가 필요한 경우 기능 설명을 기반으로 두 번째 변형을 적용하는 것이 좋습니다.

테스트 코드(몇 줄 추가):

 #define LINE     __LINE__ , ": "
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   int subwindow= ChartWindowFind ( ChartID (),WindowExpertName());
   Print (LINE, "Подокно запрашиваемого индикатора: " ,subwindow);
   
   int subwindow1= ChartWindowFind ();
   Print (LINE, "Подокно запрашиваемого индикатора: " ,subwindow1);

   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   return (rates_total);
  }
//+------------------------------------------------------------------+

ChartWindowFind() 함수에 대한 도움말에는 이 주제에 대한 좋은 예가 있습니다(주석 측면 포함).

 //+------------------------------------------------------------------+
//| Сообщает номер окна графика с указанным индикатором              |
//+------------------------------------------------------------------+
int GetIndicatorSubWindowNumber( long chartID= 0 , string short_name= "" )
  {
   int window=- 1 ;
//--- 
   if (( ENUM_PROGRAM_TYPE ) MQLInfoInteger ( MQL_PROGRAM_TYPE )== PROGRAM_INDICATOR )
     {
       //--- функция вызвана из индикатора,имя не требуется
      window= ChartWindowFind ();
     }
   else
     {
       //--- функция вызвана из эксперта или скрипта
      window= ChartWindowFind ( 0 ,short_name);
       if (window==- 1 ) Print ( __FUNCTION__ + "(): Error = " , GetLastError ());
     }
//---
   return (window);
  }
 
DiPach :

내가 당신을 올바르게 이해하고 첨부 한 표시기 테스트 코드가 작동하는 하위 창의 번호가 필요한 경우 기능 설명을 기반으로 두 번째 변형을 적용하는 것이 좋습니다.

테스트 코드(몇 줄 추가):

ChartWindowFind() 함수에 대한 도움말에는 이 주제에 대한 좋은 예가 있습니다(주석 측면 포함).

힌트를 주셔서 감사합니다. 하지만 약간 다른 작업이 있습니다. 그래서 함수의 두 번째 버전을 사용하는 것이 의미가 없습니다. 열려 있는 모든 터미널 차트에서 지정된 이름을 가진 표시기의 수를 계산하고 싶습니다. 문제는 이미 해결되었지만 첫 번째 옵션의 ChartWindowFind() 함수를 사용하여 결과 코드를 단순화하고 싶었지만 이 함수는 다른 창뿐만 아니라 현재 창에서도 작동하지 않는 것으로 나타났습니다. 그래서 나는 이것이 버그인지 묻습니다. 서비스 데스크에 쓰는 것이 의미가 있습니까? 아니면 내가 고려하지 않고 모든 것이 의도 한대로 작동합니까?
 

좋은 저녁이에요!

알아낼 수 없습니다. 시작 함수에서 컴파일러는 "반환"을 요구합니다. 함수는 값을 반환해야 합니다.

이 경우 어떤 값을 반환해야 합니까?:

정수 시작()
{
if (주문!=0||주문 > 0)
{
CritCloseBuy();
CritCloseSell();
}
또 다른
{
크리티컬 오픈();
}
반품;
}

이 OrderClose() 때문에 열린 위치 가 보이지 않습니까?

 
rapid_minus :

좋은 저녁이에요!

알아낼 수 없습니다. 시작 함수에서 컴파일러는 "반환"을 요구합니다. 함수는 값을 반환해야 합니다.

이 경우 어떤 값을 반환해야 합니까?:

정수 시작()

이 때문에 OrderClose()가 열린 위치를 보지 못합니까?

void start()를 수행하면 오류가 발생하지 않습니다.