Logo

Вход

Войти с помощью соц. сетей
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
ТОП СООБЩЕНИЙ
14.09.2017, 12:44
Лучший ответ
Накопленные выплаты: 182 RUB
Сообщение от Rubinovi4 Посмотреть сообщение
Кидай кусок кода посмотрим что там у тебя не так. Можешь тут посмотреть мою закрывашку. Ну как пример, в принципе вполне себе такой рабочий. https://www.forexdengi.com/threads/1...1#post17500133 Закрывает на ура, причем будет долбить сервак, пока не добьется положительного результата.) А так, всегда выводи ошибку в алерты, что б видеть почему не закрывает. Может код нормальный, а чудеса со стороны дц.
Главное, чтобы с правильной паузой долбил, а то на движняке долбни и садят сервак.
А вообще, стопЫ надо ставить, а не жаловаться что сервак занят.
14.09.2017, 19:42
Лучший ответ
Накопленные выплаты: 1 RUB
Сообщение от MonyaMaker Посмотреть сообщение
Если уж тыркнул сервер, так паузу выдержи перед следующей командой.
Хорошо, а зачем держать? Видимо ты не понял о чём тут речь. Для чего держать паузу?
15.09.2017, 08:50
Лучший ответ
Накопленные выплаты: 182 RUB
Сообщение от Skulloy Посмотреть сообщение
Вы меня извините конечно, но вы сами это читали(то что скинули)? Спасибо большое за эту статью интересно очень, но к сожалению не увидел там того что вы мне говорите(про долбежку сервера) за то увидел то что пытался донести вам я:

Код останавливается и никакой беспорядочной долбежки не происходит до тех пор пока сервер не обработает запрос и не отправит ответ. Если брать другие валютные пары и соответственно советники в этот момент, то да там идет конкретная долбежка но по сути не на сервер а на наш МТ, он пропускает в порядке очереди все запросы на сервер, отклоняет их с ошибкой 146 если уже весит еще не получивший ответ с сервера приказ. Впринципе вижу смысл использования таймеров только что бы не напрягать терминал, постоянной долбежкой других советников, в то время пока не получен ответ с сервера на самый первый ордер.
Долбёжка, это вот это:
MQL код:

while(true)
{
if(OrderClose(ticket2,Lots,Bid,30,Green)) break;
}


"......сервер, отклоняет их с ошибкой 146..... " , т.е. вместо того, чтобы работать с более ранней командой OrderClose(), он проверяет вновь поступившую, и генерит ошибку, тем самым уменьшая время на обработку OrderClose(). Сервер то не резиновый.
15.09.2017, 12:54
Лучший ответ
Накопленные выплаты: 182 RUB
Сообщение от Skulloy Посмотреть сообщение
Ребят я не гуру, просто человек скинул статью где четко написанно что пока не получен ответ с сервера на первый запрос последующих просто нет, от сюда и дисскусия с этим человеком, я просто умею читать внимательно и есть опыт в программировании не mql. Все остальное я понял, спасибо!
Не комплексуй, просто делай.
14.09.2017, 16:43
Лучший ответ
Сообщение от Rubinovi4 Посмотреть сообщение
Кидай кусок кода посмотрим что там у тебя не так. Можешь тут посмотреть мою закрывашку. Ну как пример, в принципе вполне себе такой рабочий. https://www.forexdengi.com/threads/1...1#post17500133 Закрывает на ура, причем будет долбить сервак, пока не добьется положительного результата.) А так, всегда выводи ошибку в алерты, что б видеть почему не закрывает. Может код нормальный, а чудеса со стороны дц.
Вобщем вот код отвечающий за закрытие, этакий аналог того что вы мне скинули:
MQL код:
int CheckClose(int ticket)
{
if(ticket == ticket1)
{
if(!OrderClose(ticket,Lots,Bid,30,Green))
{
CheckClose(ticket);
}
}
if(ticket == ticket2)
{
if(!OrderClose(ticket2,Lots,Ask,30,Red))
{
CheckClose(ticket);
}
}
return 1;
}

в OnTick идут проверки всех условий на открытии новой свечи и закрытие ненужного ордера в случае переворота:
MQL код:
СheckClose(ticket1 или ticket2) - в зависимости от того какой ордер надо закрыть селл или бай

я думаю может с проскальзыванием что то не то, если честно я даже не понимаю что это, но проблема была на "Золоте" а это весьма волатильная пара. Только что по GBP/usd(тоже довольно волатильная) такая же фигня была, переполнение стэка(я думаю из за бесконечного выполнения функции самой себя) и еще выбило сообщение:
MQL код:
206132690 sell 1.00 GBPUSD closing at 1.3258 failed [Off quotes]

да забыл добавить что в большенстве случаев все работает нормально это вот вчера и сегодня проблемы начались, тоесть стоит думать только на функцию OrderClose

эх блин еслиб не эта лажа былаб щас прибыль в 50% к депо а не просадка в 40
14.09.2017, 19:43
Лучший ответ
Сообщение от MonyaMaker Посмотреть сообщение
[/SPOILER]
Да нет, не будет как в Ералаше, реальных технологических задержек надо придерживаться, а не долбить.
Код работает быстрее, чем сервер отрабатывает запросы.
Моя статистика показывает, что на одном ДЦ отработка команды идёт 150-180 миллисекунд, а на другом, 1800 - 2200, вот и долби, сервак ещё твою первую команду не отработал, а ты ему уже другую пялишь. Есть сомнения в написанном проверь сам на своём ДЦ.
Если уж тыркнул сервер, так паузу выдержи перед следующей командой.
Так ведь значение же от функции order close возвращается либо труе либо фалз взависимости от того как сервер отвечает, разве нет? Следовательно не виду не обходимости выжидать.
  • #1 Свернуть

    Проблемы с закрытием ордера советником.

    Все привет.
    Вобщем не могу добится от советника нормального закрытия ордера функцией orderClose по тиккету. Даже написал отдельную функцию которая вызывает саму себя в случае если ордер не зарывается, в итоге вчера по золоту не зарылся ордер и не открылся в другую сторону(получил убыток) во вкладке "эксперты" на времени предпологаемого закрытия, висит ошибака о переполнении стэка(видимо из за рекурсии). Что за фигня почему orderclose так сложно заставить работать, обьясните чайнику кто знает, спасибо)
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Сообщение от Skulloy Посмотреть сообщение
    Все привет.
    Вобщем не могу добится от советника нормального закрытия ордера функцией orderClose по тиккету. Даже написал отдельную функцию которая вызывает саму себя в случае если ордер не зарывается, в итоге вчера по золоту не зарылся ордер и не открылся в другую сторону(получил убыток) во вкладке "эксперты" на времени предпологаемого закрытия, висит ошибака о переполнении стэка(видимо из за рекурсии). Что за фигня почему orderclose так сложно заставить работать, обьясните чайнику кто знает, спасибо)
    Кидай кусок кода посмотрим что там у тебя не так. Можешь тут посмотреть мою закрывашку. Ну как пример, в принципе вполне себе такой рабочий. https://www.forexdengi.com/threads/1...1#post17500133 Закрывает на ура, причем будет долбить сервак, пока не добьется положительного результата.) А так, всегда выводи ошибку в алерты, что б видеть почему не закрывает. Может код нормальный, а чудеса со стороны дц.
    Вывод/пополнение Инста -счёта в TETHER / BTC/LTC<=> PAYEER || ВидеоГайд вывод BTC <=>PAYEER || МИЛЛИОН с акции "Деньги за посты" ||
    Советники на заказ: teleg: @Rubinovi4 // s: Rubinovi4// i: 195951244// e: Mail_mt4@bk.ru

    Комментарий

    • #3 Свернуть

      Сообщение от Rubinovi4 Посмотреть сообщение
      Кидай кусок кода посмотрим что там у тебя не так. Можешь тут посмотреть мою закрывашку. Ну как пример, в принципе вполне себе такой рабочий. https://www.forexdengi.com/threads/1...1#post17500133 Закрывает на ура, причем будет долбить сервак, пока не добьется положительного результата.) А так, всегда выводи ошибку в алерты, что б видеть почему не закрывает. Может код нормальный, а чудеса со стороны дц.
      Главное, чтобы с правильной паузой долбил, а то на движняке долбни и садят сервак.
      А вообще, стопЫ надо ставить, а не жаловаться что сервак занят.
      Последний раз редактировалось MonyaMaker; 14.09.2017, 12:48.

      Комментарий

      • #4 Свернуть

        Сообщение от Rubinovi4 Посмотреть сообщение
        Кидай кусок кода посмотрим что там у тебя не так. Можешь тут посмотреть мою закрывашку. Ну как пример, в принципе вполне себе такой рабочий. https://www.forexdengi.com/threads/1...1#post17500133 Закрывает на ура, причем будет долбить сервак, пока не добьется положительного результата.) А так, всегда выводи ошибку в алерты, что б видеть почему не закрывает. Может код нормальный, а чудеса со стороны дц.
        Вобщем вот код отвечающий за закрытие, этакий аналог того что вы мне скинули:
        MQL код:
        int CheckClose(int ticket)
        {
        if(ticket == ticket1)
        {
        if(!OrderClose(ticket,Lots,Bid,30,Green))
        {
        CheckClose(ticket);
        }
        }
        if(ticket == ticket2)
        {
        if(!OrderClose(ticket2,Lots,Ask,30,Red))
        {
        CheckClose(ticket);
        }
        }
        return 1;
        }

        в OnTick идут проверки всех условий на открытии новой свечи и закрытие ненужного ордера в случае переворота:
        MQL код:
        СheckClose(ticket1 или ticket2) - в зависимости от того какой ордер надо закрыть селл или бай

        я думаю может с проскальзыванием что то не то, если честно я даже не понимаю что это, но проблема была на "Золоте" а это весьма волатильная пара. Только что по GBP/usd(тоже довольно волатильная) такая же фигня была, переполнение стэка(я думаю из за бесконечного выполнения функции самой себя) и еще выбило сообщение:
        MQL код:
        206132690 sell 1.00 GBPUSD closing at 1.3258 failed [Off quotes]

        да забыл добавить что в большенстве случаев все работает нормально это вот вчера и сегодня проблемы начались, тоесть стоит думать только на функцию OrderClose

        эх блин еслиб не эта лажа былаб щас прибыль в 50% к депо а не просадка в 40
        Последний раз редактировалось Skulloy; 14.09.2017, 16:53.

        Комментарий

        • #5 Свернуть

          Сообщение от Skulloy Посмотреть сообщение
          206132690 sell 1.00 GBPUSD closing at 1.3258 failed [Off quotes]
          C этим бороться можно только двумя путями, первый уходить в другой дц. Либо использовать более развернутый вариант, твой вариант подойдет только для тестера. Потому что у тебя нет проверок на ошибки это раз, либо пробовать закрыться через бесконечный цикл while по другому победить не получится. Это всё издержки поставки "ликвидности" может происходить на новостях либо на открытии рынка. Вообщем на любых значимых движениях цены.
          Вывод/пополнение Инста -счёта в TETHER / BTC/LTC<=> PAYEER || ВидеоГайд вывод BTC <=>PAYEER || МИЛЛИОН с акции "Деньги за посты" ||
          Советники на заказ: teleg: @Rubinovi4 // s: Rubinovi4// i: 195951244// e: Mail_mt4@bk.ru

          Комментарий

          • #6 Свернуть

            Сообщение от Rubinovi4 Посмотреть сообщение
            C этим бороться можно только двумя путями, первый уходить в другой дц. Либо использовать более развернутый вариант, твой вариант подойдет только для тестера. Потому что у тебя нет проверок на ошибки это раз, либо пробовать закрыться через бесконечный цикл while по другому победить не получится. Это всё издержки поставки "ликвидности" может происходить на новостях либо на открытии рынка. Вообщем на любых значимых движениях цены.
            Странно сижу на инстафорексе, обьясните если не сложно какая разница между циклами while будет и мои вариантом, ведь точно также выбьет перепонение стэка и ничего не изменится, спасибо! И как понять более развернутый вариант использовать?

            Комментарий

            • #7 Свернуть

              Сообщение от Skulloy Посмотреть сообщение
              Странно сижу на инстафорексе, обьясните если не сложно какая разница между циклами while будет и мои вариантом, ведь точно также выбьет перепонение стэка и ничего не изменится, спасибо! И как понять более развернутый вариант использовать?
              Ну как бы тебе сказать, рекурсия сама по себе не очень, а тут, можно вообще уйти в бесконечность. Возьми листок бумаги и порисуй, мой вариант, как он отрабатывается, и как твой, когда как матрёшка идёт и ушло в бездну клонов самих себя. Понимаешь? Далее, обязательно должна быть проверка на ошибки, а не рекурсивный вызов, то есть .блок обработки ошибок и исходя из полученной ошибки, должны идти соответственные действия. На нет цен, жёсткий ответ, а на отсутствие денег, выход из программы.)
              Вывод/пополнение Инста -счёта в TETHER / BTC/LTC<=> PAYEER || ВидеоГайд вывод BTC <=>PAYEER || МИЛЛИОН с акции "Деньги за посты" ||
              Советники на заказ: teleg: @Rubinovi4 // s: Rubinovi4// i: 195951244// e: Mail_mt4@bk.ru

              Комментарий

              • #8 Свернуть

                Сообщение от Rubinovi4 Посмотреть сообщение
                Ну как бы тебе сказать, рекурсия сама по себе не очень, а тут, можно вообще уйти в бесконечность. Возьми листок бумаги и порисуй, мой вариант, как он отрабатывается, и как твой, когда как матрёшка идёт и ушло в бездну клонов самих себя. Понимаешь? Далее, обязательно должна быть проверка на ошибки, а не рекурсивный вызов, то есть .блок обработки ошибок и исходя из полученной ошибки, должны идти соответственные действия. На нет цен, жёсткий ответ, а на отсутствие денег, выход из программы.)
                Блин зеленый я еще совсем в этом любитель не более, но я так понял что когда вызывается функция инт много раз она в процеcсе рекурсии не "отчищается" из памяти и поэтому выбивает по переполнению стэка. C While такого не получится вроди как.
                а вот это
                На нет цен, жёсткий ответ
                тоже не совсем понял)))

                Комментарий

                • #9 Свернуть

                  Сообщение от Skulloy Посмотреть сообщение
                  тоже не совсем понял)))
                  Значит долбим до посинения) Остальное верное понял.)
                  Вывод/пополнение Инста -счёта в TETHER / BTC/LTC<=> PAYEER || ВидеоГайд вывод BTC <=>PAYEER || МИЛЛИОН с акции "Деньги за посты" ||
                  Советники на заказ: teleg: @Rubinovi4 // s: Rubinovi4// i: 195951244// e: Mail_mt4@bk.ru

                  Комментарий

                  • #10 Свернуть

                    Сообщение от Rubinovi4 Посмотреть сообщение
                    Значит долбим до посинения) Остальное верное понял.)
                    Думаю так будет работать:

                    MQL код:
                    if(SD1>0 && SH>0)
                    {
                    if(markbuy == 0)
                    {
                    if(OrderSelect(ticket2,SELECT_BY_TICKET,MODE_TRADE S))
                    {
                    while(true)
                    {
                    if(OrderClose(ticket2,Lots,Bid,30,Green)) break;
                    }


                    ниже идет код открытия сделки в другую сторону

                    Я бы и сразу так сделал без создания дополнительной функции, просто незнал что While можно так использовать.

                    Комментарий

                    • #11 Свернуть

                      Сообщение от Skulloy Посмотреть сообщение
                      Я бы и сразу так сделал без создания дополнительной функции, просто незнал что While можно так использовать.
                      НУ в принципе да. Найди и добавь дополнительную проверку на ошибки. Хотя для поиграться пойдет. А OrderSelect у тебя откуда получается значения, всё верно там? А то будешь потом искать ошибку, почему не хочешь сразу сделать в одном блоке, или так прям необходимо всё это дробить? Я делаю всё в одном блоке, а значения передаю из вызывающего блока. Мне так проще, косяки находить если что-то идет не так. Хотя смотри сам как тебе нравится конечно.
                      Вывод/пополнение Инста -счёта в TETHER / BTC/LTC<=> PAYEER || ВидеоГайд вывод BTC <=>PAYEER || МИЛЛИОН с акции "Деньги за посты" ||
                      Советники на заказ: teleg: @Rubinovi4 // s: Rubinovi4// i: 195951244// e: Mail_mt4@bk.ru

                      Комментарий

                      • #12 Свернуть

                        Сообщение от Rubinovi4 Посмотреть сообщение
                        НУ в принципе да. Найди и добавь дополнительную проверку на ошибки. Хотя для поиграться пойдет. А OrderSelect у тебя откуда получается значения, всё верно там? А то будешь потом искать ошибку, почему не хочешь сразу сделать в одном блоке, или так прям необходимо всё это дробить? Я делаю всё в одном блоке, а значения передаю из вызывающего блока. Мне так проще, косяки находить если что-то идет не так. Хотя смотри сам как тебе нравится конечно.
                        Советник работает одним ордером всегда либо бай (ticket1) либо селл(ticket2) исходя из показаний 2ух индикаторов, если один закрывается открывается противоположный, типа реверс. Рассчитываю на то что буду закрывать открытые им сделки в ручную или по тейк профиту выставленному заранее, но если флэт допустим то реверс(потери есть но небольшие). Я бы может и не прочь оптимизировать код но пока не знаю как без дробления обойтись
                        Проверку на ошибки вы имеете ввиду GetLastError() чтобы выводил в лог ошибку при закрытии?

                        Комментарий

                        • #13 Свернуть

                          Сообщение от Skulloy Посмотреть сообщение
                          Советник работает одним ордером всегда либо бай (ticket1) либо селл(ticket2) исходя из показаний 2ух индикаторов, если один закрывается открывается противоположный, типа реверс. Рассчитываю на то что буду закрывать открытые им сделки в ручную или по тейк профиту выставленному заранее, но если флэт допустим то реверс(потери есть но небольшие). Я бы может и не прочь оптимизировать код но пока не знаю как без дробления обойтись
                          Проверку на ошибки вы имеете ввиду GetLastError() чтобы выводил в лог ошибку при закрытии?
                          Так и назови их по людски, а то какие-то ticket1 ticket2 не понятные. Да и самому легче будет понимать. До оптимизировать еще надо закончить работу по написанию. Нет, что тебе даст чт оошибку выведет в журнал или на алерт? Тебе от этого легче станет, я всегда над этой глупостью угораю, даже у именитых програмеров такою тупость вижу. С ней надо бороться, я же написал примерно что делать в случае ошибок, в постах выше. Посмотри.
                          Вывод/пополнение Инста -счёта в TETHER / BTC/LTC<=> PAYEER || ВидеоГайд вывод BTC <=>PAYEER || МИЛЛИОН с акции "Деньги за посты" ||
                          Советники на заказ: teleg: @Rubinovi4 // s: Rubinovi4// i: 195951244// e: Mail_mt4@bk.ru

                          Комментарий

                          • #14 Свернуть

                            Сообщение от Rubinovi4 Посмотреть сообщение
                            Так и назови их по людски, а то какие-то ticket1 ticket2 не понятные. Да и самому легче будет понимать. До оптимизировать еще надо закончить работу по написанию. Нет, что тебе даст чт оошибку выведет в журнал или на алерт? Тебе от этого легче станет, я всегда над этой глупостью угораю, даже у именитых програмеров такою тупость вижу. С ней надо бороться, я же написал примерно что делать в случае ошибок, в постах выше. Посмотри.
                            а ну это я понял)) спасибо!

                            Комментарий

                            • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
                            • #15 Свернуть

                              Сообщение от Rubinovi4 Посмотреть сообщение
                              Значит долбим до посинения)
                              Не надо учить людей плохому...

                              Комментарий

                              X