Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 155

 
Vitaly Gorbunov:
Vou agora para a casa de campo e estarei lá na segunda-feira. Se você estiver interessado, me adicione como amigo e conversaremos sem entupir o fórum.
Certo.
 
nidves:

Estou aprendendo a trabalhar com arrays através deste código. Afinal de contas, a tarefa não é complicada em princípio.

As citações "abertas" já estão armazenadas na matriz acima. Portanto, eu deveria apenas tirar a citação da data que preciso da matriz.

iTime(symbolMT,periodMT,numberBar);

Tente obter as datas assim

Ou escreva um indicador e será mais fácil de tomar

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[])
  {

data e preço e todos eles já estão no tempo das matrizes[],aberto[],alto[],baixo[],fechado[],

 
Vladimir Karputov:

Quem lhe disse isso? O teste mais simples com a janela do #indicador de propriedade é o indicador MQL5 Indicadores Exemplos Exemplos Indicador de média móvel.mq5

Escreva um exemplo com base neste indicador e mostre o que não funciona.

Aqui está o indicador

Não consigo ligar o indicador (i-DRP...) ao meu consultor especializado (Teste DR) através do iCustom:

o que estou fazendo errado me diga, por favor

obrigado

Arquivos anexados:
 
jakhongir.mamadiev:

Aqui está o indicador de piso.

Não sou capaz de conectar o indicador (i-DRP...) com meu Conselheiro Especialista (Teste DR) através do iCustom:

o que estou fazendo errado me diga, por favor

obrigado

Por favor, informe porque não funciona

 

Olá

por favor me ajude a amarrar o chão. indicador (i-DRPojection) com o EA corretamente.

não posso

andar. indicador :

 #property copyright "Ким Игорь В. aka KimIV"
#property link        "http://www.kimiv.ru"
//----
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrAqua    // Blue
#property indicator_color2 clrOrange //Salmon
#property strict
//------- Внешние параметры ------------------------------------------
extern int   NumberOfDay = 10 ;   // Количество дней
//------- Буферы индикатора ------------------------------------------
double MaxDay[];
double MinDay[];
//+---------------------------------------------------------------------------------+
void init(){ //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//+---------------------------------------------------------------------------------+
   SetIndexBuffer ( 0 , MaxDay); SetIndexStyle ( 0 , DRAW_LINE , STYLE_SOLID , 1 );
   SetIndexBuffer ( 1 , MinDay); SetIndexStyle ( 1 , DRAW_LINE , STYLE_SOLID , 1 );
   //Comment("");
   }
//+---------------------------------------------------------------------------------+
int start(){ //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//+---------------------------------------------------------------------------------+
   double po= 0 , ph= 0 , pl= 0 , pc= 0 , x= 0 ;
   int     currDay= 0 , i= 0 , j= 0 ;
     if ( Period ()> 240 ) 
     {
       Comment ( "Индикатор i-DRProjections не поддерживает ТФ более Н4 !" ); return 0 ;
     }
     while (i<=NumberOfDay) 
     {
         if (currDay!= TimeDay ( Time [j])) 
        {
         po= iOpen ( NULL , 1440 , i+ 1 );
         ph= iHigh ( NULL , 1440 , i+ 1 );
         pl= iLow   ( NULL , 1440 , i+ 1 );
         pc= iClose ( NULL , 1440 , i+ 1 );
         if (pc<po) x=(ph + pl + pc + pl)/ 2 ;
         if (pc>po) x=(ph + pl + pc + ph)/ 2 ;
         if (pc==po) x=(ph + pl + pc + pc)/ 2 ;
         i++;
        }
      currDay= TimeDay ( Time [j]);
      MaxDay[j]=x - pl;
      MinDay[j]=x - ph;
      j++;
     }
   return 0 ;   
}
//+----------------------------------------------------------------------------------+
void deinit(){ //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//+----------------------------------------------------------------------------------+
   ObjectDelete ( "LineHi" );
   ObjectDelete ( "LineLo" );
   Comment ( "" );
}

conselheiro (minha tentativa de falhar):

 //--------------------------------------------------------------- 1 --
                                   // Численные значения для М15
extern double StopLoss   = 200 ;     // SL для открываемого ордера
extern int     NumberOfDay= 100 ;     // Значение DR: Кол-во дней
extern double Lots       = 0.1 ;     // Жестко заданное колич. лотов
extern double Prots      = 0.07 ;     // Процент свободных средств


bool Work= true ;                     // Эксперт будет работать.
string Symb;                       // Название финанс. инструмента
//--------------------------------------------------------------- 2 --
int start()
  {
   int
   Total,                           // Количество ордеров в окне 
   Tip=- 1 ,                           // Тип выбран. ордера (B=0,S=1)
   Ticket;                           // Номер ордера
   double
   UpLine,                           // Значен. DR. 
   DnLine,                           // Значен. DR.
   Lot,                             // Колич. лотов в выбран.ордере
   Lts,                             // Колич. лотов в открыв.ордере
   Min_Lot,                         // Минимальное количество лотов
   Step,                             // Шаг изменения размера лота
   Free,                             // Текущие свободные средства
   One_Lot,                         // Стоимость одного лота
   Price,                           // Цена выбранного ордера
   SL,                               // SL выбранного ордера 
   TP;                               // TP выбранного ордера
   bool
   Work,
   Ans  = false ,                     // Ответ сервера после закрытия
   Cls_B= false ,                     // Критерий для закрытия  Buy
   Cls_S= false ,                     // Критерий для закрытия  Sell
   Opn_B= false ,                     // Критерий для открытия  Buy
   Opn_S= false ;                     // Критерий для открытия  Sell
//--------------------------------------------------------------- 3 --
   // Предварит.обработка
   /*if(Bars < Period_MA_2)                       // Недостаточно баров
     {
      Alert("Недостаточно баров в окне. Эксперт не работает.");
      return;                                   // Выход из start()
     }
   if(Work==false)                              // Критическая ошибка
     {
      Alert("Критическая ошибка. Эксперт не работает.");
      return;                                   // Выход из start()
     }*/
//--------------------------------------------------------------- 4 --
   // Учёт ордеров
   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> 1 )                           // Не более одного орд
           {
             Alert ( "Несколько рыночных ордеров. Эксперт не работает." );
             return ;                             // Выход из start()
           }
         Ticket= OrderTicket ();                   // Номер выбранн. орд.
         Tip   = OrderType ();                     // Тип выбранного орд.
         Price = OrderOpenPrice ();               // Цена выбранн. орд.
         SL    = OrderStopLoss ();                 // SL выбранного орд.
         TP    = OrderTakeProfit ();               // TP выбранного орд.
         Lot   = OrderLots ();                     // Количество лотов
        }
     }
//--------------------------------------------------------------- 5 --
   // Торговые критерии
   UpLine = iCustom ( NULL , 0 , "i-DRProjections_vr1pv1z_0_1" ,NumberOfDay, 0 , 0 );
   DnLine = iCustom ( NULL , 0 , "i-DRProjections_vr1pv1z_0_1" ,NumberOfDay, 1 , 0 );


   if (DnLine >= Ask )                           // 
     {                                           // 
      Opn_B= true ;
     }
   if (UpLine <= Bid )                           // 
     {
      Cls_B= true ;                               // 
     }
   if (UpLine <= Bid )                           // 
     {                                           // 
      Opn_S= true ;                 
     }                                           // 
   if (DnLine >= Ask )   
     { 
      Cls_S= true ;                 
     }
//--------------------------------------------------------------- 6 --
   // Закрытие ордеров
   while ( true )                                   // Цикл закрытия орд.
     {
       if (Tip== 0 && Cls_B== true )                 // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert ( "Попытка закрыть Buy " ,Ticket, ". Ожидание ответа.." );
         RefreshRates ();                         // Обновление данных
         Ans= OrderClose (Ticket,Lot, Bid , 2 );       // Закрытие Buy
         if (Ans== true )                         // Получилось :)
           {
             Alert ( "Закрыт ордер Buy " ,Ticket);
             break ;                               // Выход из цикла закр
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }

       if (Tip== 1 && Cls_S== true )                 // Открыт ордер Sell..
        {                                       // и есть критерий закр
         Alert ( "Попытка закрыть Sell " ,Ticket, ". Ожидание ответа.." );
         RefreshRates ();                         // Обновление данных
         Ans= OrderClose (Ticket,Lot, Ask , 2 );       // Закрытие Sell
         if (Ans== true )                         // Получилось :)
           {
             Alert ( "Закрыт ордер Sell " ,Ticket);
             break ;                               // Выход из цикла закр
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       break ;                                     // Выход из while
     }
//--------------------------------------------------------------- 7 --
   // Стоимость ордеров
   RefreshRates ();                               // Обновление данных
   Min_Lot= MarketInfo (Symb, MODE_MINLOT );         // Миним. колич. лотов 
   Free   = AccountFreeMargin ();                 // Свободн средства
   One_Lot= MarketInfo (Symb, MODE_MARGINREQUIRED ); // Стоимость 1 лота
   Step   = MarketInfo (Symb, MODE_LOTSTEP );       // Шаг изменен размера

   if (Lots > 0 )                                 // Если заданы лоты,то 
      Lts =Lots;                                 // с ними и работаем 
   else                                          // % свободных средств
      Lts= MathFloor (Free*Prots/One_Lot/Step)*Step; // Для открытия

   if (Lts < Min_Lot) Lts=Min_Lot;               // Не меньше минимальн
   if (Lts*One_Lot > Free)                       // Лот дороже свободн.
     {
       Alert ( " Не хватает денег на " , Lts, " лотов" );
       return ;                                   // Выход из start()
     }
//--------------------------------------------------------------- 8 --
   // Открытие ордеров
   while ( true )                                   // Цикл закрытия орд.
     {
       if (Total== 0 && Opn_B== true )               // Открытых орд. нет +
        {                                       // критерий откр. Buy
         RefreshRates ();                         // Обновление данных
         SL= Bid - New_Stop(StopLoss)* Point ;     // Вычисление SL откр.
         Alert ( "Попытка открыть Buy. Ожидание ответа.." );
         Ticket= OrderSend (Symb, OP_BUY ,Lts, Ask , 2 ,SL,Cls_B); //Открытие Buy
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Buy " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       if (Total== 0 && Opn_S== true )               // Открытых орд. нет +
        {                                       // критерий откр. Sell
         RefreshRates ();                         // Обновление данных
         SL= Ask + New_Stop(StopLoss)* Point ;     // Вычисление SL откр.
         Alert ( "Попытка открыть Sell. Ожидание ответа.." );
         Ticket= OrderSend (Symb, OP_SELL ,Lts, Bid , 2 ,SL,Cls_S); //Открытие Sel
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Sell " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       break ;                                     // Выход из while
     }
//--------------------------------------------------------------- 9 --
   return ;                                       // Выход из start()
  }
//-------------------------------------------------------------- 10 --
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 ( "Старая версия терминала." );
         bool 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 );                             // Выход из функции
     }
  }
//-------------------------------------------------------------- 11 --
int New_Stop( int Parametr)                       // Проверка стоп-прик.
  {
   int Min_Dist= MarketInfo (Symb, MODE_STOPLEVEL ); // Миним. дистанция
   if (Parametr<Min_Dist)                       // Если меньше допуст.
     {
      Parametr=Min_Dist;                         // Установим допуст.
       Alert ( "Увеличена дистанция стоп-приказа." );
     }
   return (Parametr);                             // Возврат значения
  }
//-------------------------------------------------------------- 12 --
 
Olá a todos. Eu testei tantos EAs no testador, mas não encontrei nada parecido. Estou testando um EA (no testador) e o código não contém nenhuma perda ou trailing stop. Entretanto, quando um pedido é aberto e o preço se move na direção desejada, ele aciona uma parada móvel (cerca de 20 pontos) e começa a parada móvel (com erro 1). Que disparate é esse, por que e como se livrar dele?
 
Youri Lazurenko:
Olá a todos. Eu testei tantos EAs no testador, mas não encontrei nada parecido. Estou testando um EA (no testador) e o código não contém nenhuma perda ou trailing stop. Entretanto, quando um pedido é aberto e o preço se move na direção desejada, ele aciona uma parada móvel (cerca de 20 pontos) e começa a parada móvel (com erro 1). Que disparate é esse, por que e como se livrar dele?

Entre em contato com o consultor especializado ou vá para o clube de telepatas. Com certeza, eles o ajudarão.

 
Konstantin Nikitin:

Código de especialista, ou o telepath club. Eles definitivamente ajudarão.

Obrigado. Por estranho que pareça, sua resposta ajudou. Ela (a resposta) me levou a revisar o código novamente e encontrar o erro (de outra forma o teria perdido). Às vezes o desejo de fazer o melhor possível leva ao resultado oposto.

P.S. Sim, você está certo, você não pode responder minha pergunta sem código. Mas como você esgotou a pergunta, não creio que isso (o código) tenha nenhum sentido. Mais uma vez, obrigado.

 

Olá a todos, vocês poderiam me dizer como escrever o código corretamente (tipos de variáveis)? Basicamente, funciona como está, mas em caso de erros.

   int День_Года=TimeDayOfYear(Time[0]);
   int Рабочий_День_Года;
   double Количество_недель_дробь=День_Года/7;

A tarefa é calcular o número do dia de TRABALHO do ano.

 

Saudações a todos!

Decidiu executar a antiga EA para fins de experimentação, mas no momento da compilação dá um monte de erros (compilar). Já faz um tempo que estou em uma construção diferente. Qualquer sugestão sobre o que é o problema e como resolvê-lo.https://www.mql5.com/ru/code/9386

p.s. Talvez alguém tenha um terminal da velha construção... seria mais vago...
Нейросетевой советник
Нейросетевой советник
  • www.mql5.com
В корневом каталоге диска С: создайте папку с названием "ANN", в которой будут храниться настроенные нейросети. Для того, чтобы библиотека подключилась, также необходимо в терминале Меню "Сервис" > Вкладка "Советники" включить режим: "Разрешить импорт DLL" Оптимизацию необходимо проводить при включенном генетическом алгоритме. У советника...