Форум трейдеров » Торговые роботы, советники, индикаторы » Язык MQL4 для "чайников"
+ Подписаться
Страница 14 из 16 ПерваяПервая ... 41213141516 ПоследняяПоследняя
  1. 1,331
    Комментарии
    40
    Темы
    1331
    Репутация Pro
     
    Мастер форумных наук

    5 Медалей
    В приведенном выше коде необходимо слишком много места для хранения огромнейших массивов.
    Я решил упростить код и уменьшить необходимый объем для хранения информации.
    В моем коде необходимо хранить данные лишь для одного одномерного массива . При каждом новом значении массива нужно будет проверить его на необходимое условие и произвести обработку.
    Вообщем, попробуйте его в работе. Если что, звоните......:D



    int start()
    {
    //----
    int N=50; // количество элементов массива
    int k[50];
    int i=N;
    while (i>0)
    {
    k[i]=k[i]+1;
    if (k[i]==1)
    {
    //здесь проверка условий и необходимая обработка
    i=N;
    }
    else
    {
    k[i]=0; i=i-1;
    }
    }
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
  2. 776
    Комментарии
    6
    Темы
    781
    Репутация Pro
    Аватар для fidel_fx  
    В начале пути

    3 Медалей
    Цитата Сообщение от alex_smith Посмотреть сообщение
    ...
    Попробовал скинуть в файл и оказалось, что не работает что то. В файл сохраняются только нолики. Может я чего не понимаю?

    Код:
    int count;
    //+------------------------------------------------------------------+
    //| script program start function                                    |
    //+------------------------------------------------------------------+
    int start()
      {
    //----
       
       double preset[][];
          int Kvat=512;
          int Kvar=9;
       
       int handle=FileOpen("Stat result", FILE_CSV|FILE_WRITE, '\t');
    
       for (int i=0;i<Kvat;i++) {
        int kk=i;
        for (int j=0;j<=Kvar;j++) {
         preset[i][j]=kk%2;
         kk=kk/2;
         
         FileWrite(handle, count, "   " ,preset[0][0], preset[0][1], preset[0][2], preset[1][0], preset[1][1], preset[1][2], preset[2][0], preset[2][1], preset[2][2]);
         
         count+=1;
        }
        }
    //----
       return(0);
  3. 2,151
    Комментарии
    6
    Темы
    2187
    Репутация Pro
    Аватар для SPace  
    Мастер форумных наук

    4 Медалей
    Ребят, перебор всех возможных сочетаний единиц и нолей в числе - это не что иное, как двоичное представление этого самого числа вариантов (которое как раз и равно 2^[строки*столбцы]). И наиболее простой способ их всех пролопатить - поставить преобразование десятичных чисел в двоичный код и вперёд, начиная с единицы...:fist:
  4. 1,331
    Комментарии
    40
    Темы
    1331
    Репутация Pro
     
    Мастер форумных наук

    5 Медалей
    Правильно. И я это сделал в своем коде.
    Алгоритм моего кода прост до безобразия. Берется вариант со всеми нулями и потом просто прибавляется единица. Далее выполняется необходимая обработка. После чего опять прибавляется единица и снова обработка и тд и тп до всех единиц в массиве.
  5. 243
    Комментарии
    13
    Темы
    247
    Репутация Pro
    Аватар для alex_smith  
    В начале пути

    4 Медалей
    Действительно, если нужен только перебор, то хранить все варианты избыточно, можно сделать так:

    int preset[];
    //+------------------------------------------------------------------+
    //| script program start function |
    //+------------------------------------------------------------------+
    int start()
    {
    //----
    int Kvar=9;
    int Kvat=MathPow(2,Kvar);
    ArrayResize(preset,Kvar);



    for (int i=0;i<Kvat;i++) {
    int kk=i;
    for (int j=0;j<Kvar;j++) {
    preset[j]=kk%2;
    kk=kk/2;
    }
    //Здесь Ваш код
    Print (preset[0],preset[1],preset[2],preset[3],preset[4],preset[5],preset[6],preset[7],preset[8]);
    //
    }
    //----
    return(0);
    }
  6. 776
    Комментарии
    6
    Темы
    781
    Репутация Pro
    Аватар для fidel_fx  
    В начале пути

    3 Медалей
    alex_smith, Dark67, SPace, Silem, спасибо большое:beer2: Всё теперь работает.
  7. 55
    Комментарии
    6
    Темы
    55
    Репутация Pro
     
    В начале пути

    3 Медалей
    Подскажите, как правильно написать скрипт, показывающий значение индикатора (например, MACD) на определенную дату и время в прошлом.
    Ниже код, который показывает значение MACD гистограммы 10 баров назад. Но так неудобно.
    И показывается только 4 знака после запятой, а на индикаторе наложенном на график - 5.
    Код:
    //+------------------------------------------------------------------+
    //| script program start function                                    |
    //+------------------------------------------------------------------+
    int start()
      {
       double M = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,10);
       Alert(M);
    
       return(0);
      }
    //+------------------------------------------------------------------+
  8. 1,294
    Комментарии
    16
    Темы
    1297
    Репутация Pro
     
    Мастер форумных наук

    5 Медалей
    С помощью функции iBarShift()
    Я так искал..даёт смещение (индекс) бара
    Например организовывал цикл
    for(int i=iBarShift(NULL,0,dbegin);i>3;i--) // от даты начала до 5-го с конца
    А у тебя вместо 10 поставишь iBarShift()
    Хелп глянь, там всё понятно расписано.
  9. 55
    Комментарии
    6
    Темы
    55
    Репутация Pro
     
    В начале пути

    3 Медалей
    Все нашел, спасибо!
    И насчет кол-ва знаков после запятой - DoubleToStr().
  10. 145
    Комментарии
    11
    Темы
    145
    Репутация Pro
     
    В начале пути

    4 Медалей
    Уважаемые помогите пожалуста составить код в который бы возвращал минимальное Лоу и максимальное Хай за последние 6 баров или 3 часа последней(предыдущей) сесии и макс и минимум все сесии. посоветуйте что - нибудь!

Вверх
РегистрацияX

чтобы писать, читать, комментировать