MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1894

 
Vitaly Muzichenko # :

작동하지만 최소값은 손으로 설정할 수있는 들여 쓰기이며 그 이상은 아닙니다.

예, 창의 최소 10%입니다.

 
Alekseu Fedotov # :

예, 창의 최소 10%입니다.

글쎄, 그것은 나쁜 것으로 판명되었습니다.


 

좋은 오후에요 여러분. 20개의 도구가 열려 있고 모두에 대해 동일한 템플릿을 로드해야 합니다. 스크립트로 자동화할 수 있습니까? 그렇다면 코드를 공유하는 방법을 알려주십시오.

 
DanilaMactep # :

좋은 오후에요 여러분. 20개의 도구가 열려 있고 모두에 대해 동일한 템플릿을 로드해야 합니다. 스크립트로 자동화할 수 있습니까? 그렇다면 코드를 공유하는 방법을 알려주십시오.

스크립트 만들기 - 차트를 하나씩 살펴보고( ChartFirst(), ChartNext() ) 필요한 템플릿을 차트에 적용합니다( ChartApplyTemplate() ).

https://www.mql5.com/ru/blogs/post/747636 에서 엿보거나 직접 변경할 수 있습니다.

Полезняшки - скрипт для открытия чартов
Полезняшки - скрипт для открытия чартов
  • www.mql5.com
Небольшой скрипт, открывает недостающие пары и применяет туда шаблон
 
DanilaMactep # :

좋은 오후에요 여러분. 20개의 도구가 열려 있고 모두에 대해 동일한 템플릿을 로드해야 합니다. 스크립트로 자동화할 수 있습니까? 그렇다면 코드를 공유하는 방법을 알려주십시오.

템플릿을 기본으로 기억하십시오. 그리고 모든 새 창이 기본 템플릿에 따라 열립니다.

 
Tretyakov Rostyslav # :
코드를 게시

예, 5페이지에 대한 코드가 있습니다. 당신은 여기 나에게 모든 슬리퍼를 던질 것입니다, 나는 아마추어입니다 ... 포럼은 64000 자 이상이 있다고 맹세합니다.

파일:
 
Sergey Dymov # :

예, 5페이지에 대한 코드가 있습니다. 당신은 여기 나에게 모든 슬리퍼를 던질 것입니다, 나는 아마추어입니다 ... 포럼은 64000 자 이상이 있다고 맹세합니다.

' CopyXXXX ' 함수는 다음 문자를 지정해야 합니다.

   int   copy_open= CopyOpen ( Symbol () , PERIOD_M15 , 0 , 1 ,OpenPrice);
   if (copy_open< 0 )
       Print ( "Неудачная попытка копирования OpenPrice" );
 


Доброго времени суток!
Помогите разобраться я новичок в програмировании, посмотрел ролик "Как написать индикатор" писал код с ведущим ,от кампилировал без ошибок, вывожу на терминал индикатор не отрисовывается, ошибок нет в окне он есть в списке запущиных индекаторовв тоже. Что я делаю не так?




//+------------------------------------------------------------------+
//|                                                     MaOsC Уч.mq5 |
//|                                             Copyright 2022,Игорь |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022,Игорь"
#property link        " https://www.mql5.com "
#property version    "1.00"
#property indicator_separate_window                                                //Выводить индикатор в отдельное окно
#property indicator_buffers 4
#property indicator_plots    1                                                      //Количество графических серий в индикаторе
#property indicator_label1    "MAOS"
#property indicator_type1 DRAW_COLOR_HISTOGRAM                                    // Графическое построение цветная гистограмма
#property indicator_color1 clrLightBlue , clrBlue , clrYellow , clrGold , clrDarkOrange
#property indicator_style1 STYLE_SOLID                                            //стиль линий для отрисовки
#property indicator_width1 2                                                      //толшина линий

input uint                  MaFastPeriod    = 7 ;
input uint                  MaSlowPeriod    = 33 ;
input ENUM_MA_METHOD        MaMethod        = MODE_SMA ;                         //метод МА
input ENUM_APPLIED_PRICE    MaAppliaedPrice = PRICE_CLOSE ;

double   MAOSBuffer[];       //буфер если связан с ценой то тип double
double   ColorsBuffer[];
double   FastBuffer[];
double   SlowBuffer[];


int    FastPeriod,                                                                 // глобальные переменные
      SlowPeriod,
      fma_h, sma_h;                                                               // описатель (хэндл) индекатора,для того что-бы можно было обращаться к нему в дальнейшем

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
{
   FastPeriod = int (MaFastPeriod < 1 ? 1 : MaFastPeriod);   //описание действия (если MaFastPeriod меньше 1 то указываем 1 а если оно больше либо = 1 то указываем MaFastPeriod)
   SlowPeriod = int (MaSlowPeriod == MaFastPeriod ? FastPeriod + 1 : MaSlowPeriod < 1 ? 1 : MaSlowPeriod); // описание действия(если MaSlowPeriod = FastPeriod то в таком случае +1,а иначе если MaSlowPeriod меньше 1 то указываем 1 а если оно больше либо = 1 то указываем MaSlowPeriod)
   
   SetIndexBuffer ( 0 , MAOSBuffer, INDICATOR_DATA );
   SetIndexBuffer ( 1 , ColorsBuffer, INDICATOR_COLOR_INDEX );
   SetIndexBuffer ( 2 , FastBuffer, INDICATOR_CALCULATIONS );
   SetIndexBuffer ( 3 , SlowBuffer, INDICATOR_CALCULATIONS );   
   
   ArraySetAsSeries (MAOSBuffer, true );
   ArraySetAsSeries (ColorsBuffer, true );
   ArraySetAsSeries (FastBuffer, true );
   ArraySetAsSeries (SlowBuffer, true );

   ResetLastError ();
   
   fma_h = iMA ( NULL , PERIOD_CURRENT , FastPeriod, 0 , MaMethod, MaAppliaedPrice);
   if (fma_h == INVALID_HANDLE )
   {
       Print ( "Не удалось инициализировать индикатор Moving Average" );
       return INIT_FAILED ;
   }
   
   fma_h = iMA ( NULL , PERIOD_CURRENT , SlowPeriod, 0 , MaMethod, MaAppliaedPrice);
   if (sma_h == INVALID_HANDLE )
   {
       Print ( "Не удалось инициализировать индикатор Moving Average" );
       return INIT_FAILED ;
   } 
   
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| 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[])
{
   if (rates_total < 4 ) return ( 0 ); //индикатор. проверку и расчёт количества прощитываемых баров(если rates_total меньше 4 баров то ни какого вычесления и отрисовки не делаем )
   
   int limit = rates_total - prev_calculated;
   if (limit > 1 )
   {
      limit = rates_total - 2 ;
       ArrayInitialize (MAOSBuffer, 0 );
       ArrayInitialize (ColorsBuffer, 4 );
       ArrayInitialize (FastBuffer, 0 );
       ArrayInitialize (SlowBuffer, 0 );
   }
   
   int count =(limit > 1 ? rates_total : 1 ),
   copied = 0 ;
   
   copied = CopyBuffer (fma_h, 0 , 0 , count, FastBuffer);
   
   if   (copied != count)
       return ( 0 );
       
   copied = CopyBuffer (sma_h, 0 , 0 , count, SlowBuffer);
   
   if   (copied != count)
       return ( 0 );


   for ( int i=limit; i>= 0 ; i--)
   {
       MAOSBuffer[i]   = FastBuffer[i] - SlowBuffer[i];
       ColorsBuffer[i] = (MAOSBuffer[i] > 0 ? (MAOSBuffer[i] > MAOSBuffer[i= 1 ] ? 0 : 1 ) : MAOSBuffer[i] < 0 ? (MAOSBuffer[i] < MAOSBuffer[i+ 1 ] ? 2 : 3 ) : 4 );
   }

   return (rates_total);
}
//+------------------------------------------------------------------+
파일:
MaOsC_sv.mq5  11 kb
MaOsC_dr.ex5  11 kb
 
MatveySt # :


1) 둘 다 sma_h여야 합니다.

   fma_h = iMA ( NULL , PERIOD_CURRENT , FastPeriod, 0 , MaMethod, MaAppliaedPrice);
   if (fma_h == INVALID_HANDLE )
   {
       Print ( "Не удалось инициализировать индикатор Moving Average" );
       return INIT_FAILED ;
   }
   
   fma_h = iMA ( NULL , PERIOD_CURRENT , SlowPeriod, 0 , MaMethod, MaAppliaedPrice);
   if ( sma_h == INVALID_HANDLE )
   {
       Print ( "Не удалось инициализировать индикатор Moving Average" );
       return INIT_FAILED ;
   } 

2) "+"를 입력

   for ( int i=limit; i>= 0 ; i--)
   {
       MAOSBuffer[i]   = FastBuffer[i] - SlowBuffer[i];
       ColorsBuffer[i] = (MAOSBuffer[i] > 0 ? (MAOSBuffer[i] > MAOSBuffer[i = 1 ] ? 0 : 1 ) : MAOSBuffer[i] < 0 ? (MAOSBuffer[i] < MAOSBuffer[i+ 1 ] ? 2 : 3 ) : 4 );
   }
 
Tretyakov Rostyslav # :

1) 둘 다 sma_h여야 합니다.

2) "+"를 입력

감사해요!!! 모든 것이 작동했습니다.