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

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

То что дальше было написано забудь. Объяви массив соответствующего типа на уровне глобальных переменных arr[][][3] размерность второго измерения сам определи.

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 Значение
         
// А здесь заполнение массива
arr[str_1][str_2][0] = str_3;
arr[str_1][str_2][1] = str_3;
arr[str_1][str_2][2] = str_4;

         if(FileIsEnding(Handle)==true)                        // Файловый указатель в конце файла
              break;                                           // Выход из цикла чтения

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

Ну примерно так. И вероятно потребуется перевод строковых индексов в целые числа.

 
AlexeyVik:

То что дальше было написано забудь. Объяви массив соответствующего типа на уровне глобальных переменных arr[][][3] размерность второго измерения сам определи.

Ну примерно так. И вероятно потребуется перевод строковых индексов в целые числа.


СПАСИБО ОГРОМНОЕ!!!! Когда мозг кипит - "слепнешь" и не видишь простых и очевидных вещей. Самое интересное, это то, что знаешь - решение простое, "как три копейки", но увы, перед глазами пелена.
Ещё раз СПАСИБО!!!!!
 
artmedia70:
Вот только не нужно советовать глупые варианты. Эта команда удалит вообще все объекты с графика.

Не согласен с Вами!

Был вопрос:

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

Решение:

ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE); //удалить все объекты типа "Правая ценовая метка" в главном окне графика

И чем же решение глупое?

 
isn-88:

Не согласен с Вами!

Был вопрос:

Решение:

И чем же решение глупое?

Тем, что она удалит ВСЕ объекты. Даже те, которые НЕ принадлежат советнику/индикатору. А если человек долгое время делал разметку свою на чарте? А потом запустил этот код в стороннем индикаторе? Как, и что он скажет потом об авторе сего доброго кода?
 
artmedia70:
Как, и что он скажет потом об авторе сего доброго кода?


Люди добрые. Скажут все что думают
 
Vinin:

Люди добрые. Скажут все что думают
Да, Вить... люди злые в последнее время... Печально.
 
isn-88:

Не согласен с Вами!

Был вопрос:

Решение:

И чем же решение глупое?

собственно все начиналось с команды: ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE);

а потом другой вариант попробовал ObjectsDeleteAll(OBJ_ARROW_RIGHT_PRICE);

Уважаемый почитайте справку :)

Я не понимаю почему мой индюк с указанными командами корректно работает в Альфа-Форексе, а в Саксо банке объекты уже не удаляются.

Потом начались эксперименты со скриптом и скрипт перестал удалять объекты во всех терминалах.

 

Всем салют !

Такая странность тестера наблюдается.

После закрытия ордеров 152, 153, 158 и 159 получается не правильная прибыль (как будто тестер рассчитал неверно). Ордера "висели" несколько месяцев как видно из таблицы. Причем просадка отражена в таблице правильно а на графике ее почему то не видно.

В чем может быть дело ?


EURUSD (Euro vs US Dollar)

15 Минут (M15) 2012.01.01 23:00 - 2014.03.07 22:59 (2012.01.01 - 2014.03.08)

















1000.00



Спред

Текущий (12)

1418.73

Общая прибыль

2045.28

Общий убыток

-626.55

3.26

Матожидание выигрыша

2.41



419.34

Максимальная просадка

834.91 (58.98%)

Относительная просадка

58.98% (834.91)


















test

Время

Тип

Ордер

Объём

Цена

S / L

T / P

Прибыль

Баланс

372

2012.04.30 11:00

buy

151

0.01

1.32193

0.00000

1.32472


373

2012.05.01 04:45

t/p

151

0.01

1.3247234

0.00000

1.32472

2.75

1402.41

374

2012.05.01 15:00

buy

152

0.01

1.32262

0.00000

1.32713


375

2012.05.02 07:45

t/p

142

0.01

1.31949

0.00000

1.31949

-4.40

1398.00

376

2012.05.02 07:45

t/p

143

0.01

1.31949

0.00000

1.31949

0.95

1398.96

377

2012.05.02 07:45

t/p

149

0.02

1.31949

0.00000

1.31949

12.49

1411.44

378

2012.05.02 08:45

buy

153

0.01

1.31711

0.00000

1.32237


379

2012.05.02 08:45

modify

152

0.01

1.32262

0.00000

1.32237


380

2012.05.02 15:15

sell

154

0.01

1.31483

0.00000

1.31352


381

2012.05.03 07:00

t/p

154

0.01

1.3135174

0.00000

1.31352

1.18

1412.63

382

2012.05.03 08:45

sell

155

0.01

1.31454

0.00000

1.31425


383

2012.05.03 09:00

t/p

155

0.01

1.3142483

0.00000

1.31425

0.29

1412.92

384

2012.05.03 13:45

sell

156

0.01

1.31671

0.00000

1.31256


385

2012.05.04 10:45

t/p

156

0.01

1.3125581

0.00000

1.31256

4.11

1417.02

386

2012.05.04 14:15

sell

157

0.01

1.31527

0.00000

1.31293


387

2012.05.04 14:45

t/p

157

0.01

1.3129331

0.00000

1.31293

2.34

1419.36

388

2012.05.04 16:15

buy

158

0.02

1.30997

0.00000

1.31742


389

2012.05.04 16:15

modify

152

0.01

1.32262

0.00000

1.31742


390

2012.05.04 16:15

modify

153

0.01

1.31711

0.00000

1.31742


391

2012.05.06 23:15

buy

159

0.04

1.29845

0.00000

1.30918


392

2012.05.06 23:15

modify

152

0.01

1.32262

0.00000

1.30918


393

2012.05.06 23:15

modify

153

0.01

1.31711

0.00000

1.30918


394

2012.05.06 23:15

modify

158

0.02

1.30997

0.00000

1.30918


395

2012.09.14 10:45

t/p

152

0.01

1.30918

0.00000

1.30918

-18.67

1400.70

396

2012.09.14 10:45

t/p

153

0.01

1.30918

0.00000

1.30918

-13.12

1387.58

397

2012.09.14 10:45

t/p

158

0.02

1.30918

0.00000

1.30918

-11.65

1375.93

398

2012.09.14 10:45

t/p

159

0.04

1.30918

0.00000

1.30918

22.77

1398.70

 
VoDyaMon:

собственно все начиналось с команды: ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE);

а потом другой вариант попробовал ObjectsDeleteAll(OBJ_ARROW_RIGHT_PRICE);

Уважаемый почитайте справку :)

Я не понимаю почему мой индюк с указанными командами корректно работает в Альфа-Форексе, а в Саксо банке объекты уже не удаляются.

Потом начались эксперименты со скриптом и скрипт перестал удалять объекты во всех терминалах.

Первая ищет в главном окне графика, вторая во всех. Вывод - 1) используйте индекс окна чтобы сократить количество объектов которые перебирает функция для поиска удаляемых. 2) Если удаляете по имени (части имени, поскольку одна mql программа как правило именует объекты с каким то персональным префиксом) то используйте цикл поиска от последнего (старшего по времени создания) объекта.

Хотя действительно, есть проблема с удалением объектов, если их очень много и перебирать от 0 до ObjectTotal()-1, то удаление части объектов не происходит. Вопрос к разработкам, возможно отведенной памяти буфера не хватает.

Пример:

void DeleteObjects(int chartID, string prefix_obj_name) {
   string obj_nm="";
   int obj=ObjectsTotal();
 //  for(int k=0; k<obj; k++){  // неправильный вариант
   for(int k=obj-1; k>=0; k--){
      obj_nm = ObjectName(k);
      if(StringFind(obj_nm,prefix_obj_name)>=0) 
      { 
         ResetLastError();
         if(!ObjectDelete(chartID,obj_nm))
         {
            Print(__FUNCTION__,
            ": не удалось удалить объект ",obj_nm," Код ошибки = ",GetLastError());
         }
      }
   }
}
// prefix_obj_name = "Obj_MQLname_";   Имена объектов создаваемых программой "Obj_MQLname_Close_"+DoubleToStr(Close[0],Digits), "Obj_MQLname_Open_"+DoubleToStr(Open[0],Digits)   и т.д. 
 
Подскажите, плиз, совместима ли Win 8 с MT 4 и MT 5? Спрашиваю, потому что у меня мак и думаю, с какой ОС покупать комп. Один человек даже скриншот показывал, на котором видно, что на восьмерке у него MT 4 работает. Но так как некоторые товарищи утверждают, что полной совместимости нет, приходится уточнять... Спасибо.
Причина обращения: