Ошибка Моланиса Кто-нибудь? - страница 3

 

RJo:

Тем не менее, я еще не видел функционального ex4 с дефектным mq4 от SB.

Вы разместили дефектный код mql4. Похоже, что Molanis не лучше EA Builder.
 
RJo:


А, значит... компьютеры лучше всех справляются с торговлей, и поэтому без человека не обойтись.


No.... компьютеры лучше всего справляются с автоматической торговлей ;)
 
RaptorUK:
Вы опубликовали дефектный код mql4. ... похоже, что Molanis не лучше, чем EA Builder.


"Дефектный" по отношению к файлу ex4, т.е. ex4 более функционален, чем mq4. Как указано в моем первом сообщении, я не кодер. Ииии. Спасибо за ваш конкретный диагноз. Ах да... у вас его не было.

 
RJo:


"Дефектный" по отношению к файлу ex4, т.е. ex4 более функционален, чем mq4. Как указано в моем первом сообщении, я не кодер. Ииии. Спасибо за ваш конкретный диагноз. Ах да... у вас его не было.

Мне не нужно дублировать то, что WHRoeder уже дал...
 
JDeel:

Почему бы нам не начать программировать на ассемблере? Мы можем управлять всем на самом низком доступном уровне (после машинного кода). Да, это требует больше усилий для изучения, но мы обязательно получим такой маленький и супер оптимизированный код! Это просто потрясающе, не так ли, люди?

deVries, Molanis - не мой инструмент, и я никогда не создавал советников с его помощью. Но я вижу, что вы не являетесь поклонником EA Builders, и я могу посоветовать вам никогда не пытаться работать с ними. Просто используйте MQL4/MQL5, это не запрещено. Есть люди, которым больше всего нравится розовый цвет, и люди, которым больше всего нравится голубой цвет. Так было всегда и так будет и впредь.


Не меняйте моих слов.... Докажите нам, что вы можете правильно закодировать советника с помощью вашего инструмента, который я написал. И все же я имею в виду, что...

Я никогда не писал, что Molanis - это ваш инструмент. Если вы наберёте в Гугле EABuilders, то найдёте и другие. Может быть вы пользователь NoProgra Builder...

и вы думаете, что это инструмент, который может правильно кодировать ваши советники для MetaTrader4, тогда докажите это с помощью этого конструктора.

Но есть люди, которые советуют использовать EABuilders или продвигают его для использования...

Если вы хотите продвигать какой-либо продукт, то убедитесь, что он хорош, доказав это.

И до сих пор я не видел никого, кто бы преуспел в этом.

Большой недостаток этих инструментов в том, что будут люди, которые думают, что не нужно знать основы mq4, когда инструмент может сделать ваш продукт.

Но они не знают, какое качество они получают.... от этого инструмента. Или они не распознают ошибки в программах, которые они могут получить (бесплатно или не бесплатно) через интернет.

 
RJo:

Спасибо за ваш конкретный диагноз. Ах да... у вас его не было.

Я приведу вам конкретный пример...

int CLOSELONG(string symbol_c) {
 CloseAllPositions(symbol_c,OP_BUY,MagicNumberLong);
 CloseAllPositions(symbol_c,OP_BUY,MagicNumberLong);
 return(0);
}

//CLOSESHORT closes short positions
/*
*** Generated with Molanis Strategy Builder 3.1 ***
*** www.molanis.com ***
*** Released 2010-02-20 ***
*/
int CLOSESHORT(string symbol_c) {
 CloseAllPositions(symbol_c,OP_SELL,MagicNumberShort);
 CloseAllPositions(symbol_c,OP_SELL,MagicNumberShort);
 return(0);
}

Эти 2 функции дважды вызывают одну и ту же функцию ... CloseAllPositions, первая для Longs, вторая для Shorts ... зачем это делать? Это делается для очистки ордеров, которые не удалось закрыть в первый раз, когда выполняется CloseAllPositions, почему не удается закрыть позиции? потому что цикл, используемый для закрытия этих позиций, считает вверх, а теперь вниз ... и вы уже знаете, почему это не удается, поскольку вы читали тему, которую я создал по этому вопросу.

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

 

Спасибо, что выложили код Molanis, RJo, я просмотрю его позже - расчет лотов в Molanis очень ужасен. Думаю, пользователи Molanis / EA SB будут счастливыми пользователями, пока не изучат mql, и тогда они увидят Molanis / EA SB с совершенно другой точки зрения.

Я думаю, нам лучше сначала защитить наши деньги, чем защищать Molanis/EA SB - или наше решение использовать его. ;).

 
RJo:
Indi:


Спасибо, что выложили коды ....

Как бы ни был хорош WHRoeder в указании ошибок так быстро, я не такой, и нет смысла повторять это снова.

Но если вы не знаете, как кодировать, вы можете сделать кое-что другое, что вы видите здесь....

.

Я сделал тест, чтобы увидеть поведение индикатора, который также выдает какое-то предупреждение, сделал две картинки

Тестирование на 1 минуте (заставляет советника не торговать) начиная с 1 января 2012 года

На этой картинке вы видите поведение до тестирования индикатора

И поведение после начала тестирования

Такое поведение вы также увидите, если поместите в тест советник, который не использует индикатор

.

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

.

Похоже, что этот код индикатора сделан не Моланисом, потому что он начинается с......

// This is Not Tested , Use At Your Own Risk !

//+--------------------------------------------------------------------------+
//| 3 MA Cross w_Alert v2.mq4                                                |
//| Copyright © 2005, Jason Robinson (jnrtrading)                            |
//| http://www.jnrtading.co.uk                                               |
//| 3 ma conversion and Alert , David Honeywell , transport.david@gmail.com  |
//| http://finance.groups.yahoo.com/group/MetaTrader_Experts_and_Indicators/ |
//+--------------------------------------------------------------------------+

/*
  +-------------------------------------------------------------------------------+
  | Allows you to enter 3 ma periods and it will then show you and alert you at   |
  | which point the 2 faster ma's "OPEN" are both above or below the Slowest ma . |
  +-------------------------------------------------------------------------------+
*/   

Думаю, ошибка этого индикатора в том, что он рассчитывает будущее.

   for(i = 0; i <= limit; i++)
    {
      
      counter=i;
      Range=0;
      AvgRange=0;
      for (counter=i ;counter<=i+9;counter++)
       {
         AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
       }
      Range=AvgRange/10;
       
      fasterMAnow      = iMA(NULL, 0, FasterMA, FasterShift, FasterMode, PRICE_CLOSE, i+1);
      fasterMAprevious = iMA(NULL, 0, FasterMA, FasterShift, FasterMode, PRICE_CLOSE, i+2);
      fasterMAafter    = iMA(NULL, 0, FasterMA, FasterShift, FasterMode, PRICE_CLOSE, i-1);
      
      mediumMAnow      = iMA(NULL, 0, MediumMA, MediumShift, MediumMode, PRICE_CLOSE, i+1);
      mediumMAprevious = iMA(NULL, 0, MediumMA, MediumShift, MediumMode, PRICE_CLOSE, i+2);
      mediumMAafter    = iMA(NULL, 0, MediumMA, MediumShift, MediumMode, PRICE_CLOSE, i-1);
      
      slowerMAnow      = iMA(NULL, 0, SlowerMA, SlowerShift, SlowerMode, PRICE_CLOSE, i+1);
      slowerMAprevious = iMA(NULL, 0, SlowerMA, SlowerShift, SlowerMode, PRICE_CLOSE, i+2);
      slowerMAafter    = iMA(NULL, 0, SlowerMA, SlowerShift, SlowerMode, PRICE_CLOSE, i-1);
Когда "i = 0", тогда "i-1" - это будущее.....
 
WHRoeder:

Ichi_Cloud_EA.mql4 без особого порядка

  1. внешний Is_micro_account вместо вычисления его через Market_info
  2. Использование micro_account и NormalizeDouble предполагает, что lotStep равен 0.1 0r 0.01. Никакие другие значения, определенные брокером, не допускаются.
  3. внешние пятизначные числа вместо того, чтобы вычислять их. Тестирование на 3 или 5 позволяет только стандартные пары, пары типа jpy. Торговля металлами FAIL. Почему тест для недействительных настроек.
  4. глобальный PipMultiplier никогда не сбрасывается обратно при изменении графика.
  5. Многие внешние bools не могут быть проверены стратегией.
  6. Нет причин использовать два магических числа
  7. Будет торговать только в часы между TradingStartTime и TradingEndTime. Нет возможности установить время больше полуночи (например, начало 2000, конец 0600, т.е. только для сиднейской сессии).
  8. Использует PreviousBarCount==Bars. Бары ненадежны (максимум баров на графике) Объем ненадежен (вы можете пропустить тики), всегда используйте время.
  9. использует iClose(Symbol(),0,1) вместо более простого и быстрого Close[1].
  10. в Init Slippage = Slippage*PipMultiplier; означает КАЖДЫЙ РАЗ при смене графика (пары или таймфрейма) Slippage увеличивается на 3 , 30, 300, 3000!!!
  11. magiccond и другие bool используют if (condition) boolVar = true; else boolVar = false; когда он мог бы использовать более простой boolVar = condition;
  12. Никогда не кэширует значения, если (iClose() <> iCustom()) точно такие же вызовы iClose и iCustom вызываются 4+ раз.
  13. Подсчитывает при закрытии. вызывает функцию дважды. Подсчет вверх означает, что он пропустит каждый второй ордер. Вызов функции дважды означает, что она пропустит 4 или более открытых ордеров. Всегда считайте вниз.
  14. "M-ERROR : Expiration has to be at least 1 minute." только что было сообщение о том, что период истечения должен быть больше 10 минут!
  15. Для отложенного ордера вызывает Normaliszedouble(price, Digits), который не будет работать, если ticksize != Point

Поскольку меня больше всего беспокоил №10, я исследовал его первым. Я как раз собирался написать огромный запрос в службу поддержки Моланису, когда обнаружил следующее:

Проскальзывание, используемое в коде советника, является внешней целочисленной переменной (extern int).

"Перед выполнением init() внешние переменные получают значения, установленные пользователем на панели настроек, а при выполнении init() внешние переменные получают новые значения, установленные пользователем. Таким образом, новые значения внешних переменных становятся действительными с момента новой сессии (init - start - deinit) эксперта, которая начинается с выполнения init()."(https://book.mql4.com/variables/types).

Получается, что... в то время как глобальные переменные обычно игнорируются в пользу старых значений при выполнении init(), внешние переменные обновляются при выполнении init(). Проскальзывание остается равным 3 (или тому, что я установил) независимо от того, сколько раз я меняю графики. Я считаю, что именно так и должен работать советник.

 
RJo:
Итак, получается, что... в то время как глобальные переменные обычно игнорируются в пользу старых значений при выполнении init(), внешние переменные обновляются при выполнении init().

Проскальзывание остается на уровне 3 (или любом другом значении, которое я установил) независимо от того, сколько раз я меняю графики. Я считаю, что именно так и должен работать советник.

НЕПРАВДА Вы хоть потрудились прочитать ссылку, которую вы разместили(https://book.mql4.com/variables/types), там сказано: "Глобальные переменные инициализируются только один раз перед тем, как задать выполнение специальных функций."

Глобальные и статические переменные устанавливаются при ЗАГРУЗКЕ советника, а не во время цикла deinit/init.

Добавьте оператор print сразу после Slippage = Slippage * 10 и запустите его, смените графики или таймфреймы и посмотрите в лог, если не хотите верить нашей документации...

Причина обращения: