Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Отслеживай все платежи в профиле. Это просто!
reterwerson
46
reterwerson 2014.10.23 06:07 

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

Почему, не понятно.

Вот код:

 void LimitOpenOrders14()

{

    int count = 0;

    for (int i=OrdersTotal()-1; i >= 0; i--)

    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true) continue;

    {

        if (OrderSymbol() == Symbol())

        if (OrderMagicNumber() == OrderId14)

        {

            count++;

        }

    }

    else

    {

        Print("OrderSend() error - ", ErrorDescription(GetLastError()));

    }

    if (count < OpenOrdersLimit14)

    {

        BuyOrder4();

        

    }

}

 

Подобные вещи творятся постоянно после каждого обновления. Я уже замучился исправлять коды то в одном блоке, то в другом. Пока ищу нужную документацию, пока разбираюсь проходит время и новое обновление сводит на нет все мои потуги в программировании. Когда кончится это издевательство? Ну с кодом, кто сможет помочь? Вместо ограничения получаю кучу открытых ордеров. Ещё вчера не мог нарадоваться на работу советника, а сегодня, при дополнительном тестировании блок ограничения перестал работать. Пожалуйста, помогите!

MetaQuotes
Админ
24944
Renat Fatkhullin 2014.10.23 06:30  

А чем занимается continue в этом куске кода?

Ошибка же налицо. 

pako
3311
pako 2014.10.23 07:13  
reterwer:

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

Почему, не понятно.

Вот код:

 void LimitOpenOrders14()

{

    int count = 0;

    for (int i=OrdersTotal()-1; i >= 0; i--)

    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true) continue;

    {

        if (OrderSymbol() == Symbol())

        if (OrderMagicNumber() == OrderId14)

        {

            count++;

        }

    }

    else

    {

        Print("OrderSend() error - ", ErrorDescription(GetLastError()));

    }

    if (count < OpenOrdersLimit14)

    {

        BuyOrder4();

        

    }

}

 

Подобные вещи творятся постоянно после каждого обновления. Я уже замучился исправлять коды то в одном блоке, то в другом. Пока ищу нужную документацию, пока разбираюсь проходит время и новое обновление сводит на нет все мои потуги в программировании. Когда кончится это издевательство? Ну с кодом, кто сможет помочь? Вместо ограничения получаю кучу открытых ордеров. Ещё вчера не мог нарадоваться на работу советника, а сегодня, при дополнительном тестировании блок ограничения перестал работать. Пожалуйста, помогите!

интересно мт4 больно, когда над ним так издеваются?
reterwerson
46
reterwerson 2014.10.23 07:32  

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

 void LimitOpenOrders14()

{

    int count = 0;

    for (int i=OrdersTotal()-1; i >= 0; i--)

    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

    {

        if (OrderSymbol() == Symbol())

        if (OrderMagicNumber() == OrderId14)

        {

            count++;

        }

    }

    else

    {

        Print("OrderSend() error - ", ErrorDescription(GetLastError()));

    }

    if (count < OpenOrdersLimit14)

    {

        BuyOrder4();

        

    }

}

Конечноя нашел обходные пути, но очень хотелось бы понять, что тут не так. 

Vitalie Postolache
12061
Vitalie Postolache 2014.10.23 08:07  
reterwer:

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

 

void LimitOpenOrders14()

{
    int count = 0;
    for (int i=OrdersTotal()-1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
        if (OrderSymbol() == Symbol())
        if (OrderMagicNumber() == OrderId14)
        {
            count++;
       }
    }
    else
    {
        Print("OrderSend() error - ", ErrorDescription(GetLastError()));
    }

    if (count < OpenOrdersLimit14)
    {
        BuyOrder4();
    }
}

Конечноя нашел обходные пути, но очень хотелось бы понять, что тут не так. 

О каком издевательстве речь? Пока видно только издевательство над кодом.

К чему там этот принт ошибки открытия?

А кто такая "OpenOrdersLimit14" и где ейный обьявитель и разруливатель? Почему не читаем ошибки в компиляторе? Обходные пути такие же гениальные?

reterwerson
46
reterwerson 2014.10.23 08:23  

О каком издевательстве речь? Пока видно только издевательство над кодом.

К чему там этот принт ошибки открытия?

А кто такая "OpenOrdersLimit14" и где ейный обьявитель и разруливатель? Почему не читаем ошибки в компиляторе? Обходные пути такие же гениальные?"

Понимать можно как угодно, но не вижу ни какого ответа по существу. 

Принт ошибки, что бы можно было прочитать в журнале или логе, но там ничего нет. Ошибок нет.

Нет ошибок и в компиляторе. 

reterwerson
46
reterwerson 2014.10.23 08:31  
evillive:

О каком издевательстве речь? Пока видно только издевательство над кодом.

К чему там этот принт ошибки открытия?

А кто такая "OpenOrdersLimit14" и где ейный обьявитель и разруливатель? Почему не читаем ошибки в компиляторе? Обходные пути такие же гениальные?

OpenOrdersLimit14. Это, что так важно? Или уж такой грамотный в программировании, что спрашивает детали, которые должен знать каждый новичёк?
Vitalie Postolache
12061
Vitalie Postolache 2014.10.23 08:39  
Все действия в кучу, в одной функции, и всего один принт. Пробуйте разделить все части этого "балета" - считать ордера отдельно, сравнивать с заданным пользователем ограничением отдельно и открывать позиции - тоже отдельно. Каждый раз - с принтами везде где надо и даже там где не надо. Вот что действительно обязан делать "каждый новичок", так это воткнуть принты повсюду, даже там, где ему кажется, что всё в порядке. Потому что иногда только кажется ;)
reterwerson
46
reterwerson 2014.10.23 08:40  
pako:
интересно мт4 больно, когда над ним так издеваются?

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

 

void LimitOpenOrders14()

{
    int count = 0;
    for (int i=OrdersTotal()-1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
        if (OrderSymbol() == Symbol())
        if (OrderMagicNumber() == OrderId14)
        {
            count++;
       }
    }
    else
    {
        Print("OrderSend() error - ", ErrorDescription(GetLastError()));
    }

    if (count < OpenOrdersLimit14)
    {
        BuyOrder4();
    }
}

Конечно я нашел обходные пути, но очень хотелось бы понять, что тут не так. 

reterwerson
46
reterwerson 2014.10.23 08:41  
pako:
интересно мт4 больно, когда над ним так издеваются?
Извиняюсь, с отчаяния накуролесил. Выше разметил код, который по прежнему не работает.
pako
3311
pako 2014.10.23 08:46  
reterwer:

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

Конечно я нашел обходные пути, но очень хотелось бы понять, что тут не так. 

интересно посмотреть , обходные пути

по русски напишите, что вы хотите от этого кода? 

/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий