Вопросы от "чайника" - страница 166

 
Alphazavr:

Что не так с кодом. Почему постоянно выводятся ошибки "failed cancel order #0 buy 0.00  at market [Invalid request]"

а где выбор позиции?

какое отношение имеют ордера к сделкам?

вы вообще что пытаетесь сделать?  позицию закрыть?


а имя order_remove_mql_trade_request    это страшный сон.

 
sergeev:

а где выбор позиции?

какое отношение имеют ордера к сделкам?

вы вообще что пытаетесь сделать?  позицию закрыть?


а имя order_remove_mql_trade_request    это страшный сон.

да, нужно пояснить.

назначение кода -- если есть открытая позиция, то отменить все лимитные ордера того же направления, что и позиция.

например, если открыта позиция БАЙ. то отменить все ордера типа бай лимит

Выбрать позицию забыл =). Ну ошибка не от этого (проверил).

 
Alphazavr:

Что не так с кодом. Почему постоянно выводятся ошибки "failed cancel order #0 buy 0.00  at market [Invalid request]"


   MqlTradeRequest order_remove_mql_trade_request = {0};
   order_remove_mql_trade_request.action = TRADE_ACTION_REMOVE;

   i = OrdersTotal();
   if(i > 0){
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY){
         for(i2 = 0;i2 <= i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL){
         for(i2 = 0;i2 <= i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}}


уберите эти знаки равенства.
 
sergeev:
уберите эти знаки равенства.
Убирал уже, не помогает. Неменимаю, где ошибка. Еше непонимаю, почему эти ошибки только с БАЙ ЛИМИТ ордерами, нет ни одной ошибки с селл лимитами.
 
Alphazavr:
Убирал уже, не помогает.
обманывать старших не хорошо.
 
sergeev:
обманывать старших не хорошо.

обманывать вообще нехорошо. я этого и не делаю.


сейчас еще раз перепроверил все вот с таким кодом:

   i = OrdersTotal();
   if(i > 0){
      PositionSelect(_Symbol);
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY){
         for(i2 = 0;i2 < i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL){
         for(i2 = 0;i2 < i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}}


результат тот же. часто возникает упомянутая ошибка

 
Alphazavr:

результат тот же. часто возникает упомянутая ошибка

"часто" - это пустой звук.

ёклмн, по вашему 2+2 часто равно 4 ?

не ленитесь - сделайте анализ отправки и анализ возвращаемой ошибки.

проверьте  ЧТО ВЫ ПЫТАЕТЕСЬ УДАЛИТЬ???

есть ли ордера в наличии на момент закрытия?

может вы пытаетесь удалить ордер, который уже удален.


в-третьих - кто вас так учил закрывать ордера???  Вы думаете что вы проходите по всем ордерам -  фигушки.   После вашего каждого закрытия OrdersTotal уменьшается на 1.   А вы все равно долбите своим i2++  до победы, до первичного i.

Вы даже не удосужились проверить - а не возвращает ли ошибку OrderGetTicket   или OrderSelect

плохо, очень плохо. 

вот из- за таких ручёнок  потом наши спутники с орбиты сходят.

 
sergeev:

"часто" - это пустой звук.

ёклмн, по вашему 2+2 часто равно 4 ?

не ленитесь - сделайте анализ отправки и анализ возвращаемой ошибки.

проверьте  ЧТО ВЫ ПЫТАЕТЕСЬ УДАЛИТЬ???

есть ли ордера в наличии на момент закрытия?

может вы пытаетесь удалить ордер, который уже удален.


в-третьих - кто вас так учил закрывать ордера???  Вы думаете что вы проходите по всем ордерам -  фигушки.   После вашего каждого закрытия OrdersTotal уменьшается на 1.   А вы все равно долбите своим i2++  до победы, до первичного i.

Вы даже не удосужились проверить - а не возвращает ли ошибку OrderGetTicket   или OrderSelect

плохо, очень плохо. 

вот из- за таких ручёнок  потом наши спутники с орбиты сходят.

насчет Вашего "в третьих", замечу что Вы правы =). я был уверен что дело совсем не в этом, иначе бы при тестировании были ошибки не только с байлимитами, но и с селллимитами. а вообще, конечно же так не годится закрывать ордера. Вообщем спасибо что попытались помоч и наставить на путь

 

Приветствую господа.

Прошу помочь разобраться.  Перед нами прототип windows функции, эмулирующей нажатие клавиши:

VOID WINAPI keybd_event(__in  BYTE bVk,               // Тип BYTE, занимает 1 байт
                        __in  BYTE bScan,             // Тип BYTE, занимает 1 байт
                        __in  DWORD dwFlags,
                        __in  ULONG_PTR dwExtraInfo
);

Дело в том, что эта функция вызывается в MT4 c int'ами вместо байтов. Выглядит это так:

void keybd_event(int bVk,                 // Тип int, занимает 4 байта
                 int bScan,               // Тип int, занимает 4 байта
                 int dwFlags,
                 int dwExtraInfo);
В чем дело? Передача минимум 4 байта? Зависит ли от аппаратных средств?
 
220Volt:

Приветствую господа.

Прошу помочь разобраться.  Перед нами прототип windows функции, эмулирующей нажатие клавиши:

Дело в том, что эта функция вызывается в MT4 c int'ами вместо байтов. Выглядит это так:

В чем дело? Передача минимум 4 байта? Зависит ли от аппаратных средств?

При передаче параметров в функцию минимальным квантом является 32-битное целое. То есть в Вашем случае bVk и bScan перед передачей в функцию будут преобразованы к типу int

Поэтому приведённые выше прототипы функций не противоречат друг другу

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
Причина обращения: