Форум трейдеров » Торговые роботы, советники, индикаторы » Вопросы программирования
+ Подписаться
Страница 19 из 87 ПерваяПервая ... 917181920212969 ... ПоследняяПоследняя
  1. 3,168
    Комментарии
    1
    Темы
    3184
    Репутация Pro
    Аватар для SergP  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от Дмитрий2 Посмотреть сообщение
    Ну да... функцию делать только для того что бы на 10 умножить:)
    ну да....
    на десять иногда нужно умножать много параметров:smartass:
  2. 2,008
    Комментарии
    4
    Темы
    2040
    Репутация Pro
     
    Мастер форумных наук

    3 Медалей
    Цитата Сообщение от SergP Посмотреть сообщение
    ну да....
    на десять иногда нужно умножать много параметров:smartass:
    но код же в данном случае все равно меньше(или понятней) не станет, вот если бы функция сама догадывалась какие параметры на 10 нужно умножать, а какие нет:)
  3. 3,168
    Комментарии
    1
    Темы
    3184
    Репутация Pro
    Аватар для SergP  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от Дмитрий2 Посмотреть сообщение
    но код же в данном случае все равно меньше(или понятней) не станет, вот если бы функция сама догадывалась какие параметры на 10 нужно умножать, а какие нет:)
    ну.... на немного короче и понятнее
    if(MarketInfo("EURUSD",MODE_DIGITS)==5)
    или
    if( isFiveSign() )
    :D
  4. 2,008
    Комментарии
    4
    Темы
    2040
    Репутация Pro
     
    Мастер форумных наук

    3 Медалей
    Цитата Сообщение от SergP Посмотреть сообщение
    ну.... на немного короче и понятнее
    if(MarketInfo("EURUSD",MODE_DIGITS)==5)
    или
    if( isFiveSign() )
    :D
    ну хорошо...:) так будет более грамотно конечно
    А вобще может кто-то уже привык к 5-3 знакам, а тут бах ещё в 10раз больше стоп...
  5. 119
    Комментарии
    3
    Темы
    119
    Репутация Pro
     
    В начале пути

    2 Медалей
    Народ у меня проблемка с MQL4.
    Надо выделить функцию в отдельный модуль (это решаемо, естественно). Из советника вызываю эту функцию. Возвращает она bool-переменную, а еще в процессе своей работы пишет значения в несколько переменных.
    При компиляции модуля с функцией в нем есть глобальные переменные.
    При компиляции модуля с советником в нем есть такие же переменные.
    Я так понимаю, что они разные, т. е. вызванная функция свои глобальные пишет, а глобальные модуля какими были, такими и остаются. :(
    В MQL4 указателей нет, структур нет. Есть возможность какой-нибудь способ возвращать из функции сразу несколько значений? %)
  6. 2,974
    Комментарии
    7
    Темы
    2995
    Репутация Pro
     
    Banned

    4 Медалей
    Цитата Сообщение от egg Посмотреть сообщение
    Народ у меня проблемка с MQL4.
    Есть возможность какой-нибудь способ возвращать из функции сразу несколько значений? %)
    Через запись/чтение в файл - самый правильный простой и некрасивый..;)

    А эт не совсем правильные, но вполне рабочие. В комментах - примеры

    Возвращать string, потом порезать её на куски.. //"100#150#300000#1#" по разделителю.. Можно просто куски одной длины - тогда без разделителя
    Выводить через double - 2 значения - в целой и дробной частях//100.150
    .. в int - использовать коэф, на пример Х1000, если выводимые параметры 3-значные //100150

    эт только так, что сразу в голову пришло..

    ++
    вместо булева возврата лучше использовать знак..
    отриц знач - false, и наоборот.. тоже, экономия получается..;)
    // "f100#150#" -100.150 -100150 - false
    // "t100#150#" 100.150 100150 - true
  7. 605
    Комментарии
    9
    Темы
    609
    Репутация Pro
    Аватар для commersant  
    В начале пути

    3 Медалей
    Цитата Сообщение от EQU Посмотреть сообщение
    Через запись/чтение в файл - самый правильный простой и некрасивый..;)

    А эт не совсем правильные, но вполне рабочие. В комментах - примеры

    Возвращать string, потом порезать её на куски.. //"100#150#300000#1#" по разделителю.. Можно просто куски одной длины - тогда без разделителя
    Выводить через double - 2 значения - в целой и дробной частях//100.150
    .. в int - использовать коэф, на пример Х1000, если выводимые параметры 3-значные //100150

    эт только так, что сразу в голову пришло..

    ++
    вместо булева возврата лучше использовать знак..
    отриц знач - false, и наоборот.. тоже, экономия получается..;)
    // "f100#150#" -100.150 -100150 - false
    // "t100#150#" 100.150 100150 - true
    Это все извращения. Чем не устраивает возвращение массива?
  8. 2,974
    Комментарии
    7
    Темы
    2995
    Репутация Pro
     
    Banned

    4 Медалей
    Цитата Сообщение от commersant Посмотреть сообщение
    Это все извращения. Чем не устраивает возвращение массива?
    так MQL4 не поддерживает.. (((
  9. 4,819
    Комментарии
    10
    Темы
    4852
    Репутация Pro
    Аватар для Максимъ  
    Снеговик-флудовик

    5 Медалей
    Цитата Сообщение от egg Посмотреть сообщение
    Народ у меня проблемка с MQL4.
    Можно дождаться выхода MQL5, осталось менее месяца. Там структуры будут. ;)
    Все равно переписывать под новую версию языка. :)

    Но можно и через файл сделать. Извращения? Современные алгоритмы это и есть извращение. Далеко не все задачи решаются просто. :)
  10. 959
    Комментарии
    25
    Темы
    967
    Репутация Pro
     
    В начале пути

    4 Медалей
    Возвращать вроде как в массивах можно:
    Код:
    //+------------------------------------------------------------------+
    //|  подготовить массив тикетов для закрытия                         |
    //+------------------------------------------------------------------+
    void PrepareTicketsToClose(bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
       {
       int size=ArrayRange(arrayTickets,0);
    //----
       if (size==0) return;
    
       int i,type,ticket,closeSize;
       for (i=0;i<size;i++)
          {
          type=arrayTickets[i][1];
          // если тип ордера не рыночный, то пропускаем
          if (type>OP_SELL) continue;
    
          if (Revers) // перевернем тип рыночного ордера
             {
             if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
             }
          
          // тут решаем для каждого открытого ордера его судьбу
          //  оставить в рынке или добавить в массив на закрытие
          if (type==OP_BUY)
             {
             //  
             // код разрешающий оставить покупку
             
             // как пример
             if (trSignal&SIG_BUYCLOSE==0) continue;
             }
          
          if (type==OP_SELL)
             {
             //  
             // код разрешающий оставить продажу
             
             // как пример
             if (trSignal&SIG_SELLCLOSE==0) continue;
             }
    
          closeSize=ArrayRange(ticketsClose,0);
          ArrayResize(ticketsClose,closeSize+1);
          ArrayResize(lots,closeSize+1);
          ticketsClose[closeSize][0] = arrayTickets[i][0]; // # тикета
          ticketsClose[closeSize][1] = arrayTickets[i][1]; // тип ордера
          
          // здесь укажем сколько лотов нужно закрыть
          lots[closeSize] = arrayTickets[i][2]; // закрываемый объем
          // можно закрывать частично, тогда нужно переписать строку сверху
          }
    //----
       return;   
       }

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

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