Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 534

 
AlexeyVik:

Используй это https://docs.mql4.com/ru/indicators/imaonarray

Посмотрите пожалуйста код, правильно ли так будет ?

//+------------------------------------------------------------------+
//|Определяем, можно ли торговать исходя из волатильности            |
//+------------------------------------------------------------------+

bool Volatilnost(int ATRTimeframe, int ATRPeriod, int PerShortMA, int PerLongMA, int ma_method)
   {
   bool  res = false;
   double   atr_curr[101];
   double   iatr_curr;
   
   ArraySetAsSeries(atr_curr,true);
   
   for(int i=100; i>=0; i--)  
   {
   atr_curr[i]=iATR( NULL, ATRTimeframe, ATRPeriod, i) ;
   if(i==1){iatr_curr=atr_curr[i];}
   }
   double   ShortMA=iMAOnArray( atr_curr, 0, PerShortMA, 0, ma_method, 1); 
   double   LongMA =iMAOnArray( atr_curr, 0, PerLongMA, 0, ma_method,  1); 

   if (ShortMA < LongMA)res = false;// Не работаем
         else res = true;
       
   return(res);
   }
 
AlexeyVik:
Сейчас тебе начнут объяснять, что угол зависит от масштабирования графика и это сделать невозможно...
Но если возьмёшь не угол, а только тангенс этого угла, то вполне можешь выполнить задуманное.

Интересно,а как то более подробно можно узнать что это такое и как его определить,знаю в геометрии в школе учили тангенсы и катангенсы,но увы не помню.)У фреша спрашивал на форуме,но так и не получил конкретного ответа.
 

Если в Яндексе забанили, можно попользоваться гуглом.

А в кратце, тангенс угла в прямоугольном треугольнике, есть отношение противолежащего катета к прилежащему.

Переводя это в ситуацию на графике МТ, получаем - противолежащий катет будет равен пунктам (в шт.) а прилежащий в барах (тоже шт.)

Пример:

Открытие EURUSD 6.03 1.3732 открытие 7:03 1.3860 всего 128 пунктов. На M1 1440 баров tan = 128/1440=0.08889

В принципе это уравнение используется в функции ObjectGetValueByShift()

 
А использовать сторонний сервер возможно? у меня просто подключен этот http://buy.fineproxy.org/
 
Объясните пожалуйста, как распихать данные из таблицы (*.csv) в трёх-мерный статический массив.
В первом столбце таблицы - индекс по первому измерению массива,
Во втором - индекс по второму измерению массива,
В третьем и далее столбцах - сами значения по третьему измерению массива.
void AAA()
   {
    int       Handle;                                          // Файловый описатель
    string    File_Name = "AAA.csv";                           // Имя открываемого файла

    string    str_1 = "";                                      //  1 Номер индекса по первому измерению
    string    str_2 = "";                                      //  2 Номер индекса по второму измерению
    string    str_3 = "";                                      //  3 Значение
    string    str_4 = "";                                      //  4 Значение
    string    str_5 = "";                                      //  5 Значение

    Handle=FileOpen(File_Name, FILE_READ, ";");                // Открытие файла
    
    while(FileIsEnding(Handle)==false)                         // До тех пор, пока файловый...
        {                                                      // ...указатель не в конце файла
         // Чтение данных из строки до файлового разделителя
         str_1 = FileReadString(Handle);                       //  1 Номер индекса по первому измерению
         str_2 = FileReadString(Handle);                       //  2 Номер индекса по второму измерению
         str_3 = FileReadString(Handle);                       //  3 Значение
         str_4 = FileReadString(Handle);                       //  4 Значение
         str_5 = FileReadString(Handle);                       //  5 Значение
         
         if(FileIsEnding(Handle)==true)                        // Файловый указатель в конце файла
              break;                                           // Выход из цикла чтения

         ????????????????????????????????????????????????????
        }
    FileClose(Handle);                                         // Закрываем файл
    return;                                                    // Выход из функции
   }
 
Leo59:
Объясните пожалуйста, как распихать данные из таблицы (*.csv) в трёх-мерный статический массив.
В первом столбце таблицы - индекс по первому измерению массива,
Во втором - индекс по второму измерению массива,
В третьем и далее столбцах - сами значения по третьему измерению массива.



Если для анализа в самом экселе, то сводная таблица.

Ну или покажите часть данных, похоже придется завести вспомогательные строковые массивы которые будут сопоставлять индекс-значение.

 
splxgf:


.... похоже придется завести вспомогательные строковые массивы которые будут сопоставлять индекс-значение.

void AAA()
   {
    int       Handle;                                          // Файловый описатель
    string    File_Name = "AAA.csv";                           // Имя открываемого файла

    string    str_1 = "";                                      //  1 Номер индекса по первому измерению
    string    str_2 = "";                                      //  2 Номер индекса по второму измерению
    string    str_3 = "";                                      //  3 Значение
    string    str_4 = "";                                      //  4 Значение
    string    str_5 = "";                                      //  5 Значение

    Handle=FileOpen(File_Name, FILE_READ, ";");                // Открытие файла
    
    while(FileIsEnding(Handle)==false)                         // До тех пор, пока файловый...
        {                                                      // ...указатель не в конце файла
         // Чтение данных из строки до файлового разделителя
         str_1 = FileReadString(Handle);                       //  1 Номер индекса по первому измерению
         str_2 = FileReadString(Handle);                       //  2 Номер индекса по второму измерению
         str_3 = FileReadString(Handle);                       //  3 Значение
         str_4 = FileReadString(Handle);                       //  4 Значение
         str_5 = FileReadString(Handle);                       //  5 Значение
         
         if(FileIsEnding(Handle)==true)                        // Файловый указатель в конце файла
              break;                                           // Выход из цикла чтения

// Завели строковый массив

         // Преобразование типов данных и запись в масссив
         ArrayResize(Mas1, SizeMas1+1);                        // Увеличили размер массива Mas1

         Mas1[SizeMas1][0] = StrToInteger(str_1);              //  0 Номер индекса по первому измерению
         Mas1[SizeMas1][1] = StrToInteger(str_2);              //  1 Номер индекса по второму измерению
         Mas1[SizeMas1][2] = StrToDouble(str_3);               //  2 Значение
         Mas1[SizeMas1][3] = StrToDouble(str_4);               //  3 Значение
         Mas1[SizeMas1][4] = StrToDouble(str_5);               //  4 Значение
         SizeMas1++;                                           // Новый размер массива Mas1

// Что дальше  ????????????????????????????????????????????????????

        }
    FileClose(Handle);                                         // Закрываем файл
    return;                                                    // Выход из функции
   }
 

Как удалить все объекты например типа OBJ_ARROW_RIGHT_PRICE ?

Команда ObjectsDeleteAll(OBJ_ARROW_RIGHT_PRICE) не удаляет ! даже после смены таймфрейма (чтобы перерисовать весь график принудительно)

Написал простой скрипт, в комментах что пишет на экране:

Alert("obj_arrow_right_price=",OBJ_ARROW_RIGHT_PRICE) ; // =36

ObjectCreate("MyArrow",OBJ_ARROW_RIGHT_PRICE,0,Time[1],Open[1]) ; // создал OBJ_ARROW_RIGHT_PRICE

Alert( "objectTipe=", ObjectType("MyArrow")," КОД СТРЕЛКИ=",ObjectGet("MyArrow",OBJPROP_ARROWCODE) ) ; // кошмар "objecType=" =22, не понял почему не 36 как в первой строке ??

ResetLastError() ;

Alert("script delete arrow right price=",ObjectsDeleteAll(OBJ_ARROW_RIGHT_PRICE)," lastError=",GetLastError() ) ; // удаленных объектов =0, код ошибки =0

ставлю эксперимент дальше пишу: ObjectsDeleteAll(22) ; // и опять удаленных объектов =0

 
VoDyaMon:

Как удалить все объекты например типа OBJ_ARROW_RIGHT_PRICE ?


Прочитать еще раз справку:

ObjectsDeleteAll

Удаляет все объекты с указанным типом и в указанном подокне графика.

int  ObjectsDeleteAll(
   int   window=EMPTY,      // индекс окна
   int   type=EMPTY         // тип объекта для удаления
   );

Если объекты в главном окне графика:

ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE);
 
isn-88:


Прочитать еще раз справку:

ObjectsDeleteAll

Удаляет все объекты с указанным типом и в указанном подокне графика.

Если объекты в главном окне графика:

Вот только не нужно советовать глупые варианты. Эта команда удалит вообще все объекты с графика.
Причина обращения: