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

 
Aleksey Vyazmikin :

함수에서 오류를 찾으십시오. 위쪽 화살표의 조건을 반환하지 않습니다.


Aleksey Vyazmikin 에게 감사드립니다. 하지만 여기에 문제가 더 심각합니다. 패턴을 찾을 때 로봇은 하나의 좌표를 따라 수많은 화살표를 설정합니다. 동시에 터미널이 중단됩니다. 그러한 문제를 해결하는 방법. 터미널에서 내 Expert Advisor를 실행해 보셨습니까?

 
voron_026 :

Aleksey Vyazmikin 에게 감사드립니다. 하지만 여기에 문제가 더 심각합니다. 패턴을 찾을 때 로봇은 하나의 좌표를 따라 수많은 화살표를 설정합니다. 동시에 터미널이 중단됩니다. 그러한 문제를 해결하는 방법. 터미널에서 내 Expert Advisor를 실행해 보셨습니까?


문제는 함수의 첫 번째입니다. 코드를 추가한 것이 아닙니다. 기능 일치가 있습니다. 여기에 화살표와 무승부가 있습니다. Expert Advisor가 시각화 도우미에서 시작되었습니다.

그리고 고문이 각 눈금 에 화살표를 만들지 않도록 새 양초를 확인하십시오.

 
voron_026 :

Aleksey Vyazmikin 에게 감사드립니다. 하지만 여기에 문제가 더 심각합니다. 패턴을 찾을 때 로봇은 하나의 좌표를 따라 수많은 화살표를 설정합니다. 동시에 터미널이 중단됩니다. 그러한 문제를 해결하는 방법. 터미널에서 내 Expert Advisor를 실행해 보셨습니까?

최대한 많은 분들이 도움을 드리기 위해서는 파일이 아닌 코드를 올려주셔야 합니다. 모든 사람이 파일을 다운로드하고 싶어하는 것은 아니므로 파일을 연 다음 삭제해야 합니다. 모든 것이 어쩐지 황량합니다.

 

즉, 새 양초 가 나타나면 ObjectCreate 기능을 꺼야 합니다. 제대로 이해하고 있습니까?

 
Vitaly Muzichenko :

최대한 많은 분들이 도움을 드리기 위해서는 파일이 아닌 코드를 올려주셔야 합니다. 모든 사람이 파일을 다운로드하고 싶어하는 것은 아니므로 파일을 연 다음 삭제해야 합니다. 모든 것이 어쩐지 황량합니다.

코드를 게시했습니다.
 #property copyright "Copyright 2017,UriyGlushko"
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

extern string Rodot           = "Параметры робота" ;
extern double Lots            = 0.2 ;
extern int     StopLoss        = 20 ;
extern int     TakeProfit      = 80 ;
extern int     Magic           = 999999 ;
extern int     Slippage        = 3 ; // Проскальзывание

extern bool UseDojiCandles = true ; // Использование патерна Доджи
extern int TimeFrame = PERIOD_H4 ;
int DojiCandle = 0 ;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
   if ( Digits == 3 || Digits == 5 )
  {
   TakeProfit *= 10 ;
   StopLoss   *= 10 ;
   Slippage   *= 10 ;
  }
 return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
  
   
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
   if (UseDojiCandles = true && Doji() == 1 )
     {
       if (! ObjectCreate ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJ_ARROW_UP , 0 , TimeCurrent (), Low [ 1 ]- 300 * _Point ))
         {
         Print ( "Не удалось создать метку вверх" );
         }
         
     }
   DojiCandle ++;

   
   if (UseDojiCandles = true && Doji() == - 1 )
     {
       if (! ObjectCreate ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJ_ARROW_DOWN , 0 , TimeCurrent (), High [ 1 ]+ 300 * _Point ))
         {
         Print ( "Не удалось создать метку вниз" );
         }
         
     }
   DojiCandle ++;
 

   
}
//+------------------------------------------------------------------+
//    Поиск всех объектов
//+------------------------------------------------------------------+


 




//+------------------------------------------------------------------+
//    Функция паттерна Доджи
//+------------------------------------------------------------------+
int Doji()
{
//Параметры Дожи
   double Open1 = iOpen ( Symbol (), PERIOD_H4 , 1 );
   double Close1 = iClose ( Symbol (), PERIOD_H4 , 1 );
   double High1 = iHigh ( Symbol (), PERIOD_H4 , 1 );
   double Low1 = iLow ( Symbol (), PERIOD_H4 , 1 );
   
//Параметры предыдущей свечи
   double Open2 = iOpen ( Symbol (), PERIOD_H4 , 2 );
   double Close2 = iClose ( Symbol (), PERIOD_H4 , 2 );
   double High2 = iHigh ( Symbol (), PERIOD_H4 , 2 );
   double Low2 = iLow ( Symbol (), PERIOD_H4 , 2 );
   
//Параметры индикатора волотильности ATR для нахожденя относительно большой свечи перед Доджи
   double ATR = iATR ( Symbol (), PERIOD_H4 , 14 , 1 );
   
   
//Математическое описание патерна Дожи
   if (Close1 < High1 - 0.3 *(High1-Low1) && 
      Open1 < High1 - 0.3 *(High1-Low1) && 
      Close1 > Low1 - 0.7 *(High1-Low1) && 
      Open1 > Low1 - 0.7 *(High1-Low1) && 
       MathAbs ((Close1-Open1) < 0.2 *(High1-Low1))&&
       MathAbs ((Close2-Open2) > 0.7 *ATR))
      {
         if ((Close2 - Open2) > 0 )
         { 
         Print ( "Down" ); return (- 1 ); // Условие для продаж
         }
         if ((Close2 - Open2) < 0 )
         {
         Print ( "Up" ); return ( 1 ); // Условие для покупок
         }
      }
       return ( 0 );
}
 
voron_026 :
코드를 게시했습니다.

다음과 같이 시도하십시오.

 if (! ObjectCreate ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJ_ARROW_UP , 0 , Time [ 0 ] , Low [ 1 ]- 300 * _Point ))
 

안녕하세요 여러분) 저는 vps 서버 계정에 있습니다. 내 계정이 속한 서버 주소를 썼는데 아무 것도 발견되지 않았다고 나옵니다. 어떻게해야합니까, 도와주세요, 감사합니다

 
Vitaly Muzichenko :

다음과 같이 시도하십시오.


작동하지 않았습니다. EA는 7679개의 개체를 그렸고 흥미롭게도 홀수 번호로

그리고 Doji 기능을 사용하면 오류가 무엇인지 이해하지 못합니다. 위쪽 화살표가 그려지지 않는 이유는 무엇입니까?

 
voron_026 :

작동하지 않았습니다. EA는 7679개의 개체를 그렸고 흥미롭게도 홀수 번호로

그리고 Doji 기능을 사용하면 오류가 무엇인지 이해하지 못합니다. 위쪽 화살표가 그려지지 않는 이유는 무엇입니까?

패턴을 찾는 데 문제가 있습니다. 코드베이스에서 올바른 코드를 찾으십시오. 많은 것이 있으며 문제는 저절로 해결됩니다.

MQL5 Code Base
MQL5 Code Base
  • www.mql5.com
Библиотека исходных кодов на языке MQL5 для MetaTrader 5
 
Vitaly Muzichenko :

패턴을 찾는 데 문제가 있습니다. 코드베이스에서 올바른 코드를 찾으십시오. 많은 것이 있으며 문제는 저절로 해결됩니다.


많은 수의 개체를 렌더링하는 문제를 해결했습니다. 새 막대에 수표를 설치했습니다. 결과는 다음 코드입니다.

 //+------------------------------------------------------------------+
//|                                                          111.mq4 |
//|                                       Copyright 2017,UriyGlushko |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017,UriyGlushko"
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

extern string Rodot           = "Параметры робота" ;
extern double Lots            = 0.2 ;
extern int     StopLoss        = 20 ;
extern int     TakeProfit      = 80 ;
extern int     Magic           = 999999 ;
extern int     Slippage        = 3 ; // Проскальзывание

extern bool UseDojiCandles = true ; // Использование патерна Доджи
extern int TimeFrame = PERIOD_H4 ;
int DojiCandle = 0 ;
bool New_Bar = false ;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
   if ( Digits == 3 || Digits == 5 )
  {
   TakeProfit *= 10 ;
   StopLoss   *= 10 ;
   Slippage   *= 10 ;
  }
 return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
  
   
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
Fun_New_Bar();

   if (UseDojiCandles = true && Doji() == 1 && New_Bar == true )
     {
       if (! ObjectCreate ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJ_ARROW_UP , 0 , Time [ 0 ], Low [ 1 ]- 300 * _Point ))
         {
         Print ( "Не удалось создать метку вверх" );
         }
         
     }
   DojiCandle ++;

   
   if (UseDojiCandles = true && Doji() == - 1 && New_Bar == true )
     {
       if (! ObjectCreate ( ChartID (), "Doji_" + IntegerToString (DojiCandle), OBJ_ARROW_DOWN , 0 , Time [ 0 ], High [ 1 ]+ 300 * _Point ))
         {
         Print ( "Не удалось создать метку вниз" );
         }
         
     }
   DojiCandle ++;
 

   
}
//+------------------------------------------------------------------+
//    Поиск всех объектов
//+------------------------------------------------------------------+


 




//+------------------------------------------------------------------+
//    Функция паттерна Доджи
//+------------------------------------------------------------------+
int Doji()
{
//Параметры Дожи
   double Open1 = iOpen ( Symbol (), PERIOD_H4 , 1 );
   double Close1 = iClose ( Symbol (), PERIOD_H4 , 1 );
   double High1 = iHigh ( Symbol (), PERIOD_H4 , 1 );
   double Low1 = iLow ( Symbol (), PERIOD_H4 , 1 );
   
//Параметры предыдущей свечи
   double Open2 = iOpen ( Symbol (), PERIOD_H4 , 2 );
   double Close2 = iClose ( Symbol (), PERIOD_H4 , 2 );
   double High2 = iHigh ( Symbol (), PERIOD_H4 , 2 );
   double Low2 = iLow ( Symbol (), PERIOD_H4 , 2 );
   
//Параметры индикатора волотильности ATR для нахожденя относительно большой свечи перед Доджи
   double ATR = iATR ( Symbol (), PERIOD_H4 , 14 , 1 );
   
   
//Математическое описание патерна Дожи
   if (Close1 < High1 - 0.3 *(High1-Low1) && 
      Open1 < High1 - 0.3 *(High1-Low1) && 
      Close1 > Low1 - 0.7 *(High1-Low1) && 
      Open1 > Low1 - 0.7 *(High1-Low1) && 
       MathAbs ((Close1-Open1) < 0.2 *(High1-Low1))&&
       MathAbs ((Close2-Open2) > 0.7 *ATR))
      {
         if ((Close2 - Open2) > 0 )
         { 
         Print ( "Down" ); return (- 1 ); // Условие для продаж
         }
         if ((Close2 - Open2) < 0 )
         {
         Print ( "Up" ); return ( 1 ); // Условие для покупок
         }
      }
       return ( 0 );
}
//+------------------------------------------------------------------+
//    Функция определения нового бара
//+------------------------------------------------------------------+
void Fun_New_Bar()                               // Ф-ия обнаружения .. 
  {                                             // .. нового бара 
   static datetime New_Time= 0 ;                   // Время текущего бара 
   New_Bar= false ;                               // Нового бара нет 
   if (New_Time!= Time [ 0 ])                         // Сравниваем время 
     { 
      New_Time= Time [ 0 ];                         // Теперь время такое 
      New_Bar= true ;                             // Поймался новый бар 
     } 
  }  

유일한 것은 개체의 속성 에서 화살표의 서수가 1 2 3 ... 등이 아니라 1 850427 1083295 ..... 내가 이해하는대로 카운터가 올바르게 작동하지 않는다는 것입니다.

문제는 H4에서 정확히 새 막대를 확인하는 방법입니다. 즉, 로봇이 H4에서 패턴을 찾아야 하며 차트는 모든 TF가 될 수 있습니까?