Ответить
07.09.2013, 08:08
Аватар для hoz
hoz hoz на форуме Активный участник
Регистрация: 01.04.2011 / Сообщений: 531
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Добрый день!
В индикаторе TDI Red Green обозначены 3 уровня:
SetLevelValue(0,50);
SetLevelValue(1,68);
SetLevelValue(2,32);
Как можно получить значения 50, 68 и 32 из этого индикатора?
Спасибо.
Находишь буферы в индикаторе и сравниваешь их значения с абсолютным требуемым значением (50, 68 и 32). Если равно значению, значит вывести его в журнал например (цену на нём или что нужно).
09.09.2013, 16:32
Аватар для hoz
hoz hoz на форуме Активный участник
Регистрация: 01.04.2011 / Сообщений: 531
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Появился вопрос к знатокам. Больше для прокачки своего понимания, ежели нужда..

Вот есть такой код:

Скрытый текст

PHP код:
int start()


   
int Array[4] = {1234};
   
int x1x2x3x4;
   
int Array_Size ArrayRange(Array, 0);


   for(
x1=0x1<Array_Sizex1++)
   {
      Print(
"Combination = ", Array[x1]);

      for(
x2=x1+1x2<Array_Sizex2++)
      {
         Print(
"Combination = ", Array[x1] + "   " + Array[x2]);

         for(
x3=x2+1x3<Array_Sizex3++)
         {
            Print(
"Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

            for(
x4=x3+1x4<Array_Sizex4++)
            {
               Print(
"Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
            }
         }
      }
   }


   return(
0);

[свернуть]



Объясните, как будет происходить расчёт данной конструкции. От самого глубоко вложенного цикла к началу, или наоборот? И вообще, как это понять.. Попалась мне такая картина, смотрю.. и что-то не совсем догоняю.

Последний раз редактировалось NSerega; 09.09.2013 в 17:46.
09.09.2013, 16:41
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
Появился вопрос к знатокам. Больше для прокачки своего понимания, ежели нужда..

Вот есть такой код:

Скрытый текст

PHP код:
int start()


   
int Array[4] = {1234};
   
int x1x2x3x4;
   
int Array_Size ArrayRange(Array, 0);


   for(
x1=0x1<Array_Sizex1++)
   {
      Print(
"Combination = ", Array[x1]);

      for(
x2=x1+1x2<Array_Sizex2++)
      {
         Print(
"Combination = ", Array[x1] + "   " + Array[x2]);

         for(
x3=x2+1x3<Array_Sizex3++)
         {
            Print(
"Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

            for(
x4=x3+1x4<Array_Sizex4++)
            {
               Print(
"Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
            }
         }
      }
   }


   return(
0);

[свернуть]



Объясните, как будет происходить расчёт данной конструкции. От самого глубоко вложенного цикла к началу, или наоборот? И вообще, как это понять.. Попалась мне такая картина, смотрю.. и что-то не совсем догоняю.
Ну да. Я тоже иногда использовал фор в форе.
Выполняется по порядку.

Последний раз редактировалось NSerega; 09.09.2013 в 17:46.
09.09.2013, 16:46
Аватар для jib07
jib07 jib07 вне форума Местный житель
Регистрация: 11.04.2011 / Сообщений: 336
Поблагодарили 269 раз(а) / Репутация: 270
Объясните, как будет происходить расчёт данной конструкции. От самого глубоко вложенного цикла к началу, или наоборот? И вообще, как это понять.. Попалась мне такая картина, смотрю.. и что-то не совсем догоняю.
В чем именно вопрос то, у х4 - 1 значение, х3 - 2 значения, х2 - 3 значения,
х1 - 4 значения.
Т.е. начинайте с конца и увидете, что х4 = (4), х3 = (3 или 4), х2 = (2 или 3 или 4), х1 = (1 или 2 или 3 или 4)
09.09.2013, 18:35
Аватар для hoz
hoz hoz на форуме Активный участник
Регистрация: 01.04.2011 / Сообщений: 531
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
В чем именно вопрос то, у х4 - 1 значение, х3 - 2 значения, х2 - 3 значения,
х1 - 4 значения.
Т.е. начинайте с конца и увидете, что х4 = (4), х3 = (3 или 4), х2 = (2 или 3 или 4), х1 = (1 или 2 или 3 или 4)
Тут переменные то те, которые мы уже знаем. Оно и понятно. А если бы мы не знали, какие переменные где, т.е. когда массив заполняется по мере отработки кода, то ситуация то меняется.
Если выполняется по очереди, как указал eevviill, то всё вроде как просто. Хотя есть подозрение почему-то, что может быть и не так.
Где применяеются подобные вариации?
09.09.2013, 20:46
Аватар для jib07
jib07 jib07 вне форума Местный житель
Регистрация: 11.04.2011 / Сообщений: 336
Поблагодарили 269 раз(а) / Репутация: 270
Тут переменные то те, которые мы уже знаем. Оно и понятно. А если бы мы не знали, какие переменные где, т.е. когда массив заполняется по мере отработки кода, то ситуация то меняется.
Если выполняется по очереди, как указал eevviill, то всё вроде как просто. Хотя есть подозрение почему-то, что может быть и не так.
Где применяеются подобные вариации?
Дак ну представте что в массиве числа и Вы их не знаете,но работает тот алгоритм, который я описал выше, а именно перебор в таком порядке))
Такого я нигде не встречал))
Просто Вы загоняетесь на пустом месте, счетчик работает в счетчике- типичная ситуация в основном для сравнения элементов 2х массивов и других операций)))
hoz 
09.09.2013, 21:04
Аватар для hoz
hoz hoz на форуме Активный участник
Регистрация: 01.04.2011 / Сообщений: 531
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
В чем именно вопрос то, у х4 - 1 значение, х3 - 2 значения, х2 - 3 значения,
х1 - 4 значения.
Т.е. начинайте с конца и увидете, что х4 = (4), х3 = (3 или 4), х2 = (2 или 3 или 4), х1 = (1 или 2 или 3 или 4)
Дело в том, что я не понял, почему по Вашему у данных переменных такие значения есть. Почему x4 - значение?, а, например, x2 - (2 или 3 или 4)? Вроде как тут нет канкретики. Ведь есть массив. У него 4 элемента. Значения переменных x1...x4 не определены заранее. А значит нужно смотреть на это как-то иначе. Вот что меня смущает.


Дак ну представте что в массиве числа и Вы их не знаете,но работает тот алгоритм, который я описал выше, а именно перебор в таком порядке))
Такого я нигде не встречал))
Просто Вы загоняетесь на пустом месте, счетчик работает в счетчике- типичная ситуация в основном для сравнения элементов 2х массивов и других операций)))
Да, возможно я и загнался.. Но всё потому, что ситуация столь неординарная. Я так вообще не в курсах, зачем такое вообще нужно.. Тем более в трейдинге
И как же сравниваются элементы обоих массивов?

Последний раз редактировалось hoz; 09.09.2013 в 21:14.
10.09.2013, 10:23
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Я так вообще не в курсах, зачем такое вообще нужно.. Тем более в трейдинге
Для некоторых, это способ защиты от декомпила. Ничего не выполняющий, но запутывающий код. Начинает читать такой код не-до-программист, встречает такой цикл, у него крыша съезжает и он этот код выбрасывает не сумев разобраться.
Но к тебе это не относится. Ты настойчиво разбираешься.
В трейдинге я тоже не представляю таких случаев где нужен вложенный цикл. Но так можно пудрить мозги заказчику количеством строк кода и соответственно набивать цену.
10.09.2013, 12:14
Регистрация: 13.03.2009 / Сообщений: 2,328
Поблагодарили 1,947 раз(а) / Репутация: 2024
В трейдинге я тоже не представляю таких случаев где нужен вложенный цикл.
А я не стесняюсь узать вложенные циклы. Только не для дури, а по делу. Например для заполнения значениями многомерного массива.
Код:
int arr [1000][100][10];
for(i=0;i<1000;i++)
 {
     for(i2=0;i2<100;i2++)
        {
        for(i3=0;i3<10;i3++)
            {
            arr [i][i2][i3]=...
            }
        }
   }
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
10.09.2013, 13:41
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
А я не стесняюсь узать вложенные циклы. Только не для дури, а по делу. Например для заполнения значениями многомерного массива.
Код:
int arr [1000][100][10];
for(i=0;i<1000;i++)
 {
     for(i2=0;i2<100;i2++)
        {
        for(i3=0;i3<10;i3++)
            {
            arr [i][i2][i3]=...
            }
        }
   }
Андрей, я нисколько не сомневался в твоих способностях. Да и сам я знаю как это работает, а вот в советнике многомерные массивы использовать как-то ни к чему. Ну есть у меня один индикатор информер с 2х мерным массивом. А больше как-то и нет нужды.
Ты-бы лучше привёл пример конкретного кода из советника, где такой подход мог-бы сэкономить машинное время или упростил-бы код...
eevviill , Ugar 
10.09.2013, 13:58
Регистрация: 13.03.2009 / Сообщений: 2,328
Поблагодарили 1,947 раз(а) / Репутация: 2024
Андрей, я нисколько не сомневался в твоих способностях. Да и сам я знаю как это работает, а вот в советнике многомерные массивы использовать как-то ни к чему. Ну есть у меня один индикатор информер с 2х мерным массивом. А больше как-то и нет нужды.
Ты-бы лучше привёл пример конкретного кода из советника, где такой подход мог-бы сэкономить машинное время или упростил-бы код...
Приведённый мной выше код реальный, хотя и немного утрированный.
В реальности несколько раз используется 2х мерный вариант этого кода в моём последнем советнике.
Выкладывать реальный код не буду. Это нарушит мои взаимоотношения с заказчиком.
От количества строк стоимость работы у меня не зависит, по этому чем проще будет код, тем лучше для меня. Иногда проще обслужить двухмерный массив в одном цикле, а иногда проще засунуть цикл в цикл. В советнике используются оба этих варианта работы с массивами.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
10.09.2013, 14:03
Регистрация: 13.03.2009 / Сообщений: 2,328
Поблагодарили 1,947 раз(а) / Репутация: 2024
Кстати. Я пожалуй то же задам вопрос. Может на него уже кто то давно знает ответ.
Как добыть время с точностью до микросекунд?
Было бы очень полезно для выявления сколько какая функция или операция выполняется.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
10.09.2013, 14:49
Аватар для hoz
hoz hoz на форуме Активный участник
Регистрация: 01.04.2011 / Сообщений: 531
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Кстати. Я пожалуй то же задам вопрос. Может на него уже кто то давно знает ответ.
Как добыть время с точностью до микросекунд?
Было бы очень полезно для выявления сколько какая функция или операция выполняется.
Я как-то задавал вопрос подобный на мкл4. Там много вариантов было предложено. Некоторые я не понял вообще. Могу дать ссылку.. И можно через мой профиль там зайти.. Ветку начинал я, так что не составит труда найти, и, возможно, будет полезно!
10.09.2013, 14:54
Аватар для hoz
hoz hoz на форуме Активный участник
Регистрация: 01.04.2011 / Сообщений: 531
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
У меня тут ошибка при выставлении отложенника. Вот появляется иногда.. За неделю прогона в тестере, тока один момент такой попался.
Вот функция:

Скрытый текст

PHP код:
//+-------------------------------------------------------------------------------------+
//| Открытие отложенной короткой позиции                                                |
//+-------------------------------------------------------------------------------------+
bool OpenPendingSell(double lotdouble price)
{
   
int g_ticket = -1;
   
double OOP price i_distanceFromLastPos pt;
      
   if (
OOP Bid)
   {
       
fCheck_ValidPendingOOP(Symbol(), OP_SELLSTOPOOP);
       
       
g_ticket OrderSend(Symbol(), OP_SELLSTOPlotND(OOP), 3000NULLi_magic0CLR_NONE);
   }
   if (
g_ticket 0)
   {
       return (
true);
   }
   else
       Print (
"OpenPendingSell(): Ордер послать не удалось " GetLastError());
   
   return (
false);

[свернуть]



Вот что в журнале:

Скрытый текст

PHP код:
2013.09.10 14:24:34    2013.08.15 13:04  Perevorot EURUSD.GI,M5OpenPendingSell(): Ордер послать не удалось 0 
[свернуть]


Как выяснить причину? Распечатывать всё что только в данной функции используется прямо перед Ордерсендом? Ошибка то вообще не говорящая толком ни о чём...

Последний раз редактировалось NSerega; 10.09.2013 в 18:37.
10.09.2013, 15:25
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
От количества строк стоимость работы у меня не зависит,
Так о тебе и разговору-то не-было.
10.09.2013, 15:48
Регистрация: 13.03.2009 / Сообщений: 2,328
Поблагодарили 1,947 раз(а) / Репутация: 2024
Я как-то задавал вопрос подобный на мкл4. Там много вариантов было предложено. Некоторые я не понял вообще. Могу дать ссылку.. И можно через мой профиль там зайти.. Ветку начинал я, так что не составит труда найти, и, возможно, будет полезно!
Кинь ссылку в личку. А зачем через твой профиль заходить, ветка в привате чёль?
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
10.09.2013, 15:58
Аватар для hoz
hoz hoz на форуме Активный участник
Регистрация: 01.04.2011 / Сообщений: 531
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Кинь ссылку в личку. А зачем через твой профиль заходить, ветка в привате чёль?
Не приват. Просто через профиль можно просто найти темы, которые начал тот, чей профиль смотришь. Я к этому веду....
Ugar 
10.09.2013, 17:27
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Кстати. Я пожалуй то же задам вопрос. Может на него уже кто то давно знает ответ.
Как добыть время с точностью до микросекунд?
Было бы очень полезно для выявления сколько какая функция или операция выполняется.
А GetTickCount() не подходит? Или тебе мельче надо?
10.09.2013, 18:01
Регистрация: 13.03.2009 / Сообщений: 2,328
Поблагодарили 1,947 раз(а) / Репутация: 2024
А GetTickCount() не подходит? Или тебе мельче надо?
Там миллисекунды, а я хотел микросекунды. Многие функции и операторы выполняются быстрее миллисекунды, так что это грубовато.
Наверняка в коме есть системный таймер с дискретой в микросекунду. Вот и спрашиваю как до него добраться. Может какие то dll в винде есть для этого?
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
11.09.2013, 08:21
Аватар для hoz
hoz hoz на форуме Активный участник
Регистрация: 01.04.2011 / Сообщений: 531
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Я вот призадумался. Ведь многие функции, которые используются один раз за определённый момент времени(иногда довольно длинный), чтобы код эксперта работал быстрее, нужно в плане оптимизации вызывать как можно меньше. Но это и так понятно. Я хотел сказать, что, буквально вчера думал над некоторыми вариантами. Начал с функции модификации ордеров(первоначальной установки тейки и стопа). Для краткости назовём её ФМО, что бы ниже по контексту не писать больше, чем можно.
Я вижу 2 варианте реализации (если кто-нибудь может добавить.. буду очень рад!):

1. ФМО можно вызывать сразу из функции посыла ордера, неважно рыночного или отложенного, при условии, что ордер послан успешно и выбран его тикет:
PHP код:
if (ticket 0)
{  
                if (
SL != 0.0 || TP != 0.0)
                {
                    
double ld_SL 0.0ld_TP 0.0;
                    if (
OrderSelect (li_TicketSELECT_BY_TICKET))
                    {
                        
fOrderModify (ticketOrderOpenPrice(), SLTP00);
                    }
                }
            } 
Но при торговле на реале ордер может не модифицироваться, и, значится, нужно в старте снова вызывать функцию ФМО, чтобы установить стопы и теки ордерам, у которых ещё они не установлены.
2. Как-вариант, можно вообще в функции посылающей ордера не ставить ничего, а всё вызывать из старта.
В любом случает, приходится вызывать ФМО из старта постоянно, и, на каждом тике, а не, например, раз за бар или какое-то время. А удобно было как-то оптимизировать код, чтобы не вызывать ФМО из старта постоянно. Т.к. это экономия ресурсов, и выполнение лишних операции.

Есть какие-нибудь варианты решения данной ситуации?
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 16:02. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO