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

 
Activict :

안녕하세요. 그런 질문이 있습니다.

나는 다른 전문가와 칠면조의 코드 조각에서 큰 어려움으로 지표를 다시 만들었습니다. 코드가 크지 않고 모든 것이 내가 원하는대로 수행됩니다.

사실 자체적으로 계산을 하고 차트에 위 또는 아래 화살표를 표시합니다.

차트에 화살표가 나타나면 주문이 올바른 방향으로 열리도록 전문가를 만드는 방법을 알려주세요.

더 정확하게는 지금 어떤 화살표가 활성화되어 있는지 알아야 하고 나머지는 내가 할 수 있다고 생각합니다.

나는 그것을 더 명확하게하기 위해 코드를 줄 것입니다. 이것은 표시기의 초기화입니다.

   SetIndexBuffer(1, Vverh);

   SetIndexStyle(1,DRAW_ARROW);

   SetIndexArrow(1,233);

   

   SetIndexBuffer(2,Vniz);

   SetIndexStyle(2,DRAW_ARROW);

   SetIndexArrow(2,234); 

모두 미리 감사드립니다

내장된 iCustom 기능을 사용하여 EA에서 필요한 사용자 지정 지표 의 값을 가져옵니다.



 double iCustom ( string symbol, int timeframe, string name, ..., int mode, int shift)

예를 들어, 마지막으로 완전히 형성된 막대에 위쪽 또는 아래쪽 화살표가 있는지 확인해야 합니다.


 double Up= iCustom ( NULL , 0 , name /* название индикатора */ , /* настраиваемые параметры индикатора через запятую */ , 1 , 1 ); // стрелка вверх
double Dw= iCustom ( NULL , 0 , name /* название индикатора */ , /* настраиваемые параметры индикатора через запятую */ , 2 , 1 ); // стрелка вниз
 

답변 해주셔서 감사합니다! 예, 때때로 화살표가 사라집니다. 이렇게 하면 화살표가 사라지면 사용자 지정이 "0"으로 읽히나요?

그리고 화살표는 떠오르는 막대에만 그려지며 이전 막대를 다시 그리지 않습니다. 나타나는 순간에는 거래를 시작해야하며 따라서 화살표가 사라지면 닫습니다

 
프로그램 코드를 사용하여 어드바이저가 평소보다 더 자주 서버에 요청을 보내도록 강제할 수 있습니까? 하나의 요청 대신 두 개의 요청이 있거나 이를 위해 단순히 셸을 반복할 수 있습니다 ... 하나가 아닌 세 개의 요청이면 두 번 반복합니다 ... ?
 
Activict :

예, 화살표가 때때로 사라집니다. 화살표가 사라지면 사용자 정의를 통해 "0"으로 읽습니까?

네, 그럴 것입니다.

활동가 :

그리고 화살표는 떠오르는 막대에만 그려지며 이전 막대를 다시 그리지 않습니다. 나타나는 순간에는 거래를 시작해야하며 따라서 화살표가 사라지면 닫습니다

따라서 완전히 형성된 막대 중 하나에 화살표가 있으면 사라지지 않습니다. 현재 막대에서 화살표가 여러 번 나타났다가 사라질 수 있습니다.
 
활동가 :

спасибо за ответ! Да стрелки иногда пропадают. Этот способ через кастом будет считывать "0" если стрелка пропадет?

iCustom을 통해 표시기 코드에 "비어 있음"으로 지정된 값이 고려됩니다. 일반적으로 0 또는 EMPTY_VALUE일 수 있습니다.

EMPTY_VALUE는 기본적으로 표시기에서 허용되지만 SetIndexEmptyValue 가 init()에서 작성되면 다릅니다.

 
yellownight :
프로그램 코드를 사용하여 어드바이저가 평소보다 더 자주 서버에 요청을 보내도록 강제할 수 있습니까? 하나의 요청 대신 두 개의 요청이 있거나 이를 위해 단순히 셸을 반복할 수 있습니다 ... 하나가 아닌 세 개의 요청이면 두 번 반복합니다 ... ?
그것은 당신에게 아무것도 제공하지 않습니다. 요청으로 서버를 폭격하면 계정 연결이 완전히 끊어질 수 있습니다. 나는 이것이 "요청에 지나치게 열심"하고 너무 많이 "폭발"하는 사람들에게 발생한다는 것을 알고 있습니다.
 

간단한 지표를 작성했습니다. 코드는 다음과 같습니다.

 //+------------------------------------------------------------------+
//|                                            AngleByLineFromMA.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

extern string  h1 = "основные параметры машки" ;
extern int     maTF = 0 ;
extern int     maPeriod = 50 ;
extern int     maShiftByPrice = 0 ;
extern int     maMethod = 0 ;
extern int     maPrice = 0 ;
extern int     shiftBarsBack1 = 2 ;                       // Первое значение shift
extern int     shiftBarsBack2 = 7 ;                       // Второе значение shift
extern string  h2 = "===============================" ;

string         h3 = "Другие переменные" ;
double         pointOfMaFirst,                           // Первая тока (начало отрисовки отрезка)
               pointOfMaLast,                            // Вторая тока отрезка (конец отрисовки отрезка)
               varsAngle[ 1000 ];                              // Буфер для хранения значение возвращаемых машкой

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//#property indicator_minimum -45
//#property indicator_maximum 45
//+------------------------------------------------------------------+
//|               Функция инициализации индикатора                   |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorDigits(MarketInfo( Symbol (),MODE_DIGITS));
   SetIndexBuffer ( 0 ,varsAngle);                          // Связываем массив значений угла с буфером
   SetIndexStyle( 0 , DRAW_HISTOGRAM , STYLE_SOLID , 2 ); 
   
// -------------- блок инициализации закончен ----------------------
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|              Функция деинициализации индикатора                  |
//+------------------------------------------------------------------+
int deinit()
  {
    ObjectsDeleteAll ();                                  // Очистим график от всего
    
// -------------- блок инициализации закончен ----------------------
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                  Функция итерации эксперта                       |
//+------------------------------------------------------------------+
int start()
  {
    int i, countedBars = IndicatorCounted();
    int limit = Bars - countedBars;
    if (limit > 400 ) limit = 400 ;
        
    for (i = limit;i > 1 ;i--)
    {
      pointOfMaFirst = iMA ( Symbol (),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack1+i);   // Начальная точка прямой
      pointOfMaLast = iMA ( Symbol (),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack2+i);     // Крайняя точка прямой
    
      varsAngle[i] = pointOfMaFirst - pointOfMaLast;
      Print ( "varsAngle[i] = " , varsAngle[i]);
    }

    return ( 0 );
  }
버퍼가 하나만 있습니다. double 유형의 표시기 값.

Expert Advisor에서 지표의 값을 가져와 거래에 필터로 적용하기로 결정했습니다.

여기에 마지막으로 형성된 막대에 지정된 표시기 버퍼의 기능에 대한 간단한 호출을 작성했습니다.

 //+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   double slope = iCustom ( NULL , i_TF, "AngleByLineFromMA simplest" , 0 , 1 );
   Print ( "slope = " , slope);
   
   return (slope);
}
테스터에서 기울기 값이 잘못 반환됩니다.
 2013.02 . 26 16 : 57 : 26     2009.10 . 26 00 : 23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02 . 26 16 : 57 : 26     2009.10 . 26 00 : 23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02 . 26 16 : 57 : 26     2009.10 . 26 00 : 23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02 . 26 16 : 57 : 26     2009.10 . 26 00 : 23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02 . 26 16 : 57 : 26     2009.10 . 26 00 : 23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02 . 26 16 : 57 : 26     2009.10 . 26 00 : 23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647

왜 그런 겁니까? 유형이 올바르게 지정되었습니다. 호출도 올바른 것 같습니다. 표시기가 제대로 작동하고 있습니다. 다음은 테스터의 로그 로그와 현재 시장의 실제 시장에서 가져온 것입니다.

 2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001

일부 숫자 2147483647 이 필수 숫자 대신 항상 반환되는 이유는 무엇입니까?

 
hoz :

간단한 지표를 작성했습니다. 코드는 다음과 같습니다.

버퍼가 하나만 있습니다. double 유형의 표시기 값.

Expert Advisor에서 지표의 값을 가져와 거래에 필터로 적용하기로 결정했습니다.

여기에 마지막으로 형성된 막대에 지정된 표시기 버퍼의 기능에 대한 간단한 호출을 작성했습니다.

테스터에서 기울기 값이 잘못 반환됩니다.

왜 그런 겁니까? 유형이 올바르게 지정되었습니다. 호출도 올바른 것 같습니다. 표시기가 제대로 작동하고 있습니다. 다음은 테스터의 로그 로그와 현재 시장의 실제 시장에서 가져온 것입니다.

일부 숫자 2147483647 이 필수 숫자 대신 항상 반환되는 이유는 무엇입니까?

테스터에서 작업 시작 시 표시기의 올바른 계산을 위한 기록에 막대가 충분하지 않습니다.

 //+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   if (iBars( NULL , i_TF)<maPeriod) { Print ( "Недостаточно баров в истории для корректного расчёта значений индикатора!" ); return (- 1.0 ); }
   double slope = iCustom ( NULL , i_TF, "AngleByLineFromMA simplest" , 0 , 1 );
   Print ( "slope = " , slope);
   
   return (slope);
}
 
//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   if (iBars( NULL , i_TF) < maPeriod)
   {
      Print ( "Недостаточно баров в истории для корректного расчёта значений индикатора!" );
      return ( 0 );
   }
   double slope = iCustom ( NULL , i_TF, "AngleByLineFromMA simplest" , 0 , 1 );
   Print ( "slope = " , slope);
   Print ( "iBars(NULL, i_TF) = " , iBars( NULL , i_TF));
   
   return (slope);
}

2007년부터 dukascopy로 히스토리를 올렸는데... 바가 부족해서가 아닐 수 없습니다. MA 기간은 50입니다.

여기에 선을 삽입하고 return(0) ..를 수정 하고 차트에 막대 수 표시를 추가했습니다.

다음은 로그에 있습니다.

 2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647


 
hoz :

2007년부터 dukascopy로 히스토리를 올렸는데... 바가 부족해서가 아닐 수 없습니다. MA 기간은 50입니다.

여기에 귀하의 라인을 삽입하고 현재 return(0) 을 수정했습니다.

다음은 로그에 있습니다.


지표에 문제가 있는 것 같습니다.

 if (limit > 400 ) limit = 400 ;