MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 312

 
Aleksey Vyazmikin :

İşlevde bir hata olup olmadığına bakın - yukarı oktaki koşulu döndürmez.


Teşekkürler Aleksey Vyazmikin , ama burada sorun daha ciddi. Bir desen bulurken, robot bir koordinat boyunca çok sayıda ok ayarlar. Aynı zamanda, terminal kilitleniyor. Böyle bir problem nasıl çözülür. Uzman Danışmanımı terminalinizde çalıştırmayı denediniz mi?

 
voron_026 :

Teşekkürler Aleksey Vyazmikin , ama burada sorun daha ciddi. Bir desen bulurken, robot bir koordinat boyunca çok sayıda ok ayarlar. Aynı zamanda, terminal kilitleniyor. Böyle bir problem nasıl çözülür. Uzman Danışmanımı terminalinizde çalıştırmayı denediniz mi?


Sorun ilk önce işlevde - sadece kodu eklemedim. Bir fonksiyon eşleşmesi var, işte oklar ve çekilişler. Uzman Danışman, görselleştiricide başlatıldı.

Ve böylece danışman her kene üzerinde ok oluşturmaz - yeni bir mum olup olmadığını kontrol edin.

 
voron_026 :

Teşekkürler Aleksey Vyazmikin , ama burada sorun daha ciddi. Bir desen bulurken, robot bir koordinat boyunca çok sayıda ok ayarlar. Aynı zamanda, terminal kilitleniyor. Böyle bir problem nasıl çözülür. Uzman Danışmanımı terminalinizde çalıştırmayı denediniz mi?

Mümkün olduğunca çok kişinin size yardımcı olması için bir dosya değil, bir kod yüklemeniz gerekir. Herkes dosyayı indirmek istemiyor, sonra açmanız ve ardından silmeniz gerekiyor, her şey bir şekilde çok kasvetli.

 

Yani yeni bir mum göründüğünde ObjectCreate işlevini kapatmanız gerekiyor, doğru mu anladım?

 
Vitaly Muzichenko :

Mümkün olduğunca çok kişinin size yardımcı olması için bir dosya değil, bir kod yüklemeniz gerekir. Herkes dosyayı indirmek istemiyor, sonra açmanız ve ardından silmeniz gerekiyor, her şey bir şekilde çok kasvetli.

Anladım, kodu gönderiyorum.
 #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 :
Anladım, kodu gönderiyorum.

Şu şekilde deneyin:

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

herkese merhaba) vps sunucu hesabındayım hesabımın ait olduğu sunucumun adresini yazdım ve sonra hiçbir şey bulunamadı diyor ne yapmalıyım lütfen yardım edin teşekkürler

 
Vitaly Muzichenko :

Şu şekilde deneyin:


İşe yaramadı. EA 7679 nesne çizdi ve ilginç bir şekilde tek numaralandırmayla

Ve Doji işleviyle, hatanın ne olduğunu anlamıyorum. Yukarı oklar neden çizilmiyor?

 
voron_026 :

İşe yaramadı. EA 7679 nesne çizdi ve ilginç bir şekilde tek numaralandırmayla

Ve Doji işleviyle, hatanın ne olduğunu anlamıyorum. Yukarı oklar neden çizilmiyor?

Bir kalıp bulmakta sorun yaşıyorsunuz, kod tabanında doğru kodu bulmaya çalışın, birçoğu var ve sorun kendi kendine çözülecek

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

Bir kalıp bulmakta sorun yaşıyorsunuz, kod tabanında doğru kodu bulmaya çalışın, birçoğu var ve sorun kendi kendine çözülecek


Çok sayıda nesne oluşturma sorunu çözüldü. Yeni çubuğa bir kontrol yükledim. Sonuç bu koddur:

 //+------------------------------------------------------------------+
//|                                                          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 ;                             // Поймался новый бар 
     } 
  }  

Tek şey, nesnenin özelliklerinde okun sıra sayısının 1 2 3 ... vb. değil, 1 850427 1083295 ..... Anladığım kadarıyla sayaç doğru çalışmıyor mu?

Soru, tam olarak H4'te yeni bir çubuğu kontrol etmeye nasıl başlayacağınızdır. Yani robotun H4'te kalıp araması gerekiyor ve grafik herhangi bir TF olabilir mi?