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

 
Vitaly Muzichenko :
Bunu şöyle yapardım:

Alexey Kozitsyn :
Önceden, farklı yapardım.

Öneriler için teşekkürler - araştırıyorum. Sadece yeni diziler üretmemek istedim - ArrayCopy'nin kodumda neden düzgün çalışmadığını anlamıyorum?

 

İşlevdeki son değişkeni - kopyalanacak öğelerin sayısını - belirtmeyi unuttum. Varsayılan olarak, dizinin tamamı kopyalanır (count=WHOLE_ARRAY).

ArrayCopy (summDelta,summDelta,i-CalcZrero,i, 1 );
 
-Aleks- :

Öneriler için teşekkürler - araştırıyorum. Sadece yeni diziler üretmemek istedim - ArrayCopy'nin kodumda neden düzgün çalışmadığını anlamıyorum?

Bilmiyorum, hangi seçeneğin daha hızlı çalışacağını bilmiyorum. Sonuçta, dizide ne kadar çok sıfır değerine sahipseniz, diziyi ne kadar sık birbirine kopyalayacaksınız .
 
Alexey Kozitsyn :
Bilmiyorum, hangi seçeneğin daha hızlı çalışacağını bilmiyorum. Sonuçta, dizide ne kadar çok sıfır değerine sahipseniz, diziyi ne kadar sık birbirine kopyalayacaksınız.

Orada yalnızca son bir değer kopyalanır. Hızı bilmiyorum, kontrol etmedim - şimdilik sadece kodun çok büyük olmamasını istiyorum - anlamak için ....

 
Здравствуйте уважаемые форумчане. Попытался совместить два индикатора в одном. Но рисует только одну линию. Подскажите пожалуйста где надо подправить код.


//---- номер версии индикатора
#property version   "1.00"
//---- отрисовка индикатора в главном окне
#property indicator_chart_window
#property indicator_chart_window

//---- количество индикаторных буферов
#property indicator_buffers 2
//---- использовано всего одно графическое построение
#property indicator_plots   2
//+-----------------------------------+
//|  объявление констант              |
//+-----------------------------------+
#define RESET 0 // Константа для возврата терминалу команды на пересчёт индикатора
//+-----------------------------------+
//|  Параметры отрисовки индикатора   |
//+-----------------------------------+
//---- отрисовка индикатора в виде линии
#property indicator_type1   DRAW_LINE
#property indicator_type2   DRAW_LINE
//---- в качестве цвета бычей линии индикатора использован красный цвет
#property indicator_color1 Red
#property indicator_color2 Yellow

//---- линия индикатора - непрерывная кривая
#property indicator_style1  STYLE_SOLID
#property indicator_style2  STYLE_SOLID
//---- толщина линии индикатора равна 3
#property indicator_width1  3
#property indicator_width2  3
//---- отображение лэйбы индикатора
#property indicator_label1  "Geo_ShowOpenMonthLevel"
#property indicator_label2  "Geo_ShowOpenWeekLevel"
//+-----------------------------------+
//|  ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА     |
//+-----------------------------------+
input int Shift=0; // сдвиг индикатора по горизонтали в барах
//+-----------------------------------+
//---- индикаторный буфер
double IndBuffer1[];
double IndBuffer2[];
//---- Объявление целых переменных начала отсчёта данных
int min_rates_total;
//+------------------------------------------------------------------+    
//| Geo_ShowOpenDayLevel indicator initialization function           |
//+------------------------------------------------------------------+  
void OnInit()
  {
//---- Инициализация переменных начала отсчёта данных
   min_rates_total=3;
//---- превращение динамического массива в индикаторный буфер
   SetIndexBuffer(0,IndBuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,IndBuffer2,INDICATOR_DATA);
//---- осуществление сдвига индикатора по горизонтали на Shift
   PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
   PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//---- осуществление сдвига начала отсчёта отрисовки индикатора
//   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,2);
//   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,2);
//---- установка значений индикатора, которые не будут видимы на графике
//   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- индексация элементов в буфере как в таймсерии
   ArraySetAsSeries(IndBuffer1,true);
   ArraySetAsSeries(IndBuffer2,true);
//---- инициализации переменной для короткого имени индикатора
   string shortname;
   StringConcatenate(shortname,"Geo_ShowOpenDayLevel( Shift = ",Shift,")");
//--- создание имени для отображения в отдельном подокне и во всплывающей подсказке
   IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- определение точности отображения значений индикатора
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//---- завершение инициализации
  }
//+------------------------------------------------------------------+  
//| Geo_ShowOpenDayLevel 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<min_rates_total||Period()>PERIOD_D1) return(RESET);

//---- Объявление целых переменных
   int limit,bar;
//---- Объявление переменных с плавающей точкой  
   double DOpen[1];
   datetime DTime[1];
   static uint LastCountBar;

//---- расчёты необходимого количества копируемых данных и
//стартового номера limit для цикла пересчёта баров
   if(prev_calculated>rates_total || prev_calculated<=0)// проверка на первый старт расчёта индикатора
     {
      limit=rates_total-min_rates_total-1; // стартовый номер для расчёта всех баров
      LastCountBar=rates_total;
     }
   else limit=int(LastCountBar)+rates_total-prev_calculated; // стартовый номер для расчёта новых баров

//---- индексация элементов в массивах как в таймсериях  
   ArraySetAsSeries(time,true);

//---- Основной цикл расчёта индикатора
   for(bar=limit; bar>=0 && !IsStopped(); bar--)
     {
      LastCountBar=bar;
      //---- обнулим содержимое индикаторных буферов до расчёта
      IndBuffer1[bar]=EMPTY_VALUE;
      IndBuffer2[bar]=EMPTY_VALUE;
      //---- копируем вновь появившиеся данные в массив
      if(CopyTime(Symbol(),PERIOD_MN1,time[bar],1,DTime)<=0) return(RESET);
      if(CopyTime(Symbol(),PERIOD_W1, time[bar],1,DTime)<=0) return(RESET);
      if(time[bar]>=DTime[0] && time[bar+1]<DTime[0])
        {
         //---- копируем вновь появившиеся данные в массив
         if(CopyOpen(Symbol(),PERIOD_MN1,time[bar],1,DOpen)<=0) return(RESET);
         if(CopyOpen(Symbol(),PERIOD_W1, time[bar],1,DOpen)<=0) return(RESET);
         //---- Загрузка полученных значений в индикаторные буферы
         IndBuffer1[bar]=DOpen[0];
         IndBuffer2[bar]=DOpen[0];
        }

      if(IndBuffer1[bar+1]!=EMPTY_VALUE && IndBuffer1[bar]==EMPTY_VALUE) IndBuffer1[bar]=IndBuffer1[bar+1];
      if(IndBuffer2[bar+1]!=EMPTY_VALUE && IndBuffer2[bar]==EMPTY_VALUE) IndBuffer2[bar]=IndBuffer2[bar+1];
     }
//----
  return(rates_total);
  }
 
Merhaba. Lütfen bana MQL4 danışman kodunda bir emir açmak için böyle bir kuralın nasıl yazılacağını söyleyin, piyasada belirli bir sihirle bir emir olmalı, böyle bir emir yoksa, danışman ana fikrine göre hiçbir şey açmaz. algoritma. bu sihir değişkenlerde kayıtlıdır.
 
var58 :
Merhaba. Lütfen bana MQL4 danışman kodunda bir emir açmak için böyle bir kuralın nasıl yazılacağını söyleyin, piyasada belirli bir sihirle bir emir olmalı, böyle bir emir yoksa, danışman ana fikrine göre hiçbir şey açmaz. algoritma. bu sihir değişkenlerde kayıtlıdır.
Tüm piyasa emirlerini ve onların büyüsünü bir döngü içinde kontrol edersiniz. Böyle bir sihirle bir emir varsa, o zaman ...
 
Artyom Trishkin :
Tüm piyasa emirlerini ve onların büyüsünü bir döngü içinde kontrol edersiniz. Böyle bir sihirle bir emir varsa, o zaman ...

Bu döngünün kodda nasıl yazıldığını söyler misiniz?

 
var58 :

Bu döngünün kodda nasıl yazıldığını söyler misiniz?

Biraz sonra. Cep telefonumdan yazıyorum.
 
Artyom Trishkin :
Biraz sonra. Cep telefonumdan yazıyorum.
Teşekkür ederim.
Neden: