Ваши вопросы по языку MQL4

tommy27

Гуру форума
у моего дц инструменты как на картинке нету. в этом проблема что ли ?
Если так, то конечно в этом, пишет же символ нот фаунд - символ не найден, смотри в коде откуда такие названия перевёрнутые берутся.
Ну и когда это исправишь, то всё равно корректно не будет работать мультивалютник в тестере - Ugar выше написал почему.

Для мультивалютников (только если каждый инструмент ведётся отдельно) и тестирования нескольких сов на одном счету могу только такое посоветовать:http://forexsystemsru.com/poleznye-dlya-treidera-utility/17108-report-manager-pozvolyaet-ob%60edenenyat%60-otchyoty.html
 
Последнее редактирование:

egorr007

Новичок форума
посмотрите что не так, нужно через 10 баров, новый отчёт с отображением в комметарии
Спасибо.

PHP:
double z = 0;            
int bar=0;
//-------------------------------------------
        for(int i=0;i<iBars(Symbol(),0);i++)       
        if(Time[0]){z=1;bar=i;}//

      if(z==1){Comment("Новый_отсчёт_после_10_бара__",bar," ");}
     
      if(bar >=110){z=0;} 
      
      if(z==0){Comment("Новый_отсчёт_после_10_бара__",bar=0);}
 

Дмитрий 2010

Интересующийся
Проблема при модификации ордеров

Здравствуйте Товарищи специалисты прошу вашего совета.
Проблема выглядит так: При модификации ордеров,выбираем два ордера и проверяем не равен ли стоп-лосс рассчитанному уровню и если не равен модифицируем ордера.Но после модификации ордеров они модифицируются снова при этом возникает ошибка так-ка стоп-лосс уже находится на этом уровне.Код прелагаю, и скрин из журнала об ошибках. Заранее благодарен за помощь. Спасибо.
 

Вложения

  • Код.png
    Код.png
    47,4 КБ · Просмотры: 42
  • Журнал.png
    Журнал.png
    18,5 КБ · Просмотры: 33

matro3

Почетный гражданин
В другой раз не надо картинок.
Здесь есть кнопочка "КОД".

Вы после переноса стопов в ордерах переприсвоили переменные StopLoss_Bay_Max и Min?
Похоже что нет...
 

Дмитрий 2010

Интересующийся
В другой раз не надо картинок.
Здесь есть кнопочка "КОД".

Здравствуйте по поводу вставки (Картинок) это всё что я нашол в справке чтобы показать сам код. Если мне объяснят как делать правильно буду благодарен.

По поводу кода-у меня и раньше возникали проблемы с модификацией ордеров, но проблему удавалось решить заменив условие if(x1!=x2) на другое например if(x1>x2) или if(x1<x2) или переписать логику кода, но в этот раз не по могло ничего, скажу больше при прогоне в тестере на одном и том-же отрезке истории ошибки возникают в разных местах то-есть при двух проходах ошибки возникают в разных местах и большинство модификаций происходит без ошибок. Возможно проблема в том что торговый терминал обновился (потому-что справка другая ) может переустановить новый терминал.
 

elisseev2000

Прохожий
Так выложи сам индюк, может кто разберёт и подскажет.
Я не ковыряю чужие программы, тем более декомпилы, но на мне свет клином не сошелся.
А без выкладывания индикатора, объяснить его работу смогут экстрасенсы, а это уже другой форум.

Здравствуйте!!!
помощь нужна аж кипит

Вопрос такой. Я написал индикатор. Сейчас хочу оптимизировать его. Если я пишу например в индикаторе
for (int j=1;j<=121;j++)

{

ExtMapBuffer1[j1]=iClose(NULL,PERIOD_W1,j1);

потом всякая вещь..............

.........................................

}
я скачиваю массив цен закрытия. я хочу , чтобы этот массив скачивался раз в неделю и потом я мог этот массив использовать. мне не надо , чтобы он постоянно нагружал платформу. Как это сделать?
 

ЖекаНадым

Прохожий
Всем привет! подскажите плиз, при написании советника, как прицепить к нему индикатор Slope Direction Line, что бы закрытие происходило при смене цвета! Буду очень благодарен!!!
 

Ugar

Гуру форума
В другой раз не надо картинок.
Здесь есть кнопочка "КОД".

Здравствуйте по поводу вставки (Картинок) это всё что я нашол в справке чтобы показать сам код. Если мне объяснят как делать правильно буду благодарен.

По поводу кода-у меня и раньше возникали проблемы с модификацией ордеров, но проблему удавалось решить заменив условие if(x1!=x2) на другое например if(x1>x2) или if(x1<x2) или переписать логику кода, но в этот раз не по могло ничего, скажу больше при прогоне в тестере на одном и том-же отрезке истории ошибки возникают в разных местах то-есть при двух проходах ошибки возникают в разных местах и большинство модификаций происходит без ошибок. Возможно проблема в том что торговый терминал обновился (потому-что справка другая ) может переустановить новый терминал.
Проблема в том что 2 дробных числа, вроде бы одинаковые, могут оказаться не одинаковыми из за погрешностей обработки дробных чисел к компьютерах. По этому сравнения if(x1>x2) или if(x1<x2) правильные, а if(x1==x2) или if(x1!=x2) неправильные. Сравнивать на == и != можно только целочисленные переменные.
 

Дмитрий 2010

Интересующийся
Ugar спасибо за ответ, а я то думаю почему == и != не всегда работает.
Ugar скажите пожалуйста может проблема быть решена если выражение if(x1!=x2) заменить на if(x1-x2>0) в одной строке и if(x2-x1>0) в другой строке, так будет более точнее ?
 

Ugar

Гуру форума
Ugar спасибо за ответ, а я то думаю почему == и != не всегда работает.
Ugar скажите пожалуйста может проблема быть решена если выражение if(x1!=x2) заменить на if(x1-x2>0) в одной строке и if(x2-x1>0) в другой строке, так будет более точнее ?
Нет. Искажение значения переменной может быть как в большую так и в меньшую сторону.
Вместо if(x1!=x2), если в x1 и x2 цены, то можно написать так if(MathAbs(x1-x2)>0.5*_Point). Соответственно вместо if(x1==x2), можно написать if(MathAbs(x1-x2)<0.5*_Point).
 

matro3

Почетный гражданин
Вот так будет выглядеть код в тэгах:
PHP:
if(MathAbs(x1-x2)>0.5*_Point)
if(MathAbs(x1-x2)<0.5*_Point)
Конечно это имеет смысл если его достаточно много.

А числа можно округлять или нормализовать NormalizeDouble(Bid,Digits)

И в Вашем коде не видно что после проверки и модификации ордеров переменным назначаются новые значения.
Я так понял что нужно так:
StopLoss_Bay_Max = StopLoss_Bay
после модификации ордеров. Верно?
 

Дмитрий 2010

Интересующийся
Вот так будет выглядеть код в тэгах:
PHP:
if(MathAbs(x1-x2)>0.5*_Point)
if(MathAbs(x1-x2)<0.5*_Point)
Конечно это имеет смысл если его достаточно много.

А числа можно округлять или нормализовать NormalizeDouble(Bid,Digits)

И в Вашем коде не видно что после проверки и модификации ордеров переменным назначаются новые значения.
Я так понял что нужно так:
StopLoss_Bay_Max = StopLoss_Bay
после модификации ордеров. Верно?
========================================================
Спасибо за ответ и рекомендации
По пунктам
1)Блок вынесен в пользовательскую функцию(за пределы void OnTick());
2)При запуске Ф-и Все переменные объявляются (исключаем старые значения) ;
3)В строке if... проверяется не равен ли вычитанный уровень уже существующему, и выходит так что стоп стоит на уровне а условие if(!=) допускает модификацию в результате в журнале OrderModify error 1-то есть стоп уже на этом уровне.
Ещё раз спасибо, буду пробовать "прикрутить" описанный вами метод
 

kustik

Новичок форума
Огромная просьба!
скрестить индикатор pipswinner с MA в одном окне,что брать данные для советника
Скачать: _http://rghost.ru/private/51789662/b5217a01f6ad5d8578dbe2fb3301e216 . полностью архив с pipswinner.
 

Вложения

  • 01.png
    01.png
    92,3 КБ · Просмотры: 46

hoz

Активный участник
Сколько видел я кодов, так классы с их производными, постоянно используют в инклюдах. А почему не помещать их в библиотеки? Неужели так не возможно?
Взять, например, примитивный кусок одной из библиотек, которую я начал переписывать. Вот так выглядит:
Это инклюдник:
PHP:
//+---------------------------------------------------------------------------------------------------------------------------------------+
//|                                                                                                     [email protected] |
//|                                                                                                                                   hoz |
//|                                                                                                                                       |
//+---------------------------------------------------------------------------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""
#property strict
//+=======================================================================================================================================+
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//|                     =========== ЗАГОЛОВОЧНЫЙ ФАЙЛ ДЛЯ БИБЛИОТЕКИ hoz_LoggingToAnyWhere@library ===========                            |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+=======================================================================================================================================+
//----
// =================================================== Внешние параметры библиотеки ======================================================+
extern bool   bb_PrintPermission = true,      // Флаг печати комментариев
              bb_CommentPermission = true;    // Флаг показа комментариев на графике
// ====================================================== Перечень функций библиотеки ====================================================+
#import "[email protected]"
    void hoz_LoggingToAnyWhere::fWrite_Log (string fs_Txt,                        // Данные, которые требуется записать в Log-файл
                                            bool fb_PrintPermission = true,       // Флаг печати комментариев
                                            bool fb_CommentPermission = true);    // Флаг показа комментариев на графике
    void hoz_LoggingToAnyWhere::fPrint (string fs_Text,                       // Возвращаемая пустая строка
                                        bool fb_PrintPermission = true,       // Флаг печати комментариев
                                        bool fb_CommentPermission = true);    // Флаг показа комментариев на графике
#import
PHP:
А это библиотека:
PHP:
//+---------------------------------------------------------------------------------------------------------------------------------------+
//|                                                                                                     [email protected] |
//|                                                                                                                                   hoz |
//|                                                                                                                                       |
//+---------------------------------------------------------------------------------------------------------------------------------------+
#property library
#property copyright "hoz"
#property link      ""
#property version   "1.00"
#property strict
//+=======================================================================================================================================+
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//|                                  БИБЛИОТЕКА ДЛЯ ЛОГИРОВАНИЯ СОБЫТИЙ И МАНИПУЛЯЦИИ ТЕКСТОВЫМИ ДАННЫМИ                                  |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+=======================================================================================================================================+
//----
//+=======================================================================================================================================+
//===================================================   Определяем класс библиотеки   ====================================================|
//+=======================================================================================================================================+
class hoz_LoggingToAnyWhere
{
   private:
      string bs_LibName;
   public:
           hoz_LoggingToAnyWhere();
          ~hoz_LoggingToAnyWhere();
      void fWrite_Log (string fs_Txt, bool fb_PrintPermission, bool fb_CommentPermission);   // 1.1 Пишим Log-файл.
      void fPrint (string fs_Txt, bool fb_PrintPermission, bool fb_CommentPermission);       // 1.2 Выводим на печать и (или) на график комментарии.
};
//+---------------------------------------------------------------------------------------------------------------------------------------+
//----
//=========================================================================================================================================
// 1.0 Конструктор класса. ================================================================================================================
hoz_LoggingToAnyWhere::hoz_LoggingToAnyWhere() {
}
//=========================================================================================================================================
// 1.1 Пишим Log-файл. ====================================================================================================================
void hoz_LoggingToAnyWhere::fWrite_Log (string fs_Txt,                       // Данные, которые требуется записать в Log-файл
                                        bool fb_PrintPermission = true,      // Флаг печати комментариев
                                        bool fb_CommentPermission = true)    // Флаг показа комментариев на графике
{

    static datetime ldt_NewDayOpen = 0;
    static string ls_FileName = "";
    datetime ldt_CurrDayOpen = iTime (Symbol(), NULL, PERIOD_D1);
    //---- Имя лог файла определяем один раз в сутки
    if (ldt_NewDayOpen != ldt_CurrDayOpen)
    {
        ls_FileName = StringConcatenate (WindowExpertName(), "_", Symbol(), "_", Period(), "-", Month(), "-", Day(), ".log");
        ldt_NewDayOpen = ldt_CurrDayOpen;
    }
    int handle = FileOpen (ls_FileName, FILE_READ|FILE_WRITE|FILE_CSV, "/t");

    FileSeek (handle, 0, SEEK_END);      
    FileWrite (handle, StringConcatenate (TimeToStr (TimeCurrent(), TIME_DATE|TIME_SECONDS), ": ", fs_Txt));
    FileClose (handle);
   
   fPrint (fs_Txt, fb_PrintPermission, fb_CommentPermission);
}
//=========================================================================================================================================
// 1.2 Выводим на печать и (или) на график комментарии. ===================================================================================
void hoz_LoggingToAnyWhere::fPrint (string fs_Text,                          // Возвращаемая пустая строка
                                    bool fb_PrintPermission = true,          // Флаг печати комментариев
                                    bool fb_CommentPermission = true)        // Флаг показа комментариев на графике
{
    bs_LibName = "hoz_LoggingToAnyWhere@Library";

    if (StringLen (fs_Text) > 0)
    {
        if (bs_LibName != "") fs_Text = StringConcatenate (bs_LibName, " => ", fs_Text);

        if (fb_PrintPermission)
            Print (fs_Text);

        if (fb_CommentPermission)
            Comment (fs_Text);
    }
    //---- Очищаем переменную
    //fs_Text = "";
//---- 
    return;
}
Такой подход разве не приемлим?
Экземпляры я прикрепил к посту.
 

Вложения

AleKsiN

Интересующийся
Уважаемые программисты, посмотрите что не так, выдает предупреждения

return value of 'OrderModify' should be checked

PHP:
if (MODIFICUL == TRUE) {
      for (int pos_184 = order_total_24 - 1; pos_184 >= 0; pos_184--) {
         if (OrderSelect(pos_184, SELECT_BY_POS)) {
            if (OrderType() == OP_BUY && OrderStopLoss() == 0.0) OrderModify(OrderTicket(), OrderOpenPrice(), price_8, 0, 0, Blue);
            if (OrderType() == OP_SELL && OrderStopLoss() == 0.0) OrderModify(OrderTicket(), OrderOpenPrice(), price_16, 0, 0, Blue);
         }
      }
   }
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
Уважаемые программисты, посмотрите что не так, выдает предупреждения

return value of 'OrderModify' should be checked

PHP:
if (MODIFICUL == TRUE) {
      for (int pos_184 = order_total_24 - 1; pos_184 >= 0; pos_184--) {
         if (OrderSelect(pos_184, SELECT_BY_POS)) {
            if (OrderType() == OP_BUY && OrderStopLoss() == 0.0) OrderModify(OrderTicket(), OrderOpenPrice(), price_8, 0, 0, Blue);
            if (OrderType() == OP_SELL && OrderStopLoss() == 0.0) OrderModify(OrderTicket(), OrderOpenPrice(), price_16, 0, 0, Blue);
         }
      }
   }
Если функция возвращает что-то, то это что-то должно быть присвоено какой-то переменной или проверено выполнение.
Должно быть примерно так:

bool modord;
modord = OrderModify(...

или if(OrderModify(...))
 

yupyalta

Гуру форума
Помогите с индикатором что-бы обновлялся на графике. То приходиться перещёлкиваеь ТФ что-бы обновился.
 

Вложения

  • mnt - cubic spline & extrapolation.mq4
    11 КБ · Просмотры: 28

aleksei3122

Местный знаток
Помогите с кусочком кода, нужно вставить Мани менеджмент в сова
 

Ugar

Гуру форума
Помогите с кусочком кода, нужно вставить Мани менеджмент в сова
Какой именно? Их много всяких. Мартингейл например то же разновидность мани менеджмента. И доливки то же. А процентных так вообще куча разных.
Спецы не отвечают потому что угадывать не умеют, а выпытывать чё надо влом.
 
Последнее редактирование:
Верх