Ошибки, баги, вопросы - страница 1579

Sergey Gritsay:

G попробуйте так

Спасибо, попробую. Но, если не принтуется переменная ATR_D_1000, то как можно ожидать, что она будет записана?
-Aleks-:
Спасибо, попробую. Но, если не принтуется переменная ATR_D_1000, то как можно ожидать, что она будет записана?
D Все принтуется. Скроее всего проблема в подкачке истории, так как 1000 дневных баров довольно огромен, индикатор долго расчитывается при первом запуске, потом все нормуль 
0       18:17:32.387    Script test_1 USDCHF,H1: loaded successfully
0       18:17:35.135    test_1 USDCHF,H1 inputs: Start=1463014800; End=1463025600; 
0       18:17:40.219    test_1 USDCHF,H1: initialized
0       18:17:55.643    test_1 USDCHF,H1: ATR_D_1000=0.0
0       18:17:55.643    test_1 USDCHF,H1:  symbolName=USDCHF ATR_D_1001=0.0
0       18:17:55.643    test_1 USDCHF,H1: uninit reason 0
0       18:17:55.644    Script test_1 USDCHF,H1: removed
0       18:20:26.749    Script test_1 USDCHF,H1: loaded successfully
0       18:20:33.592    test_1 USDCHF,H1: initialized
0       18:20:33.593    test_1 USDCHF,H1: ATR_D_1000=0.008878300000000023
0       18:20:33.593    test_1 USDCHF,H1:  symbolName=USDCHF ATR_D_1001=0.008878300000000023
0       18:20:33.593    test_1 USDCHF,H1: uninit reason 0
0       18:20:33.594    Script test_1 USDCHF,H1: removed
0       18:21:48.047    Script test_1 USDCHF,Daily: loaded successfully
0       18:21:53.155    test_1 USDCHF,Daily: initialized
0       18:21:53.155    test_1 USDCHF,Daily: ATR_D_1000=0.008468200000000019
0       18:21:53.155    test_1 USDCHF,Daily:  symbolName=USDCHF ATR_D_1001=0.008468200000000019
0       18:21:53.156    test_1 USDCHF,Daily: uninit reason 0
0       18:21:53.157    Script test_1 USDCHF,Daily: removed
0       18:22:13.167    Script test_1 USDCHF,H4: loaded successfully
0       18:22:19.313    test_1 USDCHF,H4: initialized
0       18:22:19.313    test_1 USDCHF,H4: ATR_D_1000=0.008468200000000019
0       18:22:19.313    test_1 USDCHF,H4:  symbolName=USDCHF ATR_D_1001=0.008468200000000019
0       18:22:19.313    test_1 USDCHF,H4: uninit reason 0
0       18:22:19.314    Script test_1 USDCHF,H4: removed
0       18:22:26.488    Script test_1 USDCHF,H1: loaded successfully
0       18:22:32.343    test_1 USDCHF,H1: initialized
0       18:22:32.344    test_1 USDCHF,H1: ATR_D_1000=0.008468200000000019
0       18:22:32.344    test_1 USDCHF,H1:  symbolName=USDCHF ATR_D_1001=0.008468200000000019
0       18:22:32.344    test_1 USDCHF,H1: uninit reason 0
0       18:22:32.345    Script test_1 USDCHF,H1: removed
Sergey Gritsay:
D Все принтуется. Скроее всего проблема в подкачке истории, так как 1000 дневных баров довольно огромен, индикатор долго расчитывается при первом запуске, потом все нормуль 
А код какой, можете скрипт приложить? А то я не могу с места сдвинуться, спасибо.
-Aleks-:
А код какой, можете скрипт приложить? А то я не могу с места сдвинуться, спасибо.
такой же как и у вас
//+------------------------------------------------------------------+
//|                                                       test_1.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {

   double ATR_D_1000=0;

   string symbolName=_Symbol;

   ATR_D_1000=iATR(symbolName,1440,1000,1);

   Print("ATR_D_1000=",ATR_D_1000);

   Print(" symbolName=",symbolName," ATR_D_1001=",iATR(symbolName,1440,1000,1));
  }
//+------------------------------------------------------------------+

EX5 loading failed (при выполнении)

typedef void (*fn)();
fn GP( fn f ) { return f; }
void OnStart2() { Print( __FUNCSIG__ ); }
void OnStart()
{
        Print( GP( OnStart2 ));
}

а так - нормально

void OnStart()
{
        Print( GP( OnStart ));
}
если функция ордер тикет возвращает значение типа инт то что будет когда мы упрёмся в потолок до которого рукой подать, сейчас например 9-ти значные номера тикетов есть, потолок 10 знаков? или брокер сбросит счётчик ордеров?
Sergey Gritsay:
такой же как и у вас
Спасибо - обнаружил ошибку в коде.
[Удален]

На главной странице сайта отображаются HTML символы в тексте. Хром 64 Win 10 64.

 

Ошибка компиляции

template<typename T>
class A {
public:
        A( T t1 ) : t( t1 ) {}
        T operator[]( int ) { return t; }
        T t;
};
typedef void (*fn)();
void OnStart()
{
        A<fn> a( OnStart );
        a.operator[]( 0 )(); //нормально
        a[            0 ](); //error: ')' - expression expected
}

ArrayIsSeries() всегда выдаёт false в этом скрипте:

//+------------------------------------------------------------------+
//|                                                     TestCopy.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property script_show_inputs

enum enumYN
  {
   enYes=1, // Да
   enNo=0,  // Нет
  };

//--- input parameters
input int Search_Period=10;   // Количество копируемых свечей
int searchPeriod=(Search_Period<1)?1:Search_Period;
input int Delta=2;            // Количество пунктов допуска
int delta=(Delta<0)?0:Delta;
input enumYN AsSeries=enYes;  // Массив array как таймсерия
MqlRates array[];             // Массив структур для копирования Open, High, Low, Close, Time
  
struct DataCandle             // Структура для хранения всех совпадений
  {
   int number_matched;           // Количество совпадений
   MqlRates reference_candle;    // Данные эталонной свечи
   MqlRates matched_candles[];   // Массив свечей, совпадающих с эталонной по нужному критерию 
  };
  DataCandle dataCandle[];    // Массив структур данных свечей и их совпадений
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int copy_bars=(int)fmin(Search_Period,Bars(Symbol(),Period()));   // количество копируемых свечей
   int copied=CopyRates(Symbol(),PERIOD_CURRENT,1,copy_bars,array);  // копируем данные
   if(copied>0) {                                                    // если скопировали
      ArraySetAsSeries(array,AsSeries);                              // задаём массив как таймсерию или нет
      ArrayResize(dataCandle,copied);                                // задаём размер структуры равным числу скопированных данных
      ZeroMemory(dataCandle);                                        // Обнуляем данные в структуре
      //--- основной цикл по "эталонным" свечам в массиве array. Их параметры будем искать в доп. цикле
      for(int i=0; i<copy_bars-1; i++) {                             // цикл по скопированным данным от начала до "на один меньше размера массива"
         dataCandle[i].reference_candle.high=array[i].high;          // ищем этот high
         dataCandle[i].reference_candle.low=array[i].low;            // запомнили low для сравнения
         dataCandle[i].reference_candle.time=array[i].time;          // запомнили time для вывода в журнал
         //--- поиск совпадений с эталонной свечой, индексируемой индексом основного цикла i
         int size=0;                                                 // размер массива совпадающих свечей
         ArrayResize(dataCandle[i].matched_candles,size);            // Размер массива совпадений в ноль
         dataCandle[i].number_matched=size;                          // Инициализируем количество совпадений нулём
         //--- теперь ищем совпадения по high свечей в цикле j с high эталонной свечи с индексом i
         for(int j=0; j<copy_bars; j++) {                            // в цикле от i+1 до copy_bars
            if(j==i) continue;                                       // пропустим свечу "саму себя"
            //--- если совпадают high эталонной свечи (i) и свечи с индексом j (с допуском на величину Point)
            if(NormalizeDouble(delta*Point()-fabs(array[i].high-array[j].high),Digits())>=0) {
               size++;                                               
               ArrayResize(dataCandle[i].matched_candles,size);            // увеличим размер массива совпадающих свечей
               dataCandle[i].number_matched=size;                          // запишем количество совпадений
               dataCandle[i].matched_candles[size-1].high=array[j].high;   // запишем в массив high совпадающей свечи
               dataCandle[i].matched_candles[size-1].low=array[j].low;     // запишем в массив low совпадающей свечи
               dataCandle[i].matched_candles[size-1].time=array[j].time;   // запишем в массив время совпадающей свечи
               //Print("Время свечи ",i," :",TimeToString(dataCandle[i].reference_candle.time=array[i].time),", high=",DoubleToString(dataCandle[i].reference_candle.high=array[i].high,Digits()),". Совпадение со свечой ",TimeToString(dataCandle[i].matched_candles[size-1].time=array[j].time),", её high ",DoubleToString(dataCandle[i].matched_candles[size-1].high=array[j].high,Digits()),". Совпадений: ",(string)dataCandle[i].number_matched);
               }
            }
         }
      }

   //--- Посмотрим чего понаписали в массивы
   Alert("Array is series: ",ArrayIsSeries(array),
         "\ntime array[0]: ",TimeToString(array[0].time,TIME_DATE|TIME_MINUTES),
         "\ntime array[",string(searchPeriod-1),"]: ",TimeToString(array[ArraySize(array)-1].time,TIME_DATE|TIME_MINUTES));
   for(int i=0; i<ArraySize(dataCandle)-1; i++) {
      string refs_txt="";
      string matched_txt="";
      refs_txt="Свеча "+IntegerToString(i,2,'0')+": время "+TimeToString(dataCandle[i].reference_candle.time)+", high: "+DoubleToString(dataCandle[i].reference_candle.high,Digits())+" имеет совпадений: "+(string)dataCandle[i].number_matched+" шт. ";
      if(dataCandle[i].number_matched>0) {
         for(int j=0; j<ArraySize(dataCandle[i].matched_candles); j++) {
            matched_txt="Совпадение "+IntegerToString(j+1)+": "+TimeToString(dataCandle[i].matched_candles[j].time)+", high: "+DoubleToString(dataCandle[i].matched_candles[j].high,Digits());
            }
         }
      Print(refs_txt,matched_txt);
      }
  }
//+------------------------------------------------------------------+