Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Если вы хотите потратить несколько дней на решение этого простого вопроса, то, конечно, не стесняйтесь.... Я бы не стал.
Если вы знаете, когда это произойдет во время обратного тестирования, то это легко найти ... начните обратное тестирование за день до даты, когда это произойдет ... узнайте точно, с точностью до минуты, когда это произойдет ... для всех делений в вашем коде ... ... да, для всех, добавьте Print() перед строкой, содержащей деление, которая печатает делитель и ссылку на соответствующую строку кода....
Например:
Когда ваш код завершится с ошибкой деления на ноль, проверьте файл журнала, и в последних нескольких отпечатках будет выведена строка кода, которая привела к ошибке, и какая переменная была установлена в ноль....
... учитесь работать умнее и искать проблемы логично и эффективно.
Спасибо, что помогли и направили меня в нужное русло! Я нашел проблему (после того, как потратил много времени, шлепая отпечатки повсюду!).
На самом деле это связано с тем, что мой брокер (ILQ) использует условный фид и помощь от члена этого форума в моей теме по этому поводу. В двух словах вот код ниже - С ILQ вы можете торговать до 1 единицы. В окне транзакций MT4 вы должны установить точный размер единицы, который вы хотите (т.е. 0.01 || 874 единицы).
Можете ли вы помочь мне понять, какая часть этой формулы идет не так, где я поставил стрелку? С моей точки зрения, математика выглядит правильно?
Спасибо, что помогли и указали мне правильное направление, как с этим справиться! Я нашел проблему (после того, как потратил много времени, шлепая отпечатки повсюду!).
На самом деле это связано с тем, что мой брокер (ILQ) использует условный фид и помощь от члена этого форума в моей теме по этому поводу. В двух словах вот код ниже - С ILQ вы можете торговать до 1 единицы. В окне транзакции MT4 вы должны установить точный размер единицы, который вы хотите (т.е. 0.01 || 874 единицы).
Можете ли вы помочь мне понять, какая часть этой формулы идет не так, где я поставил стрелку? С моей точки зрения, математика выглядит правильно?
Хорошо, я кратко прочитал вашу другую тему об альтернативном расчете размера лота, но не достаточно подробно, но в общих чертах для решения этой проблемы вот что я мог бы сделать...
Что вызывает проблему? ts? tv? или оба? если оба равны 0.0, тогда произведение ts и tv будет 0.0 ... bt если только один из них иногда возвращается как 0.0, тогда вам нужно решить проблему только с одним из них ....
TickSize не изменится (насколько я знаю) ... вам не нужно продолжать читать его, прочитайте его в init(), но проверьте, что вы не получаете возвращаемое значение 0.0, или продолжайте читать его, если хотите, но используйте только то, что возвращается, если это не 0.0.
TickValue может меняться, но оно никогда не должно быть 0.0, поэтому если вы прочитали его и оно равно 0.0, не обновляйте его значение ... или попробуйте еще раз, а затем обновите.
Это не ракетостроение...
Я не понимаю, почему вам нужно продолжать спрашивать об этом, простой здравый смысл должен подсказать вам сделать то, что только что сказал Raptor. Если окажется, что ts*tv не является проблемой, распечатайте все остальные переменные, которые используются в качестве делителя.
@SDC - Я уже сделал это, лол? Я уже определил, откуда он берется, я просто сказал, что формула для определения размера лота выглядит хорошо для меня, и вместо того, чтобы биться вокруг да около, я опубликовал код, чтобы посмотреть, не упускаю ли я чего-то?
Вы заметите в коде "<<<<", указывающий на то, что распечатывается "0" или нулевое деление.....
@ RaptorUK - спасибо, приятель, ценю, что вы разобрали это. Я думаю, что знаю, как это сделать, исходя из ваших слов - я поиграю с этим немного и сообщу, чтобы подтвердить, что проблема решена :)
Я пробовал использовать "static double tv = 0;" и затем присваивать значение тика в "int init", а затем обновлять этот static double на каждой новой свече H1, если "tv==0", но он все равно не выдает ничего выше "0"? Рассматриваемая валютная пара - GBPJPY (все это в Strategy Tester).
Извините, если я медленно работаю...?
Итак, его "TickValue" возвращает "0".
Я пробовал использовать "static double tv = 0;" и затем присваивать значение тика в "int init", а затем обновлять этот static double на каждой новой свече H1, если "tv==0", но он все равно не выдает ничего выше "0"? Рассматриваемая валютная пара - GBPJPY (все это в Strategy Tester).
Извините, если я медленно говорю...?
Извините, я хотел сказать, что в основном я пробовал оба способа. То есть я пытался просто сделать "tv = MarketInfo(Symbol(), MODE_TICKVALUE);" в секции "int init"... (и "static double tv = 0;").
В принципе, значение тика всегда равно "0"? (У меня это печатается для меня, конечно!).
Аналогично, когда я перехожу к бэктесту на EURUSD, значение тика также говорит мне "0", однако ему удается успешно выполнить весь бэктест без ошибки нулевого деления с 2001-2013?
UPDATE: Итак, я провел тест на обычном брокере на живых рынках, у которого есть лот, и тиковое значение возвращало цифру > 0. Однако, когда я перекинул этот же скрипт на того же брокера на живом рынке, у которого есть условный фид, тиковое значение вернулось как "0"? Есть идеи, как мне обойти эту ошибку с размером лота при использовании условного фида (торговля до 1 единицы)?
Извините, я хотел сказать, что в основном я пробовал оба способа. То есть я пытался просто сделать "tv = MarketInfo(Symbol(), MODE_TICKVALUE);" в секции "int init"... (и "static double tv = 0;").
В принципе, значение тика всегда равно "0"? (У меня это печатается для меня, конечно!).
Аналогично, когда я перехожу к бэктесту на EURUSD, значение тика также говорит мне "0", однако ему удается успешно выполнить весь бэктест без ошибки нулевого деления с 2001-2013 ?
Из кода, который вы показали ... это невозможно, если только вы не вызываете функцию, которую вы показали ....
Если TICKVALUE всегда 0.0, то tv = 0.0, поэтому ts * tv = 0.0, поэтому вы всегда будете получать ошибку деления на ноль ....
Ваш терминал подключен к Broker? Или вы работаете с отключенным терминалом?
Я надеюсь, что это видео, которое я сделал (40 секунд или около того), иллюстрирует то, о чем я говорю (так как я не уверен, что говорю ясно или нет).
Видео: http://screencast.com/t/uMHY5DpM
Вы увидите, что в первой части, когда я бросаю скрипт на живой график (реальный счет), значение тика и размер тика возвращают "0" на этом "условном счете", который я иллюстрирую в окне лотов (единиц).
Вторая часть - с тем же брокером, но на основе лота, и на этот раз он возвращает значение тика и размер тика. Опять же, я иллюстрирую, что вы торгуете, используя лоты.....
Что касается тестера стратегий, я понятия не имею, почему он работает, а иногда нет. Счет был подключен, пока я запускал обратные тесты (на демо условном счете (единицы)).
Мой следующий вопрос: если это типичный ответ, который я получаю от условного счета, можете ли вы предложить, как мне исправить расчет размера позиции в таких обстоятельствах? Он прекрасно работает для лотового фида... Надеюсь, это объясняет немного лучше?
Итак, его "TickValue" возвращает "0".
Я пробовал использовать "static double tv = 0;" и затем присваивать значение тика в "int init", а затем обновлять этот static double на каждой новой свече H1, если "tv==0", но он все равно не выдает ничего выше "0"? Рассматриваемая валютная пара - GBPJPY (все это в Strategy Tester).
Извините, если я медленно...?
Как вы печатаете TickValue?
Поскольку цифры в GBPJPY обычно равны 3, вполне возможно, что TickValue печатает ноль из-за недостаточного количества знаков после запятой.
Чтобы быть абсолютно уверенным, возможно, стоит увеличить количество выводимых десятичных знаков.
Обратите внимание, что
также выводит ноль, если pips_to_bsl равен нулю. Возможно ли это?