Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 312

 
Aleksey Vyazmikin:

Cerca un errore nella funzione - non restituisce la condizione di freccia verso l'alto.


Grazie adAleksey Vyazmikin, ma il problema è più serio. Quando il robot trova un modello, imposta un numero enorme di frecce su una coordinata. Il terminale si blocca. Come risolvere il problema. Hai provato ad eseguire il mio Expert Advisor sul tuo terminale?

 
voron_026:

Grazie adAleksey Vyazmikin, ma c'è un problema più grande. Quando il robot trova un modello, imposta un numero enorme di frecce su una coordinata. Il terminale si blocca. Come risolvere il problema. Hai provato ad eseguire il mio Expert Advisor sul tuo terminale?


Il problema è nella funzione in primo luogo - non ho aggiunto il codice per un motivo. La funzione è abbinata e disegna le frecce. Ho lanciato l'Expert Advisor nel visualizzatore.

L'Expert Advisor non disegnerà frecce su ogni tick - controlla solo se c'è una nuova candela.

 
voron_026:

Grazie adAleksey Vyazmikin, ma c'è un problema più grande. Quando il robot trova un modello, imposta un numero enorme di frecce su una coordinata. Il terminale si blocca. Come risolvere il problema. Hai provato ad eseguire il mio Expert Advisor sul tuo terminale?

Se volete ottenere aiuto dal maggior numero di persone possibile, dovreste caricare il codice, non il file. Non tutti vogliono scaricare il file, e poi bisogna aprirlo e poi cancellarlo.

 

Quindi, quando appare una nuova candela, la funzione ObjectCreate deve essere spenta, ho ragione?

 
Vitaly Muzichenko:

Per far sì che il maggior numero possibile di persone vi aiuti, dovete postare il codice, non il file. Non tutti vogliono scaricare il file, e poi bisogna aprirlo e poi cancellarlo, quindi è una rottura di palle.

Ricevuto, ti invio il codice.
#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:
Ricevuto, che stabilisce il codice.

Provate in questo modo:

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

Ciao a tutti) sono sul conto del server VPN, ho scritto l'indirizzo del server a cui appartiene il mio account, ma qui scrive che non viene trovato nulla, cosa fare, si prega di aiutare, grazie.

 
Vitaly Muzichenko:

Prova in questo modo:


Non ha funzionato. L'Expert Advisor ha disegnato 7679 oggetti, e in modo interessante, con numerazione dispari

Non capisco cosa c'è di sbagliato nella funzione Doji. Perché le frecce in alto non sono disegnate

 
voron_026:

Non ha funzionato. L'Expert Advisor ha disegnato 7679 oggetti, e in modo interessante, con numerazione dispari

Non capisco cosa c'è di sbagliato nella funzione Doji. Perché le frecce in alto non sono disegnate

Hai un problema con la ricerca di un modello. Prova a trovare il codice giusto nel kodobase, ce ne sono molti e il problema si risolverà da solo

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

Hai un problema di ricerca di pattern, prova a trovare il codice giusto in kodobase, ce ne sono molti e il problema si risolverà da solo


Risolto il problema del rendering di un gran numero di oggetti. Ho installato il controllo sulla nuova barra. Ho ottenuto il seguente codice:

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

L'unica cosa è che il numero di serie della freccia nelle proprietà dell'oggetto non va 1 2 3 ... e così via, ma 1 850427 1083295 ..... Immagino che il contatore non funzioni correttamente?

La mia domanda è: come verificare la presenza di una nuova barra su H4? Quindi, voglio che il robot cerchi i pattern su H4, mentre il grafico può essere di qualsiasi TF?