Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Скажем, цена поднимается на 600 пунктов от OrderOpenprice(), = StartTraillingStop (200) + 8(xai)*50
код находится здесь:
но код будет делать все xai от 0 до 8, скажем, код находится на xai = 4; это условие истинно?
if ( ( ( OrderClosePrice() - OrderOpenPrice() ) / Figure ) >= ( StartTrailingStop + ( CummulativeValue * xai ) ) )
да, тогда SL будет установлен на : StartTraillinStop (200) + 4(xai)*50 (идет вниз от предыдущего)
тогда xai 5, SL будет установлен на : StartTraillinStop (200) + 5(xai)*50.
и так далее, поэтому невозможно поставить прерывание после установки SL;
juniorlcq Ваш код гораздо легче читать, теперь вы его переформатировали. Я переформатировал его немного больше, чтобы сделать его меньше для размещения, я выделил возможные проблемы. Я думаю, что у вас может быть проблема "double == calculated double", которая мешает вашему коду выполнять некоторые траектории. Вы когда-нибудь читали тему о can price != price ?
Наибольшее подозрение у меня вызывают 2-й и 4-й пункты, так как они представляют собой более сложные вычисления.
Поместите операторы Print() после этих вычислений, чтобы проверить, действительно ли они делают == или нет.
Ошибка, известная как ошибка плавающей точки, может сделать их !=, даже если кажется, что они должны быть ==.
== действительно на 100% безопасно использовать только с целыми числами, поэтому вы можете изменить == на <= или >= в качестве теста.
Также в качестве примечания: Ваш код будет намного эффективнее, если вы вызовете OrderOpenPrice(), OrderStopLoss(), OrderClosePrice() один раз в начале цикла OrderSelect() и присвоите их значения локальным переменным для использования во всем остальном коде. Доступ к локальным переменным намного быстрее, чем к вызовам функций, поэтому вам следует избегать повторных вызовов функций для получения одного и того же результата... Как правило, чем больше розовых надписей в вашем коде, тем медленнее будет работать советник.
Я понимаю, я не могу заставить его работать, этот может работать с ордером buy, SL опускаются вниз, как объясняется:
Охххххх я не знал об этом . Спасибо WHRoeder :) .
Так значит ли это, что ,
допустим, OrdersTotal() == 3, с циклом обратного отсчета for ( int x = ( OrdersTotal() - 1 ) ; x >= 0 ; x-- ) , x сохранит первое значение как 2, затем продолжит цикл for с 2 и далее, не проходя через OrdersTotal() снова ?
juniorlcq Ваш код гораздо легче читать, теперь вы его переформатировали. Я переформатировал его немного больше, чтобы сделать его меньше для размещения, я выделил возможные проблемы. Я думаю, что у вас может быть проблема "double == calculated double", которая мешает вашему коду выполнять некоторые траектории. Вы когда-нибудь читали тему о can price != price ?
У меня наибольшее подозрение вызывают 2-й и 4-й пункты, так как они являются более сложными вычислениями.
Поместите операторы Print() после этих вычислений, чтобы увидеть, действительно ли они делают == или нет.
Ошибка, известная как ошибка плавающей точки, может сделать их !=, даже если кажется, что они должны быть ==.
== действительно на 100% безопасно использовать только с целыми числами, поэтому вы можете изменить == на <= или >= в качестве теста.
Нет, я не читал эту тему раньше. Только сейчас нашел.
То, что вы предложили, звучит логично. Если подумать, то иногда при рисовании линий в MT4 на свойствах цены она не показывает 5-значную цену, а иногда показывает что-то большее.
Но вот одна из моих плавающих сделок на предыдущем счете, я распечатал ее, чтобы посмотреть, как выглядит двойник с помощью простой кодировки печати. Странный MQL4 я думаю @.@ ?
Я все еще думаю, как мне модифицировать часть double == double ......
Также в качестве примечания: ваш код будет намного эффективнее, если вы вызовете OrderOpenPrice(), OrderStopLoss(), OrderClosePrice() один раз в начале цикла OrderSelect() и присвоите их значения локальным переменным для использования во всем остальном коде. Доступ к локальным переменным намного быстрее, чем к вызовам функций, поэтому вам следует избегать повторных вызовов функций для получения одного и того же результата... Как правило, чем больше в коде розовых надписей, тем медленнее будет работать советник.
Ооо, я не знал, что будет огромная разница в скорости исполнения, спасибо за руководство SDC. Буду модифицировать в соответствии с вашим руководством после того, как след стоп начал работать.
Попробуйте заменить последний блок кода на эту отладочную версию. Проверьте мой код, я его не компилировал.
Возможно, это что-то покажет, вы можете сделать что-то подобное и с другими условиями ==.
Попробуйте заменить последний блок кода на эту отладочную версию. Вы можете сделать что-то подобное с xa
Возможно, это что-то покажет, вы можете сделать что-то подобное и с другими условиями ==.
Да, проблема вылезла наружу, это проблема " double == calculated double problem ". Спасибо, что указали на проблему SDC.
Спасибо ffoorr за то, что указали на ту же проблему ранее, но я не отредактировал ее правильным образом и думал, что проблема не в этом.
У меня вопрос, мне нужно некоторое предложение, для 2-го и 3-го if во втором цикле for, лучше ли поместить в него оператор "between"? Например, OrderStopLoss() >= x + 1 && x - 1 ? Или лучше просто использовать >= или <= ?
Надеюсь, WHR не прочитает это, он будет в ярости, но я собираюсь сказать вам попробовать NormalizeDouble() .... это должно сделать эти условия равными, когда они должны быть равными. Не должно быть необходимости делать это и для стороны OrderStopLoss(), но если они все еще не равны, когда должны, вы можете попробовать сделать это для обеих сторон условия.....