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

 
Buba_rus :

Tünaydın.
Fikire göre, danışman yeni bir çubuk göründüğünde koşulları kontrol etmeli ve siparişleri açmalıdır.

"Yalnızca global, ad alanı veya sınıf kapsamında işlev bildirimlerine izin verilir" hatası veriyor. Translated: "İşlev bildirimlerine yalnızca genel kapsamda, ad alanında veya sınıfta izin verilir."
Hala anlamıyorum, aptal. Lütfen bana söyle ya da nerede okuyacağımı söyle. Şimdiden teşekkürler!)

Yeni başlayanlar için, okuyabilmeniz için kodu normal bir şekilde yerleştirin

Kod göndermek için böyle bir işlev var, yardım için herkesin kodunuzu okuması daha uygun olacaktır.

 

Buba_rus :

Hala anlamıyorum, aptal. Lütfen bana söyle ya da nerede okuyacağımı söyle. Şimdiden teşekkürler!

Bu kod parçası nereden? Hatayı görmek için tüm koda ihtiyacınız var

 
MakarFX :

Yeni başlayanlar için, okuyabilmeniz için kodu normal bir şekilde yerleştirin

Kod göndermek için böyle bir işlev var, yardım için herkesin kodunuzu okuması daha uygun olacaktır.

 bool New_Bar= false ;             // Флаг нового бара
bool Work= true ;               // Эксперт будет работать
string Symb;                   // Название финансового инструмента

//---------------------------------------------
//+------------------------------------------------------------------+
//| Блок 2
//| Запуск эксперта 
//|                               |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   Alert ( "Запуск эксперта" );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Блок 3
//| Рабочая часть эксперта  
//|                               
//+------------------------------------------------------------------+
void OnStart ()
  {
//+------------------------------------------------------------------+
//| Блок 4
//| Задаём переменные  
//|                               
//+------------------------------------------------------------------+
int 
Total,     // Колличество ордеров в окне
Tip=- 1 ,   // Тип выбранного ордера (В=0, S=1)
Ticket;   // Номер ордера
// Колличество баров для 2-го условия 
//---------------------------------------------
double 
MA_1_t,     // Значение МА1 текущее
MA_2_t,     // Значение МА2 текущее
// Колличество лотов в выбранном ордере

// Максимальное колличество лотов
Free,       // Текущее колличество свободных средств
Bar_Close1= iClose ( NULL , 0 , 1 ),   // Цена закрытия 1 бара
Bar_Close2= iClose ( NULL , 0 , 2 ),   // Цена закрытия 2 бара
Bar_Close3= iClose ( NULL , 0 , 3 ),   // Цена закрытия 3 бара
// Цена закрытия 4 бара
Lot,       // 
Price,
Lts,         // Минимум свободных средств 
SL,         // SL выбранного ордера 
TP;         // TP выбранного ордера
//---------------------------------------------
bool
Bars_Y1= false ,     // 1 критерий закрытие Bars_X подряд выше друг друга
Bars_Y2= false ,     // 1 критерий закрытие Bars_X подряд ниже друг друга
Open_B= false ,     // Критерий открытия Bay
Open_S= false ;     // Критерий открытия Sell

//+------------------------------------------------------------------+
//| Блок 5
//| Предварительная обработка  
//|                               
//+------------------------------------------------------------------+
if ( Bars < Period_MA_2)     // Недостаточно баров
   { 
   Alert ( "Недостаточно баров в окне. Эксперт не работает." );
   return ;                   // Выход из start ()
   }
   
if (Work== false )
   {
   Alert ( "Критическая ошибка. Эксперт не работает." );
   return ;                 // Выход из start () 
   }

//--------------------------------------------- Новый бар
 Fun_New_Bar();                       // Обращение к ф-ии
   if (New_Bar== false )               // Если бар не новый..
       return ;                         // ..то уходим

void Fun_New_Bar ()                   // Появление нового бара
{
   static datetime New_Time=Time[ 0 ];   // 
  New_Bar= false ;                     // Не новый бар
   if (New_Time!=Time[ 0 ])               // Проверка времени
  {
     New_Time=Time[ 0 ];               // 
     New_Bar= true ;                   //
  }
}
 
Buba_rus :

Onu nereden alıyorsunuz?

Period_MA_2

Bu yine tüm kod değil ... size kalmış

işte hatalar

'Period_MA_2' - undeclared identifier   Wai_v_5.0.mq4   64      12
variable 'Total' not used       Wai_v_5.0.mq4   31      1
variable 'Ticket' not used      Wai_v_5.0.mq4   33      1
variable 'MA_1_t' not used      Wai_v_5.0.mq4   37      1
variable 'MA_2_t' not used      Wai_v_5.0.mq4   38      1
variable 'Free' not used        Wai_v_5.0.mq4   42      1
variable 'Lot' not used Wai_v_5.0.mq4   47      1
variable 'Price' not used       Wai_v_5.0.mq4   48      1
variable 'Lts' not used Wai_v_5.0.mq4   49      1
variable 'SL' not used  Wai_v_5.0.mq4   50      1
variable 'TP' not used  Wai_v_5.0.mq4   51      1
1 errors, 10 warnings           2       11
 
MakarFX :

Bu kod parçası nereden? Hatayı görmek için tüm koda ihtiyacınız var

Expert Advisor'ın tamamını atmak zorunda olduğumu hemen görmedim ve anlamadım.

 extern double StopLoss= 200 ;   // SL для открываемого ордера
extern double TakeProfit= 300 ; // TP для открываемого ордера
extern double Lots= 5 ;         // Колличество лотов не должно превышать
extern double Lots_X= 0.3 ;     // Размер лота
extern double Prots= 0.4 ;       // Процент свободных средств

//---------------------------------------------

extern int Period_MA_1= 10 ;     // Период МА_1 быстрая
extern int Period_MA_2= 50 ;     // Период МА_2 медленная

//---------------------------------------------
bool isNewBar();               // Функция нового бара???
bool Work= true ;               // Эксперт будет работать
string Symb;                   // Название финансового инструмента

//---------------------------------------------

//+------------------------------------------------------------------+
//| Блок 2
//| Запуск эксперта 
//|                               |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   Alert ( "Запуск эксперта" );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Блок 3
//| Рабочая часть эксперта  
//|                               
//+------------------------------------------------------------------+
void OnStart ()
  {
//+------------------------------------------------------------------+
//| Блок 4
//| Задаём переменные  
//|                               
//+------------------------------------------------------------------+
int 
Total,     // Колличество ордеров в окне
Tip=- 1 ,   // Тип выбранного ордера (В=0, S=1)
Ticket;   // Номер ордера
// Колличество баров для 2-го условия 
//---------------------------------------------
double 
MA_1_t,     // Значение МА1 текущее
MA_2_t,     // Значение МА2 текущее
// Колличество лотов в выбранном ордере

// Максимальное колличество лотов
Free,       // Текущее колличество свободных средств
Bar_Close1= iClose ( NULL , 0 , 1 ),   // Цена закрытия 1 бара
Bar_Close2= iClose ( NULL , 0 , 2 ),   // Цена закрытия 2 бара
Bar_Close3= iClose ( NULL , 0 , 3 ),   // Цена закрытия 3 бара
// Цена закрытия 4 бара
Lot,       // 
Price,
Lts,         // Минимум свободных средств 
SL,         // SL выбранного ордера 
TP;         // TP выбранного ордера
//---------------------------------------------
bool
Bars_Y1= false ,     // 1 критерий закрытие Bars_X подряд выше друг друга
Bars_Y2= false ,     // 1 критерий закрытие Bars_X подряд ниже друг друга
Open_B= false ,     // Критерий открытия Bay
Open_S= false ;     // Критерий открытия Sell

//+------------------------------------------------------------------+
//| Блок 5
//| Предварительная обработка  
//|                               
//+------------------------------------------------------------------+
if ( Bars < Period_MA_2)     // Недостаточно баров
   { 
   Alert ( "Недостаточно баров в окне. Эксперт не работает." );
   return ;                   // Выход из start ()
   }
   
if (Work== false )
   {
   Alert ( "Критическая ошибка. Эксперт не работает." );
   return ;                 // Выход из start () 
   }


//+------------------------------------------------------------------+
//| Блок 6
//| Учёт ордеров  
//|                               
//+------------------------------------------------------------------+
Symb= Symbol ();   // Название финансового инструмента
Total= 0 ;         // Колличество ордеров
for ( int i= 1 ; i<= OrdersTotal (); i++)           // Цикл перебора ордер
     {
       if ( OrderSelect (i- 1 ,SELECT_BY_POS)== true ) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symb) continue ;       // Не наш фин. инструм
         if (OrderType()> 1 )                     // Попался отложенный
           {
             Alert ( "Обнаружен отложенный ордер. Эксперт не работает." );
             return ;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total> 5 )                           // Не более одного орд
           {
             Alert ( "Рыночных ордеров больше 5-и. Эксперт не работает." );
             return ;                             // Выход из start()
           }
         Ticket=OrderTicket();                   // Номер выбранн. орд.
         Tip   =OrderType();                     // Тип выбранного орд.
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                 // SL выбранного орд.
         TP    =OrderTakeProfit();               // TP выбранного орд.
         Lot   =OrderLots();                     // Количество лотов
        }
     }

//+------------------------------------------------------------------+
//| Блок 7
//| Определение торговых критериев  
//|                               
//+------------------------------------------------------------------+
//--------------------------------------------- Новый бар
bool isNewBar()
  {
   static datetime last_time= 0 ;   //в статической переменной будем помнить время открытия последнего бара
   datetime lastbar_time= SeriesInfoInteger ( Symbol (), Period (), SERIES_LASTBAR_DATE );   // текущее время
   if (last_time== 0 )   // если это первый вызов функции
     {
      last_time=lastbar_time;   // установим время и выйдем 
       return ( false );
     }
     
   if (last_time!=lastbar_time) // если время отличается
     {
      last_time=lastbar_time; // запомним время и вернем true
       return ( true );
     }

   return ( false ); // дошли до этого места - значит бар не новый, вернем false
  }
//--------------------------------------------- 1 условие
MA_1_t= iMA ( NULL , 0 ,Period_MA_1, 0 , MODE_LWMA , PRICE_TYPICAL , 0 );   //MA_1

MA_2_t= iMA ( NULL , 0 ,Period_MA_2, 0 , MODE_LWMA , PRICE_TYPICAL , 0 );   //MA_2

//--------------------------------------------- 2 условие
if (Bar_Close1 > Bar_Close2 > Bar_Close3 ) // Условие на Buy
   {
   Bars_Y1= true ; // Условие выполнено
   }

if ( Bar_Close1 < Bar_Close2 < Bar_Close3) // Условие на Sell
   {
   Bars_Y2= true ; // Условие выполнено
   }

//--------------------------------------------- Критерий
if (MA_1_t > MA_2_t && Bars_Y1== true )     // Если МА1 выше МА2 и цены закрытия у Bars_x баров 
   {                                     // подряд выше друг друга
   Open_B= true ;                           // Критерий открытия Buy
   }
   
if (MA_1_t < MA_2_t && Bars_Y2== true )     // Если МА1 ниже МА2 и цены закрытия у Bars_x баров
   {                                     // подряд ниже друг друга
   Open_S= true ;                           // Критерий открытия Sell
   }  
 
//+------------------------------------------------------------------+
//| Блок 8
//| Закрытие или модернизация ордеров  
//|                               
//+------------------------------------------------------------------+
 
//+------------------------------------------------------------------+
//| Блок 9
//| Вычисление свободных средств  
//| Вычисление стоимости ордеров                              
//+------------------------------------------------------------------+
RefreshRates();                 // Обновление данных
Free=AccountFreeMargin();       // Свободн средства
Lts= MathFloor (Free*Prots);   // Минимум свободных средств
if (Lts> Free)                 // 
     {
       Alert ( "Не хватает денег!" );
       return ;                                   // Выход из start()
     }
     
//+------------------------------------------------------------------+
//| Блок 10
//| Открытие ордеров  
//|
//+------------------------------------------------------------------+
 while ( true )                                     // Цикл закрытия орд.
     {
       if (Total== 0 && Open_B== true )             // Открытых орд. нет +
        {                                       // критерий откр. Buy
         RefreshRates();                         // Обновление данных
         SL=Bid - StopLoss* Point ;               // Вычисление SL откр.
         TP=Bid + TakeProfit* Point ;             // Вычисление TP откр.
         Alert ( "Попытка открыть Buy. Ожидание ответа.." );
         Ticket= OrderSend (Symb,OP_BUY,Lots_X,Ask, 2 ,SL,TP); //Открытие Buy
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Buy " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       if (Total== 0 && Open_S== true )             // Открытых орд. нет +
        {                                       // критерий откр. Sell
         RefreshRates();                         // Обновление данных
         SL=Ask + StopLoss* Point ;     // Вычисление SL откр.
         TP=Ask - TakeProfit* Point ;   // Вычисление TP откр.
         Alert ( "Попытка открыть Sell. Ожидание ответа.." );
         Ticket= OrderSend (Symb,OP_SELL,Lots_X,Bid, 2 ,SL,TP); //Открытие Sel
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Sell " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       break ;                                     // Выход из while
     }

//-------------------------------------------------------------------
 return ;                                       // Выход из start()
  }
//+------------------------------------------------------------------+
//| Блок 11
//| Обработка ошибок  
//|                               
//+------------------------------------------------------------------+
int Fun_Error( int Error)                         // Ф-ия обработ ошибок
  {
   switch (Error)
     {                                           // Преодолимые ошибки            
       case    4 : Alert ( "Торговый сервер занят. Пробуем ещё раз.." );
         Sleep ( 3000 );                           // Простое решение
         return ( 1 );                             // Выход из функции
       case 135 : Alert ( "Цена изменилась. Пробуем ещё раз.." );
         RefreshRates();                         // Обновим данные
         return ( 1 );                             // Выход из функции
       case 136 : Alert ( "Нет цен. Ждём новый тик.." );
         while (RefreshRates()== false )           // До нового тика
             Sleep ( 1 );                           // Задержка в цикле
         return ( 1 );                             // Выход из функции
       case 137 : Alert ( "Брокер занят. Пробуем ещё раз.." );
         Sleep ( 3000 );                           // Простое решение
         return ( 1 );                             // Выход из функции
       case 146 : Alert ( "Подсистема торговли занята. Пробуем ещё.." );
         Sleep ( 500 );                             // Простое решение
         return ( 1 );                             // Выход из функции
         // Критические ошибки
       case    2 : Alert ( "Общая ошибка." );
         return ( 0 );                             // Выход из функции
       case    5 : Alert ( "Старая версия терминала." );
         Work= false ;                             // Больше не работать
         return ( 0 );                             // Выход из функции
       case 64 : Alert ( "Счет заблокирован." );
         Work= false ;                             // Больше не работать
         return ( 0 );                             // Выход из функции
       case 133 : Alert ( "Торговля запрещена." );
         return ( 0 );                             // Выход из функции
       case 134 : Alert ( "Недостаточно денег для совершения операции." );
         return ( 0 );                             // Выход из функции
       default : Alert ( "Возникла ошибка " ,Error); // Другие варианты   
         return ( 0 );                             // Выход из функции
     }
  }

//+------------------------------------------------------------------+
//| Блок 12
//| Проверка стоп приказов  
//|                               
//+------------------------------------------------------------------+





//+------------------------------------------------------------------+
//| Блок 13
//| Прекращение исполнения эксперта  
//|                               
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   Alert ( "Эксперт выключен!" ); 
  }
 
Buba_rus :

Expert Advisor'ın tamamını atmak zorunda olduğumu hemen görmedim ve anlamadım.

neyin yanlış olduğunu vurguladım

 extern double StopLoss= 200 ;   // SL для открываемого ордера
extern double TakeProfit= 300 ; // TP для открываемого ордера
extern double Lots= 5 ;         // Колличество лотов не должно превышать
extern double Lots_X= 0.3 ;     // Размер лота
extern double Prots= 0.4 ;       // Процент свободных средств

//---------------------------------------------

extern int Period_MA_1= 10 ;     // Период МА_1 быстрая
extern int Period_MA_2= 50 ;     // Период МА_2 медленная

//---------------------------------------------
//bool isNewBar();               // Функция нового бара???
bool Work= true ;               // Эксперт будет работать
string Symb;                   // Название финансового инструмента

//---------------------------------------------

//+------------------------------------------------------------------+
//| Блок 2
//| Запуск эксперта 
//|                               |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   Alert ( "Запуск эксперта" );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Блок 3
//| Рабочая часть эксперта  
//|                               
//+------------------------------------------------------------------+
void OnStart ()
  {
//+------------------------------------------------------------------+
//| Блок 4
//| Задаём переменные  
//|                               
//+------------------------------------------------------------------+
int 
Total,     // Колличество ордеров в окне
Tip=- 1 ,   // Тип выбранного ордера (В=0, S=1)
Ticket;   // Номер ордера
// Колличество баров для 2-го условия 
//---------------------------------------------
double 
MA_1_t,     // Значение МА1 текущее
MA_2_t,     // Значение МА2 текущее
// Колличество лотов в выбранном ордере

// Максимальное колличество лотов
Free,       // Текущее колличество свободных средств
Bar_Close1= iClose ( NULL , 0 , 1 ),   // Цена закрытия 1 бара
Bar_Close2= iClose ( NULL , 0 , 2 ),   // Цена закрытия 2 бара
Bar_Close3= iClose ( NULL , 0 , 3 ),   // Цена закрытия 3 бара
// Цена закрытия 4 бара
Lot,       // 
Price,
Lts,         // Минимум свободных средств 
SL,         // SL выбранного ордера 
TP;         // TP выбранного ордера
//---------------------------------------------
bool
Bars_Y1= false ,     // 1 критерий закрытие Bars_X подряд выше друг друга
Bars_Y2= false ,     // 1 критерий закрытие Bars_X подряд ниже друг друга
Open_B= false ,     // Критерий открытия Bay
Open_S= false ;     // Критерий открытия Sell

//+------------------------------------------------------------------+
//| Блок 5
//| Предварительная обработка  
//|                               
//+------------------------------------------------------------------+
if ( Bars < Period_MA_2)     // Недостаточно баров
   { 
   Alert ( "Недостаточно баров в окне. Эксперт не работает." );
   return ;                   // Выход из start ()
   }
   
if (Work== false )
   {
   Alert ( "Критическая ошибка. Эксперт не работает." );
   return ;                 // Выход из start () 
   }


//+------------------------------------------------------------------+
//| Блок 6
//| Учёт ордеров  
//|                               
//+------------------------------------------------------------------+
Symb= Symbol ();   // Название финансового инструмента
Total= 0 ;         // Колличество ордеров
for ( int i= 1 ; i<= OrdersTotal (); i++)           // Цикл перебора ордер
     {
       if ( OrderSelect (i- 1 ,SELECT_BY_POS)== true ) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symb) continue ;       // Не наш фин. инструм
         if (OrderType()> 1 )                     // Попался отложенный
           {
             Alert ( "Обнаружен отложенный ордер. Эксперт не работает." );
             return ;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total> 5 )                           // Не более одного орд
           {
             Alert ( "Рыночных ордеров больше 5-и. Эксперт не работает." );
             return ;                             // Выход из start()
           }
         Ticket=OrderTicket();                   // Номер выбранн. орд.
         Tip   =OrderType();                     // Тип выбранного орд.
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                 // SL выбранного орд.
         TP    =OrderTakeProfit();               // TP выбранного орд.
         Lot   =OrderLots();                     // Количество лотов
        }
     }

//+------------------------------------------------------------------+
//| Блок 7
//| Определение торговых критериев  
//|                               
//+------------------------------------------------------------------+
//--------------------------------------------- 1 условие
MA_1_t= iMA ( NULL , 0 ,Period_MA_1, 0 , MODE_LWMA , PRICE_TYPICAL , 0 );   //MA_1

MA_2_t= iMA ( NULL , 0 ,Period_MA_2, 0 , MODE_LWMA , PRICE_TYPICAL , 0 );   //MA_2

//--------------------------------------------- 2 условие
if (Bar_Close1 > Bar_Close2 > Bar_Close3 ) // Условие на Buy
   {
   Bars_Y1= true ; // Условие выполнено
   }

if ( Bar_Close1 < Bar_Close2 < Bar_Close3) // Условие на Sell
   {
   Bars_Y2= true ; // Условие выполнено
   }

//--------------------------------------------- Критерий
if (MA_1_t > MA_2_t && Bars_Y1== true )     // Если МА1 выше МА2 и цены закрытия у Bars_x баров 
   {                                     // подряд выше друг друга
   Open_B= true ;                           // Критерий открытия Buy
   }
   
if (MA_1_t < MA_2_t && Bars_Y2== true )     // Если МА1 ниже МА2 и цены закрытия у Bars_x баров
   {                                     // подряд ниже друг друга
   Open_S= true ;                           // Критерий открытия Sell
   }  
 
//+------------------------------------------------------------------+
//| Блок 8
//| Закрытие или модернизация ордеров  
//|                               
//+------------------------------------------------------------------+
 
//+------------------------------------------------------------------+
//| Блок 9
//| Вычисление свободных средств  
//| Вычисление стоимости ордеров                              
//+------------------------------------------------------------------+
RefreshRates();                 // Обновление данных
Free=AccountFreeMargin();       // Свободн средства
Lts= MathFloor (Free*Prots);   // Минимум свободных средств
if (Lts> Free)                 // 
     {
       Alert ( "Не хватает денег!" );
       return ;                                   // Выход из start()
     }
     
//+------------------------------------------------------------------+
//| Блок 10
//| Открытие ордеров  
//|
//+------------------------------------------------------------------+
 while ( true )                                     // Цикл закрытия орд.
     {
       if (Total== 0 && Open_B== true )             // Открытых орд. нет +
        {                                       // критерий откр. Buy
         RefreshRates();                         // Обновление данных
         SL=Bid - StopLoss* Point ;               // Вычисление SL откр.
         TP=Bid + TakeProfit* Point ;             // Вычисление TP откр.
         Alert ( "Попытка открыть Buy. Ожидание ответа.." );
         Ticket= OrderSend (Symb,OP_BUY,Lots_X,Ask, 2 ,SL,TP); //Открытие Buy
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Buy " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       if (Total== 0 && Open_S== true )             // Открытых орд. нет +
        {                                       // критерий откр. Sell
         RefreshRates();                         // Обновление данных
         SL=Ask + StopLoss* Point ;     // Вычисление SL откр.
         TP=Ask - TakeProfit* Point ;   // Вычисление TP откр.
         Alert ( "Попытка открыть Sell. Ожидание ответа.." );
         Ticket= OrderSend (Symb,OP_SELL,Lots_X,Bid, 2 ,SL,TP); //Открытие Sel
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Sell " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       break ;                                     // Выход из while
     }

//-------------------------------------------------------------------
 return ;                                       // Выход из start()
  }
//+------------------------------------------------------------------+
//| Блок 11
//| Обработка ошибок  
//|                               
//+------------------------------------------------------------------+
int Fun_Error( int Error)                         // Ф-ия обработ ошибок
  {
   switch (Error)
     {                                           // Преодолимые ошибки            
       case    4 : Alert ( "Торговый сервер занят. Пробуем ещё раз.." );
         Sleep ( 3000 );                           // Простое решение
         return ( 1 );                             // Выход из функции
       case 135 : Alert ( "Цена изменилась. Пробуем ещё раз.." );
         RefreshRates();                         // Обновим данные
         return ( 1 );                             // Выход из функции
       case 136 : Alert ( "Нет цен. Ждём новый тик.." );
         while (RefreshRates()== false )           // До нового тика
             Sleep ( 1 );                           // Задержка в цикле
         return ( 1 );                             // Выход из функции
       case 137 : Alert ( "Брокер занят. Пробуем ещё раз.." );
         Sleep ( 3000 );                           // Простое решение
         return ( 1 );                             // Выход из функции
       case 146 : Alert ( "Подсистема торговли занята. Пробуем ещё.." );
         Sleep ( 500 );                             // Простое решение
         return ( 1 );                             // Выход из функции
         // Критические ошибки
       case    2 : Alert ( "Общая ошибка." );
         return ( 0 );                             // Выход из функции
       case    5 : Alert ( "Старая версия терминала." );
         Work= false ;                             // Больше не работать
         return ( 0 );                             // Выход из функции
       case 64 : Alert ( "Счет заблокирован." );
         Work= false ;                             // Больше не работать
         return ( 0 );                             // Выход из функции
       case 133 : Alert ( "Торговля запрещена." );
         return ( 0 );                             // Выход из функции
       case 134 : Alert ( "Недостаточно денег для совершения операции." );
         return ( 0 );                             // Выход из функции
       default : Alert ( "Возникла ошибка " ,Error); // Другие варианты   
         return ( 0 );                             // Выход из функции
     }
  }

//+------------------------------------------------------------------+
//| Блок 12
//| Проверка стоп приказов  
//|                               
//+------------------------------------------------------------------+





//+------------------------------------------------------------------+
//| Блок 13
//| Прекращение исполнения эксперта  
//|                               
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   Alert ( "Эксперт выключен!" ); 
  }
//--------------------------------------------- Новый бар
bool isNewBar()
  {
   static datetime last_time= 0 ;   //в статической переменной будем помнить время открытия последнего бара
   datetime lastbar_time= SeriesInfoInteger ( Symbol (), Period (), SERIES_LASTBAR_DATE );   // текущее время
   if (last_time== 0 )   // если это первый вызов функции
     {
      last_time=lastbar_time;   // установим время и выйдем 
       return ( false );
     }
     
   if (last_time!=lastbar_time) // если время отличается
     {
      last_time=lastbar_time; // запомним время и вернем true
       return ( true );
     }

   return ( false ); // дошли до этого места - значит бар не новый, вернем false
  }

if (isNewBar()== true )

sarı vurgulanmış gereksiz, silebilirsiniz

yeşille vurgulanan işlev OnStart()'ın dışında olmalıdır,

yeni bir çubuk tanımlamanız gerektiğinde vurgulanan kahverengiyi kullanın

 

Merhaba. Herkese iyi tatiller, yeni yılda başarılar.

EA, bu noktalar üzerinde basit bir gösterge kullanarak DeMark'ın puanları üzerinde işlem yapar. Terminal kapatıldığında, nokta verilerinin kaydedilmesi gereklidir. Ve başlangıçta, danışman kaydedilen verileri kullanabilir ve ardından programa göre çalışabilir. Mümkün mü. Bunun gibi bir işlev kullanılarak yapılabileceğini anlıyorum.   Dosya Aç() . Ama asla yapmadı. Bana doğru yolu söyle. İşte iki noktanın fiyatını hesaplamak için birkaç fonksiyon. Geri kalanı benzer. Bu işlevlerin verileri nasıl saklanır.

 double PriceDemUp2()
{
   double priceUp = NormalizeDouble ( iCustom ( NULL , 0 , "DeMark Point" , LevelDP, 0 , LevelDP+ 1 ), Digits );
   
   static double    priceUp1 = 0 ;
   static double    priceDw1 = 0 ;
   static double    priceUp2 = 0 ;
   static double    priceDw2 = 0 ;  
   static datetime timeUp1  = 0 ;
   static datetime timeDw1  = 0 ; 
   static datetime timeUp2  = 0 ;
   static datetime timeDw2  = 0 ;
   static datetime time     = 0 ;
   
   if (time != Time[ 0 ])
   {
       if (priceUp != 0 )
      {
         if (priceUp2 != priceUp1)
         {
            timeUp2  = timeUp1;
            priceUp2 = priceUp1;
         }
         if (priceUp1 != iHigh ( NULL , 0 , BarPointDemUp()))
         {
            timeUp1  = iTime ( NULL , 0 , BarPointDemUp());
            priceUp1 = iHigh ( NULL , 0 , BarPointDemUp());
         }
      }
      time = Time[ 0 ];
   }
   return (priceUp2);
}
///////////////////////////////////////////////////////////
double PriceDemUp1()
{
   double priceUp = NormalizeDouble ( iCustom ( NULL , 0 , "DeMark Point" , LevelDP, 0 , LevelDP+ 1 ), Digits );
   
   static double    priceUp1 = 0 ;
   static double    priceDw1 = 0 ;
   static double    priceUp2 = 0 ;
   static double    priceDw2 = 0 ;  
   static datetime timeUp1  = 0 ;
   static datetime timeDw1  = 0 ; 
   static datetime timeUp2  = 0 ;
   static datetime timeDw2  = 0 ;
   static datetime time     = 0 ;
   
   if (time != Time[ 0 ])
   {
       if (priceUp != 0 )
      {
         if (priceUp2 != priceUp1)
         {
            timeUp2  = timeUp1;
            priceUp2 = priceUp1;
         }
         if (priceUp1 != iHigh ( NULL , 0 , BarPointDemUp()))
         {
            timeUp1  = iTime ( NULL , 0 , BarPointDemUp());
            priceUp1 = iHigh ( NULL , 0 , BarPointDemUp());
         }
      }
      time = Time[ 0 ];
   }
   return (priceUp1);
}
 
Youri Lazurenko :

Merhaba. Herkese iyi tatiller, yeni yılda başarılar.

EA, bu noktalar üzerinde basit bir gösterge kullanarak DeMark'ın puanları üzerinde işlem yapar. Terminal kapatıldığında, nokta verilerinin kaydedilmesi gereklidir. Ve başlangıçta, danışman kaydedilen verileri kullanabilir ve ardından programa göre çalışabilir. Mümkün mü. Bunun gibi bir işlev kullanılarak yapılabileceğini anlıyorum.   Dosya Aç(). Ama asla yapmadı. Bana doğru yolu söyle. İşte iki noktanın fiyatını hesaplamak için birkaç fonksiyon. Geri kalanı benzer. Bu işlevlerin verileri nasıl saklanır.

Danışmana DeMark puanlarına dayalı nesnelerin oluşturulmasını ekler ve zaten bu nesneler üzerinde ticaret yapardım.

ArrowUpCreate( 0 , "ArrowUp" , 0 ,date,price,сolor);
 
MakarFX :

Danışmana DeMark puanlarına dayalı nesnelerin oluşturulmasını ekler ve zaten bu nesneler üzerinde ticaret yapardım.

Cevap için teşekkürler. Ama yanılmıyorsam tavsiyeniz MQL5 ile ilgili. Uzman Danışmanım MQL4'te.

Kendim için bir programcı, amatör değilim.
 
Youri Lazurenko :

Cevap için teşekkürler. Ama yanılmıyorsam tavsiyeniz MQL5 ile ilgili. Uzman Danışmanım MQL4'te.

Kendim için bir programcı, amatör değilim.

mql4 burada da mümkündür

Графические объекты - Стандартные функции - Учебник по MQL4
Графические объекты - Стандартные функции - Учебник по MQL4
  • book.mql4.com
Графический объект - это изображение в окне финансового инструмента, которое можно выделить, переместить, изменить или удалить. К графическим объектам относятся, например, горизонтальные и вертикальные линии, канал линейной регрессии, уровни Фибоначчи, прямоугольник, текстовая метка и пр. Такие изображения, как индикаторные линии, уровни...
Neden: