Jump to content
Programmer

Общие вопросы по языку MQL

Recommended Posts

Ugar68

Еще вопрос. Есть такая функция Push. Отправляет на мобильный терминал сообщение о событиях. С этой функцией кто то работал? Насколько все происходит без сбоев?

Сбои бывают. Хотя бы надо понимать что интернет не всегда стабилен на мобильниках. Бывает что приходит с опозданием. Бывает не приходит совсем, но это обычно связано с тем что вовремя не обновил мобильный терминал, или он завис. Всё это достаточно редко. В основном работает стабильно.

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


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
Secret Looser

Здравствуйте. Пишу на MQL4 мультивалютного советника, который работает на минутках и анализирует одновременно больше 10 валютных пар (кластерный анализ). И вот проблема: при тестировании терминал съедает около 4 ГБ оперативки, после чего вылетает с ошибкой. Получается протестировать максимум за пол года (тогда съедает 3.5 ГБ и работает).

 

Я так понимаю, он при тестировании загружает в оперативку всю минутную историю по всем используемым парам. Можно ли как-то этого избежать? Пробовал CopyRates - не помогло.

Share this post


Link to post
Share on other sites
kazakov.v

 

 

Можно ли как-то этого избежать?

 

Вряд ли это история столько отъедает. Минутки за 1 год по одному инструменту весят где-то 23 Мб.


Никому верить нельзя.

Мне - можно.

 

Share this post


Link to post
Share on other sites
Secret Looser

Вряд ли это история столько отъедает. Минутки за 1 год по одному инструменту весят где-то 23 Мб.

 

Советник пишет, какую пару он обработал. Когда запускаю тест, терминал начинает откусывать по 200-300 МБ с каждой новой парой. Очевидно, он зачем-то подгружает всю историю М1. Примерно одинаково ест оперативы, даже если за неделю тестить. Просто когда больше, чем полгода, там видать ещё что-то помимо истории съедает, вот и не хватает.

Edited by Secret Looser

Share this post


Link to post
Share on other sites
Ugar68

Здравствуйте. Пишу на MQL4 мультивалютного советника,

Советник использует индикаторы, вызываемые по iCustom?


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
ToB. CyxoB

Кто-нибудь знает, почему описание объекта, записанное в TOOLTIP при перезагрузке терминала заменяется на имя этого объекта (т.е. подсказка как бы отсутствует и автоматически формируется терминалом)?

 

 

 

 

П.С. ChartSetInteger(chart_ID,CHART_SHOW_OBJECT_DESCR,0,value)) - не используется.

Share this post


Link to post
Share on other sites
ToB. CyxoB

Кто-нибудь знает, почему описание объекта, записанное в TOOLTIP при перезагрузке терминала заменяется на имя этого объекта (т.е. подсказка как бы отсутствует и автоматически формируется терминалом)?

 

П.С. ChartSetInteger(chart_ID,CHART_SHOW_OBJECT_DESCR,0,value)) - не используется.

 

TOOLTIP  не запоминаются. тчк.

Полагаться на них нельзя. тчк.

Но в некоторых случаях, их можно переназначитьб тчк.

Share this post


Link to post
Share on other sites
FSB

Всех приветствую!

 

Пример, есть история сделок:

1. EUR\USD sell magic1

2. EUR\USD buy magic5

3. EUR\USD sell magic3

4. EUR\USD sell magic2

5. EUR\USD buy magic4

 

Вопрос, как выбрать последний закрытый ордер с определённым магиком, например EUR\USD sell magic3, который по факту закрылся не последним? 

 

Интересует реализация на языке mql4

Edited by FSB

Не зная ни сна и ни отдыха; При лунном и солнечном свете; Мы делаем деньги из воздуха; Чтоб снова спустить их на ветер!

Share this post


Link to post
Share on other sites
ZeleBoba

Всех приветствую!

 

Пример, есть история сделок:

1. EUR\USD sell magic1

2. EUR\USD buy magic5

3. EUR\USD sell magic3

4. EUR\USD sell magic2

5. EUR\USD buy magic4

 

Вопрос, как выбрать последний закрытый ордер с определённым магиком, например EUR\USD sell magic3, который по факту закрылся не последним? 

 

Интересует реализация на языке mql4

в цикле по pointer          
    { if( OrderSelect( pointer, SELECT_BY_POS, MODE_HISTORY ))
        { if( OrderMagicNumber() == magicX && OrderType() == _order_type )
            {
               ... код по обработке выбранного ордера
            }
        }
      else
       { ... обработка отсутствия искомого ордера
       } 
   }
 
можете также добавить проверку по времени закрытия ордера
Edited by ZeleBoba
  • Thanks 1

Лучше маленький профит, чем большие рога.

Share this post


Link to post
Share on other sites
FSB

 

в цикле по pointer          
    { if( OrderSelect( pointer, SELECT_BY_POS, MODE_HISTORY ))
        { if( OrderMagicNumber() == magicX && OrderType() == _order_type )
            {
               ... код по обработке выбранного ордера
            }
        }
      else
       { ... обработка отсутствия искомого ордера
       } 
   }
 
можете также добавить проверку по времени закрытия ордера

 

 

Спасибо огромное!


Не зная ни сна и ни отдыха; При лунном и солнечном свете; Мы делаем деньги из воздуха; Чтоб снова спустить их на ветер!

Share this post


Link to post
Share on other sites
Aequo_animo

Люди подскажите алгоритм определения балансовой операции , в частности интересует  возможно ли это сделать на истории ? 

Share this post


Link to post
Share on other sites
Snower88

Добрый день!


Подскажите пожалуйста, есть кусок кода:



void watch_breakout() {
if(active != true) return;
int ticket = get_ticket();
if(Ask >= NormalizeDouble(channel_top, Digits)) {
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, SLIPPAGE, NormalizeDouble(Ask-Stoploss*Point,Digits), 0, "LONG", MAGIC, clrNONE);
}
if(Bid ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, SLIPPAGE, NormalizeDouble(Bid+Stoploss*Point,Digits), 0, "SHORT", MAGIC, clrNONE);
}
}

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


Подскажите пожалуйста, как можно такое реализовать, третий день бьюсь и решения пока не вижу


Share this post


Link to post
Share on other sites
ZeleBoba

 

Добрый день!

Подскажите пожалуйста, есть кусок кода:

void watch_breakout() {
  if(active != true) return;
    int ticket = get_ticket();
  if(Ask >= NormalizeDouble(channel_top, Digits)) {
    ticket   = OrderSend(Symbol(), OP_BUY, Lots, Ask, SLIPPAGE, NormalizeDouble(Ask-Stoploss*Point,Digits), 0, "LONG", MAGIC, clrNONE); 
       }
  if(Bid <= NormalizeDouble(channel_bottom, Digits)) {
    ticket   = OrderSend(Symbol(), OP_SELL, Lots, Bid, SLIPPAGE, NormalizeDouble(Bid+Stoploss*Point,Digits), 0, "SHORT", MAGIC, clrNONE);
       } 
    }

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

Подскажите пожалуйста, как можно такое реализовать, третий день бьюсь и решения пока не вижу

 

В приведенном коде Вы анализируете пробой текущей ценой. А надо хаем или лоу предыдущего бара.

надо проанализировать бар осуществивший пробой. если попадает в категорию "пин", то - необходимое действие. 

НО, пин-бар понятие довольно размытое для формализации. Вам необходимо будет задаться критериями для отнесения баров к этой категории.

т.е. разница между опен и клозе должна быть не более заданной величины (параметр номер раз),

отношение длин теней должно быть не менее ... (параметр номер два)

и опять же по тому какая тень длиннее, определяем какой это пин.

дерзайте.

ПЫСЫ. Совсем забыл. Надо еще проверить его (пина) отношение с предыдущим баром. Находится ли его тело (поглощено) телом предыдущего бара и чтобы он был того же направления.

Edited by ZeleBoba

Лучше маленький профит, чем большие рога.

Share this post


Link to post
Share on other sites
AntFX

Люди подскажите алгоритм определения балансовой операции , в частности интересует  возможно ли это сделать на истории ? 

OrderType()==6


1

Share this post


Link to post
Share on other sites
Aequo_animo

OrderType()==6

Антон спасибо за "секретную" функцию . Прям заговор какой-то  :)

  • Thanks 1

Share this post


Link to post
Share on other sites
AntFX

Антон спасибо за "секретную" функцию . Прям заговор какой-то  :)

В МТ5 балансовые сделки уже прописаны в констандах, а в МТ4 все ещё секрет, заговор и все такое :)


1

Share this post


Link to post
Share on other sites
ИМН

Подскажите пжл, можно ли при обработке текущего тика функцией OnTick, при наступлении некоторого события начать её исполнение сначала, не дожидаясь окончания обработки текущего тика? Иными словами, есть ли некий аналог оператора continue для этой функции? Благодарю.


Лёгкие деньги бывают только там же, где и бесплатный сыр.

Share this post


Link to post
Share on other sites
ZeleBoba

если по аналогии с continue, то этот оператор завершает текущую итерацию цикла и запускает следующую.

Вы можете просто завершить OnTick оператором return. А далее работа по следующему тику.

А вот если Вы не хотите дожидаться след.тика, то это надо организовать уже самому внутри OnTick.

  • Thanks 2

Лучше маленький профит, чем большие рога.

Share this post


Link to post
Share on other sites
AntFX

Подскажите пжл, можно ли при обработке текущего тика функцией OnTick, при наступлении некоторого события начать её исполнение сначала, не дожидаясь окончания обработки текущего тика? Иными словами, есть ли некий аналог оператора continue для этой функции? Благодарю.

Смотря какого события Вы ждете, опишите задачу более полно.

1

Share this post


Link to post
Share on other sites
ИМН

Смотря какого события Вы ждете, опишите задачу более полно.

Благодарю за желание помочь, выше уже Зелебоба исчерпывающе и, главное, точно ответил на мой вопрос, ура оператору return!

Есть другой вопрос, связанный с этим же оператором:

Если в функции, которая должна возвращать какое-либо значение, нет чётко указанного оператора return в конце функции, то будет выдана ошибка, что не все контрольные пути возвращают значения. Причём - что меня озадачило более всего - эта ошибка выдаётся даже и тогда, когда все возможные варианты значений применяемых в функции переменных "учтены" в теле функции и для каждого определённого сочетания этих значений в теле есть свои return'ы. Так вот компилятору этих внутренних return'ов мало, ему ещё и общий, явно указанный, подавай. Я прав в этом утверждении?

Могу кратенько набросать схему моей функции:

uint  some_function(bool dir)

{

   if (a[0] == 0 && a[1] == 0) return (233);              Массив a[ ] типа uint, поэтому отрицательных значений быть не может.

   if (a[0] > 0 && a[1] == 0) return (456);                В теле перебраны все 4 возможных комбинации значений задействованных

   if (a[0] == 0 && a[1] > 0) return (3452);              переменных и для каждой свой return. Но скомпилировать текст программы

   if (a[0] > 0 && a[1] > 0) return (2342);                мне не удалось, пока я не убрал последний оператор if, не добавил else и

[если здесь не будет "своего" return'a, будет ошибка]                             "общий" return, обусловив его этим самым else'ом.

}

Edited by ИМН

Лёгкие деньги бывают только там же, где и бесплатный сыр.

Share this post


Link to post
Share on other sites
AntFX

Есть другой вопрос, связанный с этим же оператором:

В конце последнего оператора if поставьте else return(0) и все будет хорошо :) Edited by AntFX
  • Thanks 1

1

Share this post


Link to post
Share on other sites
ИМН

В конце последнего оператора if поставьте else return(0) и все будет хорошо :)

Да, я подумывал об этом, можно и так. Открытием для меня явилось то, что компил не отслеживает это дело. Не зная этого, я вывихнул себе мозги, не понимая, где я "забыл" вернуть значение.


Лёгкие деньги бывают только там же, где и бесплатный сыр.

Share this post


Link to post
Share on other sites
AntFX

Открытием для меня явилось то, что компил не отслеживает это дело. Не зная этого, я вывихнул себе мозги, не понимая, где я "забыл" вернуть значение.

Нет, не ошиблись (если a[] имеет тип unsigned). Очевидно компилятор просто не отслеживает сложные последовательные условия.

1

Share this post


Link to post
Share on other sites
SIBARIT

Как прописать: если Low на предыдущих 4 свечах убывающие, то функция true???5a951a4c2f6c4_eurusdm5alpariinternationa

Share this post


Link to post
Share on other sites
ZeleBoba

Как прописать: если Low на предыдущих 4 свечах убывающие, то функция true???5a951a4c2f6c4_eurusdm5alpariinternationa

if( iLow( NULL, 0, 1 ) > iLow( NULL, 0, 2 ) &&
    iLow( NULL, 0, 2 ) < iLow( NULL, 0, 3 ) &&
    iLow( NULL, 0, 3 ) < iLow( NULL, 0, 4 ) &&
    iLow( NULL, 0, 4 ) < iLow( NULL, 0, 5 ) )    flag = true;

Лучше маленький профит, чем большие рога.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×