Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1223

 
Yurij Kozhevnikov:

Статические переменные не переинициализируются при смене входных параметров, периода графика и т.д.

Нет ли какого-нибудь финта ушами, чтобы переинициализировать их принудительно? Более длинный путь примерно представляю себе, нет ли простого и короткого?

Инициализовать в oninit и не делать статиками. Внезапно

 
Спасибо. Улыбка всегда лучше негатива.
 
Привет! Слетел сервер на МТ5 от АМП Глобал. Пересканирование сети не помогает. Перелогирование тоже не помогает.
Файлы:
 

Салют!

Что означает ошибка: "invalid ex4 file (7)" и "global initialization failed" ?

 
Yurij Kozhevnikov:
Спасибо. Улыбка всегда лучше негатива.
Что то не помню чтобы высказывал негатив не по делу, ну да ладно... 

MQL он не совсем ( совсем не) си плюс плюс. Статических членов классов или переменных у функций быть не должно. Они вызывают массу проблем и эти проблемы потом сложно локализуются. 

Только на самом верхнем уровне, в конкретном советнике, сильно подумав. 
 

Здравия Вам!!!

  1. Имеется массив значений - 500 МА по каждому бару

Как можно вычислить образовавшиеся жгуты?

- При смене направления ?

Советовали за нырнуть в Карты Кохонена, ну я не смог разобраться!

 
Top2n:

Здравия Вам!!!

  1. Имеется массив значений - 500 МА по каждому бару

Как можно вычислить образовавшиеся жгуты?

- При смене направления ?

Советовали за нырнуть в Карты Кохонена, ну я не смог разобраться!

а у вас которые MA-шки ?

если SMA, то пожалуй можно обойтись школьной арифметикой. Просто вспомнить формулу :-)

 

Салют!
Есть код, переводящий стоп в безубыток (для продаж, например):

if(PositionGetDouble(POSITION_SL)>PositionGetDouble(POSITION_PRICE_OPEN) && ask()<PositionGetDouble(POSITION_PRICE_OPEN)-BreakEven) {
                     //Comment("Modify sell");
                     MqlTradeRequest request;
                     MqlTradeResult  result;
                     ulong  position_ticket  = PositionGetTicket(i);// тикет позиции
                     string position_symbol  = PositionGetString(POSITION_SYMBOL); // символ
                     int    digits           = (int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS); // количество знаков после запятой

                     double sl               = PositionGetDouble(POSITION_PRICE_OPEN);  // Stop Loss позиции

                     double tp               = PositionGetDouble(POSITION_TP);  // Take Profit позиции
                     ENUM_POSITION_TYPE type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);  // тип позиции
                     ZeroMemory(request);
                     ZeroMemory(result);
                     request.action          = TRADE_ACTION_SLTP; // тип торговой операции
                     request.position        = position_ticket;   // тикет позиции
                     request.symbol          = position_symbol;     // символ
                     request.sl              = NormalizeDouble(sl,digits);                // Stop Loss позиции
                     request.tp              = tp;                // Take Profit позиции
                     request.magic = Magic;

                     //--- вывод информации о модификации
                     PrintFormat("BreakEven POSITION_TYPE_SELL Modify #%I64d %s %s",position_ticket,position_symbol,EnumToString(type));
                     //--- отправка запроса
                     if(!OrderSend(request,result))
                        PrintFormat("BreakEven POSITION_TYPE_SELL OrderSend error %d",GetLastError());  // если отправить запрос не удалось, вывести код ошибки
                     //--- информация об операции
                     PrintFormat("BreakEven POSITION_TYPE_SELL retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
                  }

Если строка определения стопа на уровне цены открытия следующая:

double sl               = PositionGetDouble(POSITION_PRICE_OPEN);  // Stop Loss позиции

то норм, переводит стоп без проблем.

Но как только сюда добавить, чтобы оно было не на цену открытия, а ниже:

double sl               = PositionGetDouble(POSITION_PRICE_OPEN)-SymbolInfoDouble(_Symbol,SYMBOL_POINT);  // Stop Loss позиции

или:

double sl               = PositionGetDouble(POSITION_PRICE_OPEN)-1.0;  // Stop Loss позиции (для РТС например и других фондовых штуковин)

То сразу вылетают проблемы. Пишет, мол, неправильные стопы:

2020.07.29 13:06:24.127 Trades  '723763': failed modify #16003799 sell 1 RTS-9.20 sl: 126900, tp: 124470 -> sl: 126379, tp: 124470 [Invalid stops]

Хотя руками можно и ниже стопы подвинуть. Подскажите как решить это дело?

 

всем доброго дня!


я новичок - только подключился к брокеру "открытие" - установил МТ5 на iPhone,   не могу подключиться на торговый счет. iPhone  требует сертификат. Сертификат мне брокер тоже выслал. Не знаю как его установить на iPhone. Друзья, подскажите как его установить? Заранее благодарю!

Файлы:
 
Добрый день, а как можно ли в OnTimer выставить условие? Можно ли сравнивать Time[0] TimeCorrect?
Причина обращения: