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

 
Сергей Таболин :

오랜 세월 동안 모든 클래스의 신성한 의미를 이해하지 못하는 아마추어인 나, 그리고 일반적으로 우리(무역) 비즈니스에서 특히 OOP가 필요한 이유는 클래스가 모두 작성된 코드(MQ와 gurus) - "비전문가 코드 작성자"를 위해 "생활을 더 쉽게"하도록 설계된 라이브러리.

문제는 내가 전에 말했듯이 이 모든 "lightening"을 사용하면 코드 작성이 더 쉬워지지 않는다는 것입니다. 전송된 모든 주문을 항상 다시 확인해야 하기 때문입니다! 거의 모든 사람들이 내가 거기에서 일부 "트랜잭션"도 확인해야 한다고 주장하기 때문입니다. 더욱이, 이러한 "..shares"는 순서가 맞지 않습니다.

나는 이 곳에 이런 각도로 못을 박으라고 명령한다. 모든 것. 더 나아가 나는 대답을 받았습니다 - 못이 두들겨졌습니다. 그리고 그들은 나에게 다음과 같이 경고합니다.

  • 손톱이 올바른 크기가 아닐 수도 있습니다. 확인해야 합니다.
  • 어쩌면 올바른 각도가 아닐 수도 있습니다   - 확인이 필요합니다.
  • 아마도 잘못된 위치에있을 것입니다   - 확인이 필요합니다.

그렇다면 왜 그런 연주자(수업)가 필요한가요???

조금 과장할 수 있지만 이것의 본질은 변하지 않습니다.

그리고 왜? 클래스에서 처리되는 모든 데이터는 이 클래스가 대체를 의심하지 않는 방식으로 변경될 수 있기 때문입니다.


분명한.

그건 그렇고, 나는 OOP가 프로그래밍을 더 쉽게 만들지 않는다는 데 동의합니다.

OOP를 사용하면 큰 프로젝트 를 더 쉽게 유지 관리할 수 있지만 일반적으로 작은 프로젝트를 만드는 것이 복잡해집니다.

OOP는 초보자에게 더 어렵습니다.

외국 클래스를 사용하는 것은 어느 정도 블랙 박스를 사용하는 것입니다.

 
안녕하세요. 내가 어디에서 실수했는지 알려주십시오. 왜 표시기에 화살표가 표시되지 않습니까?
 #property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link        " https://www.mql5.com "
#property version    "1.00"
#property strict
#property indicator_chart_window


double       Buy[];             // Буфер для покупок
double       Sell[];           // Буфер для продаж


input int tenkan_sen1 = 9 ;
input int kijun_sen1  = 26 ;
input int senkou_span_b1 = 52 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
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- 1 ;
   if (limit< 1 ) return ( 0 );
   for ( int i=limit;i>= 0 ;i--)
     {
       // Снимем показания индикатора
       double tenkan_sen = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_TENKANSEN,i);
       double kijun_sen = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_KIJUNSEN,i);
       double senkou_span_b = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANA,i);
       double senkou_span_a = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANB,i);
       double chikou_span = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_CHIKOUSPAN,i);
            
       if (tenkan_sen>kijun_sen)
         Buy[i]=high[i];
         
     if (tenkan_sen<kijun_sen)
         Sell[i]=low[i];
     }
   /*input int tenkan_sen = 9;
input int kijun_sen  = 26;
input int senkou_span_b = 52;*/
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
jarikn :
안녕하세요. 내가 어디에서 실수했는지 알려주십시오. 왜 표시기에 화살표가 표시되지 않습니까?
 #property indicator_buffers 2
 
MakarFX :

누락된 라인을 입력했지만 여전히 화살표가 없습니다!

 
jarikn :

누락된 라인을 입력했지만 여전히 화살표가 없습니다!

보여주다

 
MakarFX :

보여주다

 //+------------------------------------------------------------------+
//|                                                     ishimocu.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link        " https://www.mql5.com "
#property version    "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2

//--- input parameters
double       Buy[];             // Буфер для покупок
double       Sell[];           // Буфер для продаж


input int tenkan_sen1 = 9 ;
input int kijun_sen1  = 26 ;
input int senkou_span_b1 = 52 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
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- 1 ;
   if (limit< 1 ) return ( 0 );
   for ( int i=limit;i>= 0 ;i--)
     {
       // Снимем показания индикатора
       double tenkan_sen = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_TENKANSEN,i);
       double kijun_sen = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_KIJUNSEN,i);
       double senkou_span_b = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANA,i);
       double senkou_span_a = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_SENKOUSPANB,i);
       double chikou_span = iIchimoku ( NULL , 0 ,tenkan_sen1,kijun_sen1,senkou_span_b1,MODE_CHIKOUSPAN,i);
            
       if (tenkan_sen>kijun_sen)
         Buy[i]=high[i];
         
     if (tenkan_sen<kijun_sen)
         Sell[i]=low[i];
     }
   /*input int tenkan_sen = 9;
input int kijun_sen  = 26;
input int senkou_span_b = 52;*/
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
jarikn :

그리고있다...


 
MakarFX :

그리고있다...


빌어 먹을. Ichimoku가 출시되지 않았습니다.)))) 대단히 감사합니다.

 
Alexey Viktorov :

글쎄요 ... 최소한의 글쓰기와 최대의 두통 ...

정확히 무엇? 내가 뭔가 잘못하고 있는 건 아닐까?

 
Andrey Sokolov :

정확히 무엇? 내가 뭔가 잘못하고 있는 건 아닐까?

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

학생을 위한 OOP.

알렉세이 빅토 로프 , 2019.10.04 16:01

제 생각에 mql에는 OOP를 사용하여 해결해야 하는 매우 좁은 작업 세트가 있습니다. 내가 보기에 언어 자체는 C ++의 OOP 또는 다른 것에 지나지 않습니다. 그리고 이 OOP는 OOP를 표준 라이브러리로 제공합니다. 그리고 OOP의 이 OOP에 대해 망칠 것을 제안합니다. 그렇지 않으면 다른 OOP라고 말하지 않을 것입니다. 그리고 한 걸음 더 ... The Sorcerer는 비록 사악하지만 자비로운 내 일을 위해 OOP는 개 차례와 같다고 올바르게 말했습니다. 그리고 이 작업이 절차적 방식으로 문제 없이 해결될 수 있다면 작업을 설정하고 OOP를 통해 구현하는 것이 무슨 소용이겠습니까?

예를 들어, fxsaber에서 .mqh를 사용하여 MT5 및 MT4용 코드를 작성합니다. 누군가는 그것을 필요로 할 수도 있지만 누가 봐... mql5를 마스터하기를 원하지 않거나 완전히 마스터할 수 없는 사람들을 위해. 또는 Nikolay의 iCanvas를 가져오십시오 ..., 나는 그의 성을 잊어 버렸습니다. 이해합니다. 유용한 라이브러리인 것 같지만 알아내기가 쉽지 않고, 설명서도 없고 최소한의 설명도 없습니다. 이것은 불만이 아닙니다. 죄송합니다. Nikolai, 이것은 사실입니다. 그래서 그래픽 레이블을 작성하려고 했을 때 표준 라이브러리나 Nikolai의 라이브러리를 참조하지 않고 작성하는 것이 더 쉬웠습니다.

그러면 전체 스레드를 읽을 수 있습니다.