papaklass: Данные не совпадают, а должны совпадать, т.к. второй и третий случаи являюся отдельными частями первого условия. Не могу понять в чем проблема.
Вот это условие
if( mn < STP || mn >= STP )
- оно по какой причине сформулировано таким образом? В нынешнем виде оно сработает при любом mn и STP. Зачем тогда его вообще вводить? А следующие два варианта - там идёт конкретное отсечение отдельных ситуаций.
А так вроде всё логично: one + two == tri (не вдаваясь в подробности расчётов one, two и tri) во всех трёх вариантах.
Об этом и речь. Я хочу общее пространство ( случай 1) разделить на две группы (случаи 2 и 3). По логике должно быть верно выражение one + two == tri, а у меня оно не выполняется. В первом условии one=148,а во-втором 172. Тоже не севпадение и для two и для tri. И в чем проблема не могу понять.
Может проблема в общем условии? Этот код еще от чего-то зависит?
Просто банальный пример:
условие (а): открываемся, если бар на H1 возрастает. TP=SL=100
условие (б): открываемся, если бар на H1 убывает. TP=SL=100
дополнительное условие: второй раз условия не проверяем, если уже есть позиция.
Тогда при включении (а) плюс (б) мы будем открываться каждый раз как только сработал TP/SL.
если включим (а) мы будем открываться во всех первых случаях плюс (!!!!) еще несколько раз, когда мы не открывались потому, что до этого открылись по условию (б)
papaklass: По логике должно быть верно выражение one + two == tri, а у меня оно не выполняется.
Да посмотрите внимательнее: как раз-таки это сравнение (one + two == tri) и выполняется, для каждого из вариантов.
papaklass: В первом условии one=148,а во-втором 172.
Ну так это совсем другой вопрос, а именно: почему значение one из первого варианта не равно значению one из второго и третьего вариантов.
Вы во втором и третьем вариантах вводите ограничительное условие по сравнению с первым вариантом. Продумайте, почему, например, во втором варианте значение one увеличивается по сравнению с первым вариантом. Из приведённой части кода это пока не понятно.
papaklass: Значения пространств2 и пространства3 должны быть постоянными, т.к. условия получения этих пространств неизменны во всех трех примерах, которыя я привел в предыдущих постах.
Чтобы найти ошибку в этом логическом допущении, предлагаю сделать очень просто: вывести на печать каждый случай увеличения "пространствХ" во всех трёх вариантах, сравнить результаты и проанализировать, по какой именно причине "значения пространств2 и пространства3" не являются одинаковыми.
Дополнение. ilunga уже намекнул, что при переходе от одного варианта к другому могут быть потеряны те или иные сделки. Ведь у Вас же в тело оператора if() включена убойная по своей силе функция/метод OpenPosition(). И в зависимости от условия, которое проверяется оператором if(), она срабатывает в разное время.
papaklass: То есть Вы предлагаете промаркеровать, сохранить все сделки для каждого случая, а затем сранить друг с другом. Муторно, но похоже, что без этого не обойтись.
Сам так и делаю, когда застреваю.
..Я в предыдущем своём сообщении ещё дополнение написал.
papaklass: ПС: OpenPosition() - это не метод класса из стандартной библиотеке, это всего лишь моя функция, открывающая позиции.
Ну, это ничего не меняет. Запускается ведь она при разных условиях.
Обновился до бильда 695. Стала вылезать ошибка при компилировании инклуда Object.mqh.
Обновился до бильда 695. Стала вылезать ошибка при компилировании инклуда Object.mqh.
Автоматически штатно обновились или просто файлы перенесли?
Если штатно при хранении файлов в UserData, то скопируйте каталог /MQL5 из корня программы в каталог данных (он открывается из меню Файл).
А что случилось с экономическим календарем, он существует?
дополнительный вопрос: На основе каких данных он формировался и как его в ДЦ "подключить"?
Вот это условие
if( mn < STP || mn >= STP )- оно по какой причине сформулировано таким образом? В нынешнем виде оно сработает при любом mn и STP. Зачем тогда его вообще вводить? А следующие два варианта - там идёт конкретное отсечение отдельных ситуаций.
А так вроде всё логично: one + two == tri (не вдаваясь в подробности расчётов one, two и tri) во всех трёх вариантах.
Об этом и речь. Я хочу общее пространство ( случай 1) разделить на две группы (случаи 2 и 3). По логике должно быть верно выражение one + two == tri, а у меня оно не выполняется. В первом условии one=148,а во-втором 172. Тоже не севпадение и для two и для tri. И в чем проблема не могу понять.
Может проблема в общем условии? Этот код еще от чего-то зависит?
Просто банальный пример:
условие (а): открываемся, если бар на H1 возрастает. TP=SL=100
условие (б): открываемся, если бар на H1 убывает. TP=SL=100
дополнительное условие: второй раз условия не проверяем, если уже есть позиция.
Тогда при включении (а) плюс (б) мы будем открываться каждый раз как только сработал TP/SL.
если включим (а) мы будем открываться во всех первых случаях плюс (!!!!) еще несколько раз, когда мы не открывались потому, что до этого открылись по условию (б)
и для включения только условия (б) аналогично
Да посмотрите внимательнее: как раз-таки это сравнение (one + two == tri) и выполняется, для каждого из вариантов.
Ну так это совсем другой вопрос, а именно: почему значение one из первого варианта не равно значению one из второго и третьего вариантов.
Вы во втором и третьем вариантах вводите ограничительное условие по сравнению с первым вариантом. Продумайте, почему, например, во втором варианте значение one увеличивается по сравнению с первым вариантом. Из приведённой части кода это пока не понятно.
К предыдущему посту.
В третьем случае: one=0, two=124, tri=124.
Данные не совпадают, а должны совпадать, т.к. второй и третий случаи являюся отдельными частями первого условия. Не могу понять в чем проблема.
ПС: input int STP=200;
1. Выбираю и пространство2 (one) и пространство3 (two); 230 = 148 + 82, т.е. пространство2 (one) = 148, а пространство3 (two)=82.
2. ... Должно остаться 148, а стало 172.
3. ... Должно остаться 82, а становится 124.
Я об этом и говорю: вопрос для Вас состоит в том, почему значение one из первого варианта не равно значению one из второго и третьего вариантов.
Чтобы найти ошибку в этом логическом допущении, предлагаю сделать очень просто: вывести на печать каждый случай увеличения "пространствХ" во всех трёх вариантах, сравнить результаты и проанализировать, по какой именно причине "значения пространств2 и пространства3" не являются одинаковыми.
Дополнение. ilunga уже намекнул, что при переходе от одного варианта к другому могут быть потеряны те или иные сделки. Ведь у Вас же в тело оператора if() включена убойная по своей силе функция/метод OpenPosition(). И в зависимости от условия, которое проверяется оператором if(), она срабатывает в разное время.
Сам так и делаю, когда застреваю.
..Я в предыдущем своём сообщении ещё дополнение написал.
Ну, это ничего не меняет. Запускается ведь она при разных условиях.