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

 
Artyom Trishkin :

제3자 리소스 및 개인 채널 광고. 저만 아니었으면 금지시켰을 거에요.

무슨 광고??? 질문에 대한 비디오 자습서.

 
Andrey Sokolov :

무슨 광고??? 질문에 대한 비디오 자습서.

버튼을 통한 비디오 자습서
 
내가 무엇을 잘못하고 있지?
 int OnInit ()
  {
//--- indicator buffers mapping
     SetIndexBuffer ( 0 ,Buy);
   SetIndexBuffer ( 1 ,Sell);  
   // Устанавливаем нулевые значения для индикатора, при которых не будет сигнальных стрелок
   SetIndexEmptyValue ( 0 , 0 );
   SetIndexEmptyValue ( 1 , 0 );
   //Определяем стиль отображения индикаторных линий - стрелка
   SetIndexStyle ( 0 , DRAW_ARROW );
   SetIndexStyle ( 1 , DRAW_ARROW ); 
   // Установим значки "стрелки" для буферов
   SetIndexArrow( 0 , 234 );   //Стрелка "вниз" для продаж
   SetIndexArrow( 1 , 233 );   //Стрелка "вверх" для покупок
   //Устанавливаем текст описания стрелок индикатора для отображения информации в всплывающей подсказке.
   SetIndexLabel( 0 , "Продаём" );
   SetIndexLabel( 1 , "Покупаем" );
   //Определяем разрядность значений индикаторных линий - приравниваем разрядности фин. инструмента
   IndicatorDigits ( Digits );
   //Строка с кратким названием индикатора выводится в сплывающей подсказке при наведении указателя мыши на стрелку
   IndicatorShortName ( "Мой первый индикатор" );
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
     int limit=rates_total-prev_calculated- 5 ;
   if (limit< 1 ) return ( 0 );
   for ( int i=limit;i>= 0 ;i--)
     {
       // Снимем показания индикатора
     double in1b = iCustom ( NULL , 0 , "in1" , 1 , 0 ); // индикатор 1 стрелка вверх
     double in1s = iCustom ( NULL , 0 , "in1" , 0 , 0 ); // индикатор 1 стрелка вниз
     
     double in2b = iCustom ( NULL , 0 , "in2" , 0 , 0 ); // индикатор 2 стрелка вверх
     double in2s = iCustom ( NULL , 0 , "in2" , 1 , 0 ); // индикатор 2 стрелка вниз
     
     if (in1b /* && in2b*/ )
           Buy[i]=high[i];
     if (in1s /* && in2s*/ )
            
             Sell[i]=low[i];
   
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
 
jarikn :
내가 무엇을 잘못하고 있지?
 if (in1b)

뭐라고요??? 보다 크거나, 작거나 같음... "in1b"를 무엇과 비교합니까?

 

좋은 오후에요 여러분. 리스크 금액으로 계산한 수익 외에 포인트로 고정된 수익을 어드바이저에게 추가하려고 합니다. 위험 금액의 이익이 잘 작동합니다. 그러나 점에서는 비현실적인 값 O_o를 설정합니다. 나는 그렇게 한다. 위험 금액 또는 포인트로 이익이 될 것의 양도가 있습니다.

   enum enumTP //ПЕРЕЧИСЛЕНИЕ ДЛЯ ТЕЙК ПРОФИТА
  {
   en_fiks_tp = 1 , // ФИКСИРОВАННЫЙ В ПУНКТАХ
   en_v_r = 0 ,   // В КОЛИЧЕСТВЕ Р
  };


이익의 크기를 포인트로 설정하는 변수가 있습니다.

 extern int Razmer_tp = 1500 ; // ТЕЙК ПРОФИТ В ПУНКТАХ

더 나아가 이익을 계산하고 정확성을 확인하기 위해 그런 것을 씁니다.

 //+--НАЧАЛО РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+

if (sl > 0 && Tip_tp == en_v_r) // ЕСЛИ ПРОФИТ В КОЛИЧЕСТВЕ Р
//{// НАЧАЛО ПРОВЕРКИ НА НОЛЬ
  tp=sl*tp_v_R; // ВЫЧИСЛЯЕМ ПРОФИТ УМНОЖАЯ СТОП ЛОС НА КОЛИЧЕСТВО РИСКА
   //-НАЧАЛО РАСЧЁТА ПРОФИТА В ПУНКТАХ---------------------------------------------------------------------------------------------+
  
   if (Tip_tp == en_fiks_tp)
  { //--НАЧАЛО ЕСЛИ ПРОФИТ В ПУНКТАХ---------------------------------------------------------------------------------------------+
  tp = Razmer_tp;   // ПРОФИТУ ПРИСВАЕВАЕМ КОЛИЧЕСТВО ПУНКТ
  
  } //---КОЕНЦ ЕСЛИ ПРОФИТ В ПУНКТАХ---------------------------------------------------------------------------------------------+
  tp= NormalizeDouble (tp, Digits ()); // НОРМАЛИЗУЕМ ПРОФИТ, ЧТОБЫ РАБОТАЛО НА ЛЮБЫХ КАТИРОВКАХ
  
   // ПРОВЕРКА ТЕЙК ПРОФИТА НА СТОП ЛЕВЕЛ ОТ МАКАРА--
   if (tp<stoplevel)                                                           // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
  {
         tp= NormalizeDouble (stoplevel* 1.5 , Digits ); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
  }
   //} // КОНЕЦ ПРОВЕРКИ НА НОЛЬ 
  
   //+--КОНЕЦ РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+


위험 정도의 이익을 위해서는 모든 것이 잘 작동하지만 포인트의 고정 이익은 그렇지 않습니다. 내가 뭘 잘못 쓰고 있는지, 포인트로 수익을 설정하는 올바른 작동을 위해 무엇을 수정해야 하는지 알려주세요.

 
DanilaMactep :

좋은 오후에요 여러분. 리스크 금액으로 계산한 수익 외에 포인트로 고정된 수익을 어드바이저에게 추가하려고 합니다. 위험 금액의 이익이 잘 작동합니다. 그러나 점에서는 비현실적인 값 O_o를 설정합니다. 나는 그렇게 한다. 위험 금액 또는 포인트로 이익이 될 것의 양도가 있습니다.


이익의 크기를 포인트로 설정하는 변수가 있습니다.

더 나아가 이익을 계산하고 정확성을 확인하기 위해 그런 것을 씁니다.


위험 정도의 이익을 위해서는 모든 것이 잘 작동하지만 포인트의 고정 이익은 그렇지 않습니다. 내가 뭘 잘못 쓰고 있는지, 포인트로 수익을 설정하는 올바른 작동을 위해 무엇을 수정해야 하는지 알려주세요.

" 포인트 "를 곱한 당 포인트의 이익

 
jarikn :
내가 무엇을 잘못하고 있지?

그리고 당신은 무엇을합니까?

 
MakarFX :

뭐라고요??? 보다 크거나, 작거나 같음... "in1b"를 무엇과 비교합니까?

쓰신 스크린샷 추가 버튼이 없어서 이렇게 스크린샷 을 추가하겠습니다.

조금 추가했지만 여전히 작동하지 않습니다)

 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[])
  {
//---
     int limit=rates_total-prev_calculated-
1 ;
   if (limit< 1 ) return ( 0 );
   for ( int i=limit;i>= 0 ;i--)
     {
     
       // Снимем показания индикатора
     double in1b = iCustom ( NULL , 0 , "in1" , 1 , 1 ); // индикатор 1 стрелка вверх
     double in1s = iCustom ( NULL , 0 , "in1" , 0 , 1 ); // индикатор 1 стрелка вниз
     
     double in2b = iCustom ( NULL , 0 , "in2" , 0 , 0 ); // индикатор 2 стрелка вверх
     double in2s = iCustom ( NULL , 0 , "in2" , 1 , 0 ); // индикатор 2 стрелка вниз
       Comment ( "in1b = " +in1b+ "\n" "in1s = " +in1s);
     if (in1b< 999999 && in1s> 999999 )
           Sell[i]=low[i];
     if (in1s< 999999 && in1b> 999999 )
            Buy[i]=high[i];
             
   
     }
     
//--- return value of prev_calculated for next call
   return (rates_total);
  }
파일:
 
jarikn :

쓰신 스크린샷 추가 버튼이 없어서 이렇게 스크린샷 을 추가하겠습니다.

조금 추가했지만 여전히 작동하지 않습니다)

깨끗한 차트에서 지표를 실행하고 데이터 창을 열고 스크린샷을 찍습니다.
 
일반적으로 예를 들어 2개의 지표가 있습니다. 화살표와 점이 같은 양초에 나타나면 신호가 매수이고 그 반대의 경우가 필요합니다.
파일:
in1.ex4  11 kb
in2.ex4  3 kb