Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2608

 
Nikolay Skrigan #:
У меня немного другой. ИИ-ассистент нарисовал.
Покажите, очень интересно.
 
Alexey Viktorov #:

Самый хреновый вариант, это общение с искусственным идиотизмом. Я ещё ни разу не встречал приемлевого варианта кода написанного ИИ.

А этот индикатор "SWT" переписан на MQL5 ?

Да, есть проблемы. Но метки отрисовал хорошо. Остальное дерьмо.

Индикатор SWT переписан. Там ничего сложного нет и все внутри, без внешних вызовов. Поэтому проблем не было.
С другими были, но нашлось простое решение.

 
Tretyakov Rostyslav #:
Покажите, очень интересно.

Обязательно покажу. Я просто сейчас закопался в этом коде. Тот нужно разыскать... Но я сделаю и покажу.

 
Tretyakov Rostyslav #:
Покажите, очень интересно.

Совсем зашился.
Код нормально считается, но при переключении на график недельного масштаба выскакивают непонятные ошибки. И на Н4  тоже что-то непонятное... Похоже зависает.
Хотя от т/ф вообще не должно зависеть. Не могу понять где причина сбоя.
Коды меток вывода не привожу из-за громоздкости.
Графики Н1, Н4, D1 и W1.




//+------------------------------------------------------------------+
//|                           Copyright © 2005-2025, Николай Скриган |
//+------------------------------------------------------------------+
#property copyright "© 2005-2025, Николай Скриган (Nicholas Skrigan)"
#property link        "http://swt-metod.blogspot.com/"
#property description "The Stochastic Wave Trends Method"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 27
#property indicator_plots   0
//---- plot Label1
//--- input parameters
input int      SizeLabel         =  9;
input color    ModifyColorLabel  =  Khaki;
//---
datetime    TimeBar;
bool        NewBar=true;
double      VGrid;
//--- indicator buffers
double   VolIhT[];
double   VolHT[];
double   VolIT[];
double   VolDT[];
double   VolWT[];
double   VolST[];
double   VolMT[];
double   VolLT[];
double   VolBT[];
//---
double   Ihtr[];
double   Htr[];
double   Itr[];
double   Dtr[];
double   Wtr[];
double   Str[];
double   Mtr[];
double   Ltr[];
double   Btr[];
//---
double   Ihtc[];
double   Htc[];
double   Itc[];
double   Dtc[];
double   Wtc[];
double   Stc[];
double   Mtc[];
double   Ltc[];
double   Btc[];
//--- хэндл пользовательского индикатора
int handle_swt_m1;
int handle_swt_m5;
int handle_swt_m15;
int handle_swt_h1;
int handle_swt_h4;
int handle_swt_d1;
int handle_swt_w1;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0, VolIT, INDICATOR_CALCULATIONS);
   SetIndexBuffer(1, VolHT, INDICATOR_CALCULATIONS);
   SetIndexBuffer(2, VolIT, INDICATOR_CALCULATIONS);
   SetIndexBuffer(3, VolDT, INDICATOR_CALCULATIONS);
   SetIndexBuffer(4, VolWT, INDICATOR_CALCULATIONS);
   SetIndexBuffer(5, VolST, INDICATOR_CALCULATIONS);
   SetIndexBuffer(6, VolMT, INDICATOR_CALCULATIONS);
   SetIndexBuffer(7, VolLT, INDICATOR_CALCULATIONS);
   SetIndexBuffer(8, VolBT, INDICATOR_CALCULATIONS);
   
   SetIndexBuffer(9, Ihtr, INDICATOR_CALCULATIONS);
   SetIndexBuffer(10, Htr, INDICATOR_CALCULATIONS);
   SetIndexBuffer(11, Itr, INDICATOR_CALCULATIONS);
   SetIndexBuffer(12, Dtr, INDICATOR_CALCULATIONS);
   SetIndexBuffer(13, Wtr, INDICATOR_CALCULATIONS);
   SetIndexBuffer(14, Str, INDICATOR_CALCULATIONS);
   SetIndexBuffer(15, Mtr, INDICATOR_CALCULATIONS);
   SetIndexBuffer(16, Ltr, INDICATOR_CALCULATIONS);
   SetIndexBuffer(17, Btr, INDICATOR_CALCULATIONS);
   
   SetIndexBuffer(18, Ihtc, INDICATOR_CALCULATIONS);
   SetIndexBuffer(19, Htc, INDICATOR_CALCULATIONS);
   SetIndexBuffer(20, Itc, INDICATOR_CALCULATIONS);
   SetIndexBuffer(21, Dtc, INDICATOR_CALCULATIONS);
   SetIndexBuffer(22, Wtc, INDICATOR_CALCULATIONS);
   SetIndexBuffer(23, Stc, INDICATOR_CALCULATIONS);
   SetIndexBuffer(24, Mtc, INDICATOR_CALCULATIONS);
   SetIndexBuffer(25, Ltc, INDICATOR_CALCULATIONS);
   SetIndexBuffer(26, Btc, INDICATOR_CALCULATIONS);
   
 //---  
   
   handle_swt_m1 = iCustom(NULL, PERIOD_M1, "SWT", true, true);
   handle_swt_m5 = iCustom(NULL, PERIOD_M5, "SWT", true, true);
   handle_swt_m15 = iCustom(NULL, PERIOD_M15, "SWT", true, true);
   handle_swt_h1 = iCustom(NULL, PERIOD_H1, "SWT", true, true);
   handle_swt_h4 = iCustom(NULL, PERIOD_H4, "SWT", true, true);
   handle_swt_d1 = iCustom(NULL, PERIOD_D1, "SWT", true, true);
   handle_swt_w1 = iCustom(NULL, PERIOD_W1, "SWT", true, true);

   NewBar = true;

//---
   return(INIT_SUCCEEDED);
  }
  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0, -1, OBJ_LABEL);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
      //--- скопируем значения индикатора в наш индикаторный буфер
      CopyBuffer(handle_swt_m1, 30, 0, rates_total, VolIhT);
      CopyBuffer(handle_swt_m1, 11, 0, rates_total, VolHT);
      CopyBuffer(handle_swt_m5, 11, 0, rates_total, VolIT);
      CopyBuffer(handle_swt_m15, 11, 0, rates_total, VolDT);
      CopyBuffer(handle_swt_h1, 11, 0, rates_total, VolWT);
      CopyBuffer(handle_swt_h4, 11, 0, rates_total, VolST);
      CopyBuffer(handle_swt_d1, 11, 0, rates_total, VolMT);
      CopyBuffer(handle_swt_w1, 11, 0, rates_total, VolLT);
      CopyBuffer(handle_swt_w1, 13, 0, rates_total, VolBT);
      
      CopyBuffer(handle_swt_m1, 31, 0, rates_total, Ihtr);
      CopyBuffer(handle_swt_m1, 17, 0, rates_total, Htr);
      CopyBuffer(handle_swt_m1, 18, 0, rates_total, Itr);
      CopyBuffer(handle_swt_m5, 18, 0, rates_total, Dtr);
      CopyBuffer(handle_swt_m15, 18, 0, rates_total, Wtr);
      CopyBuffer(handle_swt_h1, 18, 0, rates_total, Str);
      CopyBuffer(handle_swt_h4, 18, 0, rates_total, Mtr);
      CopyBuffer(handle_swt_d1, 18, 0, rates_total, Ltr);
      CopyBuffer(handle_swt_w1, 18, 0, rates_total, Btr);
          
      CopyBuffer(handle_swt_m1, 32, 0, rates_total, Ihtc);
      CopyBuffer(handle_swt_m1, 15, 0, rates_total, Htc);
      CopyBuffer(handle_swt_m1, 16, 0, rates_total, Itc);
      CopyBuffer(handle_swt_m5, 16, 0, rates_total, Dtc);
      CopyBuffer(handle_swt_m15, 16, 0, rates_total, Wtc);
      CopyBuffer(handle_swt_h1, 16, 0, rates_total, Stc);
      CopyBuffer(handle_swt_h4, 16, 0, rates_total, Mtc);
      CopyBuffer(handle_swt_d1, 16, 0, rates_total, Ltc);
      CopyBuffer(handle_swt_w1, 16, 0, rates_total, Btc);
      
      //--- return value of prev_calculated for next call



   return(rates_total);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
 
Nikolay Skrigan #:

Совсем зашился.
Код нормально считается, но при переключении на график недельного масштаба выскакивают непонятные ошибки. И на Н4  тоже что-то непонятное... Похоже зависает.
Хотя от т/ф вообще не должно зависеть. Не могу понять где причина сбоя.
Коды меток вывода не привожу из-за громоздкости.
Графики Н1, Н4, D1 и W1.




Я не понимаю зачем Вам создавать буферы если они не отображаются

 
Nikolay Skrigan #:
выскакивают непонятные ошибки

Судя по скрину нет данных

добавьте в OnInit() код проверки хендлов

   if(handle_swt_m1 == INVALID_HANDLE||handle_swt_m5 == INVALID_HANDLE||handle_swt_m15 == INVALID_HANDLE||handle_swt_h1 == INVALID_HANDLE
   ||handle_swt_h4 == INVALID_HANDLE||handle_swt_d1 == INVALID_HANDLE||handle_swt_w1 == INVALID_HANDLE)
     {
      Print("Can't load indicator.");
      return INIT_FAILED;
     }
 
Tretyakov Rostyslav #:

Я не понимаю зачем Вам создавать буферы если они не отображаются

Я даже не чайник. 
Первое что посоветовали и заработало.
Если есть более простое решение буду признателен.

 
Tretyakov Rostyslav #:
   if(handle_swt_m1 == INVALID_HANDLE||handle_swt_m5 == INVALID_HANDLE||handle_swt_m15 == INVALID_HANDLE||handle_swt_h1 == INVALID_HANDLE    ||handle_swt_h4 == INVALID_HANDLE||handle_swt_d1 == INVALID_HANDLE||handle_swt_w1 == INVALID_HANDLE)      {       Print("Can't load indicator.");       return INIT_FAILED;      }

Данные берутся с индикатора в нижнем окне. Там вроде все норм.
Проверку добавлю

 
Nikolay Skrigan #:

Я даже не чайник. 
Первое что посоветовали и заработало.
Если есть более простое решение буду признателен.

Прикрепите файл кода, я поправлю
 
Tretyakov Rostyslav #:
Прикрепите файл кода, я поправлю

Прикрепил

Файлы:
Test_1_5.1.mq5  63 kb