Форум » Алгоритмы » Сюда можно дать приб.. » Ответить

Сюда можно дать приб..

Azer: Сюда можно дать приблизительный алгоритм???

Ответов - 41, стр: 1 2 3 4 5 All

SK: Можно.

Андрей: Добрый день, Сергей. Помогите пожалуйста, никак не получается организовать цикл. cur_side = MathAbs(Buffer[0] - Buffer[1]) / Point; for (i = 0; i < 100; i++) { if ((masiv_B[cur_side] >=1)&& (cur_side >= i)) { masiv_sort = masiv_B[cur_side]; } } if (masiv_sort() пустой) тогда вернуться к cur_side снова его считаем и +1 else идем дальше у меня есть массив masiv_B[100][100]... я получаю некоторую переменную cur_side = MathAbs(Buffer[0] - Buffer[1]) / Point; и теперь мне нужно....чтобы все переменные из массива masiv_B с индексом строки равной cur_side были перенесены в массив masiv_sort[]...поскольку он одномерный...то там только один индекс переменной... (пример) т.е. получается, что masiv_sort[5] = masiv_B[cur_side][5]... и так далее...пока не будут заполнены все переменные...в массиве masiv_sort и masiv_B[][] имеет в наличии 100 столбцов...и masiv_sort[] - 100 столбцов...т.е. они совпадают... но вот что у меня не получалось....это организовать цикл... т.е. мы нашли cur_side, заполнили masiv_sort[].. если массив masiv_sort() не будет пустым...а будет иметь хоть одно значение...тогда цикла заканчивает свою работу и сохраняет cur_side а если массив masiv_sort() будет пустым....тогда нужно вернуться ...пересчитать cur_sid, прибавить 1..и снова заполнить массив вот.

SK: 1. Честно говоря.. это что-то новое:) Что такое cur_side = MathAbs(Buffer[0] - Buffer[1]) / Point; Это типа.. показания на 0 баре - показания на 1 баре, делённое на 0.0001. В сущности, это разница цен в пунктах. Например, (1.2347 - 1.2345)/0.0001 = 0.0002/0.0001 = 2. Я не понимаю как это значение можно использовать в качестве индекса массива. Ну, т.е. технически это возможно. Математика стерпит. Но.. не меряют же температуру в километрах, а вес в амперах. 2. Вот это masiv_sort = masiv_B[cur_side] и это masiv_sort[5] = masiv_B[cur_side][5] вещи несовметимые. masiv_sort может быть либо массивом, любо переменной, а masiv_B может быть либо 1- либо 2-мерным массивом. Указание индексов обязательно. Числом или переменной неважно. Важно, чтоб место, где должен быть указан индекс, не пустовало.


Владимир25/04: Здравствуйте Сергей. Хочу направить Вам вопрос но после того как зарегистрируюсь.

Владимир25/04: Здравствуйте Сергей. Не могу зарегистрироваться.

Владимир25/04: О'кей зарегистрировался. Здравствуйте Сергей еще раз. Вот пишу Вам первый раз . Надеюсь не последний. В сравнении с тем о чем и на какие темы говорят и пишут на форуме я новичок. Язык изучил за месяц, примерно пол года назад, " Учебник по программированию на MQL4" в Вашем авторстве. Прекрасный учебник, очень толково написан. Написал несколько советников, пользовательских индикаторов, скриптов. На все непонятные вопросы ответы пытаюсь найти на форуме. Но столкнулся с одной вроде бы мелочью, а ответа найти не могу. Задал вопрос вчера на форуме, но внятный ответ так и не получил. Помогите пожалуйста. Вопрос касается использование #include <ХХХ.mqh>, перечитал весь форум не нашел ответа. На одной из веток 20.10.2007 Вы написали: "...Ещё можно добавить, что файл ех4 является самодостаточным - для того, чтоб он работал, не требуется, чтоб в include находились исходные коды пользовательских функций. Файл ех4 можно скопировать, передать другим трейдерам и там использовать. Он является полноценным независимо от технологии его получения." Вот в этом и проблема. Допустим я сделал советник в который вставил директиву #include<...>, затем сделал включаемый заголовочный файл с куском кода. Откомпилировал советник и включил в торговлю. Все работает. Беру свой советник копирую и переношу на другой компьютер, другому трейдеру . После этого советник не хочет работать и пишет, что нет функции к которой обращается #include<...>, то есть он не видит включаемый заголовочный файл и не компилируется. А пишет при компиляции - 'PointZigZag.mqh' - cannot open the program file D:\Program Files\MetaTrader2\experts\Киблиот.mq4 (10, 1) Как я понял из учебника и Ваших высказываний, передается советник в mg4, а включаемый файл с ним прицепом в ех4. И получается, что код советника виден, а включаемый файл не виден но в любом случае должен работать. Вот пример советника и включаемого заголовочного файла. Посмотрите в чем ошибка именно по вопросу. //+------------------------------------------------------------------+ //| Киблиот.mq4 | //| Copyright © 2009, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #include <PointZigZag.mqh> //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() {PointZigZag(); Comment("Прод.-y21 = ",y21," ","Пок.-x21 = ",x21); return(0); } //+------------------------------------------------------------------+ жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж //+------------------------------------------------------------------+ //| PointZigZag.mqh | //| Copyright © 2009, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" extern int ExtDepth = 12; //------- переменные ZigZag extern int ExtDeviation = 5; //------- переменные ZigZag extern int ExtBackstep = 3; //------- переменные ZigZag extern int ShiftBars = 2; //------- переменные ZigZag //------- переменные ZigZag ------------------------------------------ double y3, y2, y1, zz;// int x3, x2, x1, sh;// double x31, x21, x11; // Точки перегиба ZigZag double y31, y21, y11; // Точки перегиба ZigZag double TimeZZ, TimeOO; //------------------------------------------------------------------------------ double PointZigZag() {y3=0;y2=0;y1=0; sh=ShiftBars; while (y3==0) {zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh); if (zz!=0 && zz!=EMPTY_VALUE) {if (y1==0) { x1=sh; y1=zz; } else if (y2==0) { x2=sh; y2=zz; } else if (y3==0) { x3=sh; y3=zz; }}sh++; } if (High[x1]>High[x2]) {x11=High[x1]; x21=Low[x2]; x31=High[x3]; y11=0;y21=0;y31=0;TimeZZ=Time[x2]; }else {y11=Low[x1]; y21=High[x2]; y31=Low[x3]; x11=0;x21=0;x31=0;TimeZZ=Time[x2];} } //+------------------------------------------------------------------+ Большое Спасибо.

SK: Владимир25/04 пишет: На одной из веток 20.10.2007 Вы написали: "...Ещё можно добавить, что файл ех4 является самодостаточным - для того, чтоб он работал, не требуется, чтоб в include находились исходные коды пользовательских функций. Файл ех4 можно скопировать, передать другим трейдерам и там использовать. Он является полноценным независимо от технологии его получения." Вот в этом и проблема. Допустим я сделал советник в который вставил директиву #include<...>, затем сделал включаемый заголовочный файл с куском кода. Откомпилировал советник и включил в торговлю. Все работает. Беру свой советник копирую и переношу на другой компьютер, другому трейдеру . После этого советник не хочет работать и пишет, что нет функции к которой обращается #include<...>, то есть он не видит включаемый заголовочный файл и не компилируется. А пишет при компиляции - 'PointZigZag.mqh' - cannot open the program file D:\Program Files\MetaTrader2\experts\Киблиот.mq4 (10, 1) Как я понял из учебника и Ваших высказываний, передается советник в mg4, а включаемый файл с ним прицепом в ех4. И получается, что код советника виден, а включаемый файл не виден но в любом случае должен работать. Судя по всему, Вы неправильно понимаете суть дела. Различают исходные коды (mq...) и исполняемые (ex4). На любом ПК в терминале МТ 4 можно запустить на исполнение только готовую прикладную программу (ех4). При этом действительно не имеет значения каким образом получен ех4-файл - то ли это просто текст программы mq4, то ли текст программы mq4, в котором используется включение файлов с помощью строки #include. Другое дело, что для получения исполняемого файла ех4 на момент компиляции нужны все компоненты. Если Вы компилируете программу (выполняете действия в МЕ для получения ех4) на своём ПК, то всё получается, т.к. на Вашем ПК все компоненты имеются. Если же Вы берёте только один файл mq4 (в котором используется включение файлов с помощью строки #include), относите его на другой ПК и пытаетесь выполнить компиляцию на этом ПК, то компиляция не завершится удачно, т.к. в данном случае нет того фрагмента текста, который вставляется (нет включаемого файла). Для успешной компиляции на другом ПК нужно разложить по соотв. каталогам все файлы - и собственно код эксперта (скрипта, индикатора) и включаемые файлы mqh. -- Смысл использования mqh сводится к простому удобству. Во время компиляции при исполнении директивы #include текст, содержащийся в mqh файле, просто вставляется в код эксперта взамен строки #include. Если программа большая, то (главный) файл эксперта может вообще не содержать кода, а лишь #include А, #include В,#include С. При этом алгоритмы прописываются в соотв. файлах mqh с названиями А, В, С. Но на момент компиляции все эти файлы должны присутствовать, чтоб компилятор мог собрать их коды и затолкать в файл эксперта. Потом компиляция = получение самодостаточного ех4.

Владимир25/04: SK пишет: На любом ПК в терминале МТ 4 можно запустить на исполнение только готовую прикладную программу (ех4). При этом действительно не имеет значения каким образом получен ех4-файл - то ли это просто текст программы mq4, то ли текст программы mq4, в котором используется включение файлов с помощью строки #include. Добрый вечер. Спасибо за внимание и оперативность. Конечно Ваш авторитет для меня непререкаемый так сказать последняя инстанция, но есть маленький вопрос. Со своего компьютера я копирую советник в mq4 , переношу на другой и вставляю. Там появляется такой же советник mq4 и самое главное если смотреть папку include не в открытом терминале, а проводнике Windows то в ней появилась запись включаемого файла не компилированная в ex4. Как это объяснить? И еще тогда я вообще не понимаю смысл включаемого файла сheck. из ваших примеров. Если он идет в открытом виде то в нем теряется смысл. А если в закрытом то как.

SK: Файлы самопроизвольно не копируются. Я не знаю как объяснить чудеса между Вашими ПК. Но мне по-прежнему кажется, что Вы не до конца понимаете суть. Включаемые файлы не нужно отдавать в открытом виде. Да и никакие исходные коды вообще (основн. файл эксперта). Отдать другу Вы можете один файл ех4. Он будет работать, его компилировать не нужно (он уже является результатом компиляции). И он не потребует никаких включаемых файлов. Его просто нужно положить в папку экспертов. После запуска МТ4 в списке экспертов в терминале он будет сегого цвета (если рядом нет его исходников) или жёлто-синего (если исходники тут же).

SK: Включаемый файл отдельно компилировать не нужно. Он просто несёт в себе текст, который будет вставлен в основной код эксперта при компиляции.



полная версия страницы