Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 155

 
Vitaly Gorbunov:
Ora vado alla casa di campagna e sarò lì lunedì. Se sei interessato, aggiungimi come amico e parleremo senza intasare il forum.
Ok.
 
nidves:

Sto imparando a lavorare con gli array attraverso questo codice. Dopo tutto, il compito non è complicato in linea di principio.

Le virgolette "Open" sono già memorizzate nell'array di cui sopra. Pertanto, dovrei semplicemente estrarre la citazione della data di cui ho bisogno dall'array.

iTime(symbolMT,periodMT,numberBar);

Cerca di ottenere le date in questo modo

O scrivere un indicatore e sarà più facile da prendere

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

sia data che prezzo e sono già tutti negli array time[],open[],high[],low[],close[],

 
Vladimir Karputov:

Chi te l'ha detto? Il test più semplice con#property indicator_chart_window è l'indicatore\MQL5\Indicators\Examples\Custom Moving Average.mq5

Scrivi un esempio basato su questo indicatore e mostra cosa non funziona.

Ecco l'indicatore

Non riesco a legare l'indicatore (i-DRP...) al mio Expert Advisor (DR Test) attraverso iCustom:

cosa sto facendo di sbagliato mi dica per favore

grazie

 
jakhongir.mamadiev:

Qui c'è il pavimento.

Non riesco a collegare l'indicatore (i-DRP...) con il mio Expert Advisor (DR Test) attraverso iCustom:

cosa sto facendo di sbagliato mi dica per favore

grazie

Si prega di consigliare perché non funziona

 

Ciao

per favore aiutami a legare il pavimento. (i-DRPojection) con l'EA correttamente.

non posso

pavimento. indicatore:

 #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 ( "" );
}

consigliere (il mio tentativo di fallire):

 //--------------------------------------------------------------- 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 --
 
Ciao a tutti. Ho testato tanti EA nel tester, ma non ho incontrato nulla di simile. Sto testando un EA (nel tester) e il codice non contiene no loss o trailing stop. Tuttavia, quando un ordine viene aperto e il prezzo si muove nella direzione richiesta, si attiva un trailing stop (circa 20 punti) e si avvia il trailing stop (con errore 1). Cos'è questa assurdità, perché e come liberarsene?
 
Youri Lazurenko:
Ciao a tutti. Ho testato tanti EA nel tester, ma non ho incontrato nulla di simile. Sto testando un EA (nel tester) e il codice non contiene no loss o trailing stop. Tuttavia, quando un ordine viene aperto e il prezzo si muove nella direzione richiesta, si attiva un trailing stop (circa 20 punti) e si avvia il trailing stop (con errore 1). Cos'è questa assurdità, perché e come liberarsene?

Contatta il Consulente Esperto o vai al club dei telepati. Vi aiuteranno sicuramente.

 
Konstantin Nikitin:

Codice dell'esperto, o il club dei telepati. Saranno sicuramente d'aiuto.

Grazie. Stranamente, la tua risposta mi ha aiutato. Essa (la risposta) mi ha spinto a rivedere di nuovo il codice e a trovare l'errore (altrimenti mi sarebbe sfuggito). A volte il desiderio di fare il meglio possibile porta al risultato opposto.

P.S. Sì, hai ragione, non puoi rispondere alla mia domanda senza codice. Ma dato che avete esaurito la domanda, non credo che (il codice) abbia senso. Grazie ancora.

 

Ciao a tutti, potete dirmi come scrivere correttamente il codice (tipi di variabili)? Fondamentalmente funziona così com'è, ma in caso di errori.

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

Il compito è quello di calcolare il numero del giorno LAVORATIVO dell'anno.

 

Saluti a tutti!

Ho deciso di eseguire il vecchio EA per il gusto di sperimentare, ma al momento della compilazione dà un sacco di errori (compilare). Sono stato in una build diversa per un po' di tempo. Qualsiasi suggerimento su quale sia il problema e come risolverlo.https://www.mql5.com/ru/code/9386

p.s. Forse qualcuno ha un terminale della vecchia build... sarebbe più vago...
Нейросетевой советник
Нейросетевой советник
  • www.mql5.com
В корневом каталоге диска С: создайте папку с названием "ANN", в которой будут храниться настроенные нейросети. Для того, чтобы библиотека подключилась, также необходимо в терминале Меню "Сервис" > Вкладка "Советники" включить режим: "Разрешить импорт DLL" Оптимизацию необходимо проводить при включенном генетическом алгоритме. У советника...