Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Написал робота? Опубликуй его в Маркете и получай доход!
Mavellol
33
Mavellol 2014.06.15 20:00 

Помогите разобраться что за ошибка 4051, появляется когда я пытаюсь модифицировать ордер. Вот кот

bool New = false;

int KolBars;

double price; 

int ticket;


int start()

{

   price = High[1] - Bid;

   if (MathAbs(price) <= 1*Point && OrdersTotal() == 0)

   {

      OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, 0, 0, "Test", 123, 0, Red);

      OrderModifyX(ticket, Bid, 100, 100, 0, Red);

   }

   return(0);    

}

//-------------------------------------------------------------------------------------------------------------------------------+   

bool OrderModifyX(int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color)

{

   int err = GetLastError();

   err = 0;

   bool exit_loop = false;

   int ticket = -1;

   int Retry = 10;

   int cnt = 0;

   if (price == Bid || price == Ask)

   {

      while(!exit_loop)

      {

         OrderModify(ticket, price, stoploss, takeprofit, expiration, arrow_color);

         err    = GetLastError();

         switch(err)

         {

            case ERR_NO_ERROR:

               exit_loop = true;

               break;

            case ERR_SERVER_BUSY:

            case ERR_NO_CONNECTION:

            case ERR_OFF_QUOTES:

            case ERR_BROKER_BUSY:

            case ERR_TRADE_CONTEXT_BUSY:

            case ERR_INVALID_STOPS:

                cnt++;

                break;

            case ERR_INVALID_PRICE:

            case ERR_PRICE_CHANGED:

            case ERR_REQUOTE:

                RefreshRates();

                continue;

            default:

                exit_loop = true;

                break;

         }

         if (cnt > Retry)

            exit_loop = true;


         if(err != ERR_NO_ERROR)

            Print("Ошибка : " + err);

         if(err == ERR_NO_ERROR)

         {

            OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);

            return; 

         }

         Print("Ошибка открытия ордера после " + cnt + " попыток.");

         return;

      }

   }

}

    

Mavellol
33
Mavellol 2014.06.15 20:16  
аааа все понял переделал код, но теперь он выдает ошибку 130, что за фигня? помогите плиз!!! кот теперь такой

bool New = false;

int KolBars;

double price; 

int ticket;



int start()

{

   price = High[1] - Bid;

   if (MathAbs(price) <= 1*Point && OrdersTotal() == 0)

   {

      ticket = OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, 0, 0, "Test", 123, 0, Red);

      OrderModifyX(ticket, Bid, 100, 100, 0, Red);

   }

   return(0);    

}

//-------------------------------------------------------------------------------------------------------------------------------+   

bool OrderModifyX(int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color)

{

   int err = GetLastError();

   err = 0;

   bool exit_loop = false;

   int Retry = 10;

   int cnt = 0;

   if (price == Bid || price == Ask)

   {

      while(!exit_loop)

      {

         OrderModify(ticket, price, stoploss, takeprofit, expiration, arrow_color);

         err    = GetLastError();

         switch(err)

         {

            case ERR_NO_ERROR:

               exit_loop = true;

               break;

            case ERR_SERVER_BUSY:

            case ERR_NO_CONNECTION:

            case ERR_OFF_QUOTES:

            case ERR_BROKER_BUSY:

            case ERR_TRADE_CONTEXT_BUSY:

            case ERR_INVALID_STOPS:

                cnt++;

                break;

            case ERR_INVALID_PRICE:

            case ERR_PRICE_CHANGED:

            case ERR_REQUOTE:

                RefreshRates();

                continue;

            default:

                exit_loop = true;

                break;

         }

         if (cnt > Retry)

            exit_loop = true;



         if(err != ERR_NO_ERROR)

            Print("Ошибка : " + err);

         if(err == ERR_NO_ERROR)

         {

            OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);

            return; 

         }

         Print("Ошибка открытия ордера после " + cnt + " попыток.");

         return;

      }

   }

}

    
Vadim Zhunko
5219
Vadim Zhunko 2014.06.16 07:16  
Может переделаете свои посты через кнопку SRC?
Mavellol
33
Mavellol 2014.06.16 08:12  
О, а так действительно удобней, спасибо за совет. Со своим вопросом разобрался... не знал что стопы нужно указывать в цене, а не в пунктах.
Dmitry Fedoseev
41180
Dmitry Fedoseev 2014.06.16 10:31  
bool exit_loop = false;

  ...

   if (price == Bid || price == Ask)

   {

      while(!exit_loop)

      {

         OrderModify(ticket, price, stoploss, takeprofit, expiration, arrow_color);

 

Выделенное красным кажется подозрительным. Попытка модифицировать цену открытия ордера, притом установить текующю рыночную цену.

Mavellol
33
Mavellol 2014.06.17 14:11  
Integer:

 

Выделенное красным кажется подозрительным. Попытка модифицировать цену открытия ордера, притом установить текующю рыночную цену.


 

 

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