Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1356

 
Lerchik:

То есть вы хотите сказать, что открытие ордера рыночного ордера по Ask будет равно открытию ордера BuyLimit.

Что-то тут не так. Допустим сейчас цена Bid равна 1.4500. Значит открыв ордер бай с рынка он встанет по цене Ask, а ask от Bid допустим 10 пунктов.

То ордер встанет 1.4510.

Теперь Ордер BuyLimit равен 1.4500. И цена опустившись на 10 пунктов ниже, чем цена отложки, по Ask откроет ордер. Не Bid-ом, а Ask-ом.

Немного не срастается. Это разные вещи и их сравнивать нельзя так.

Может я не прав?

Все ордера на покупку открываются по Ask и закрываются по Bid,и наоборот для ордеров на продажу.

Если лень читать, открой демо-счет и потренируйся.

 
Сергей Таболин:

Может Вы, для начала, ознакомитесь с документацией?

Вот что в документации:

Отложенный ордер 

Отложенный ордер — это распоряжение брокерской компании купить или продать финансовый инструмент в будущем по заданным условиям. Существует следующие типы отложенных ордеров:

  • Buy Limit — торговый приказ на покупку по цене "Ask" равной или меньшей, чем указанная в ордере. При этом текущий уровень цен больше значения установленного в ордере. Обычно ордера этого типа выставляются в расчете на то, что цена инструмента, опустившись до определенного уровня, начнет расти;

Но я не понимаю, что тут написано и как это работает.

То есть цена опустится ниже чем байлимит и аском откроет ордер. Но при этом ордер будет открыт по той же цене или выше?

Ведь ни примеров ничего об этом нигде нет. Есть только правила. А объяснять толком тут никто не хочет.

Вот я и добиваюсь хоть что-то.

 
Lerchik:

Вот что в документации:

Отложенный ордер 

Отложенный ордер — это распоряжение брокерской компании купить или продать финансовый инструмент в будущем по заданным условиям. Существует следующие типы отложенных ордеров:

  • Buy Limit — торговый приказ на покупку по цене "Ask" равной или меньшей, чем указанная в ордере. При этом текущий уровень цен больше значения установленного в ордере. Обычно ордера этого типа выставляются в расчете на то, что цена инструмента, опустившись до определенного уровня, начнет расти;

Но я не понимаю, что тут написано и как это работает.

То есть цена опустится ниже чем байлимит и аском откроет ордер. Но при этом ордер будет открыт по той же цене или выше?

Ведь ни примеров ничего об этом нигде нет. Есть только правила. А объяснять толком тут никто не хочет.

Вот я и добиваюсь хоть что-то.

BuyLimit можно выставить ТОЛЬКО ниже цены Ask. SellLimit можно выставить ТОЛЬКО выше цены Bid.

BuyStop можно выставить ТОЛЬКО выше цены Ask. SellStop можно выставить ТОЛЬКО ниже цены Bid.

Когда соответствующая цена дойдёт до соответствующего ордера - он будет активирован, породив при этом соответствующую позицию.

 
Lerchik:

Вот что в документации:

Отложенный ордер 

Отложенный ордер — это распоряжение брокерской компании купить или продать финансовый инструмент в будущем по заданным условиям. Существует следующие типы отложенных ордеров:

  • Buy Limit — торговый приказ на покупку по цене "Ask" равной или меньшей, чем указанная в ордере. При этом текущий уровень цен больше значения установленного в ордере. Обычно ордера этого типа выставляются в расчете на то, что цена инструмента, опустившись до определенного уровня, начнет расти;

Но я не понимаю, что тут написано и как это работает.

То есть цена опустится ниже чем байлимит и аском откроет ордер. Но при этом ордер будет открыт по той же цене или выше?

Ведь ни примеров ничего об этом нигде нет. Есть только правила. А объяснять толком тут никто не хочет.

Вот я и добиваюсь хоть что-то.

Открой демо-счет и потренируйся.

Buy Limit устанавливается ниже текущей цены Ask и откроется, когда  Ask опустится

Buy Stop устанавливается выше текущей цены  Ask и откроется,  когда  Ask поднимится

Buy открывается по текущей цене  Ask

 
MakarFX:

Открой демо-счет и потренируйся.

Buy Limit устанавливается ниже текущей цены Ask и откроется, когда  Ask опустится

Buy Stop устанавливается выше текущей цены  Ask и откроется,  когда  Ask поднимится

Buy открывается по текущей цене  Ask

Хоть что-то.

Едем дальше...

Хорошо, цена бид опустилась ниже цены отложки и аском открыла ордер. А вот цена ордера останется такая же, как была задана в ордере или будет другая?

 
Lerchik:

Хоть что-то.

Едем дальше...

Хорошо, цена бид опустилась ниже цены отложки и аском открыла ордер. А вот цена ордера останется такая же, как была задана в ордере или будет другая?

1 Цена Аск должна опустится до цены отложки

2 Цена остается

 
MakarFX:

1 Цена Аск должна опустится до цены отложки

2 Цена остается

Огромное спасибо за разъяснения. 

А то я уже голову сломал, почему у меня не получается так, как мне надо.

 

Всем добрый день.

Насколько я понял из ответов на мой предыдущий вопрос- мне нужно просто сделать обработку ошибок, которые могут возникнуть при открытии ордеров- это первое. И второе мне нужно сделать защиту от того, чтобы советник не долбил сервер при каждом тике в случае ошибки.

Первый вопрос- подскажите пожалуйста каким образом делается обработка ошибок?

Второй вопрос- как защититься от долбания сервера?

Сейчас сделки открываются вот таким образом

   /*УСЛОВИЕ 1*/
   if(flag_screen1==en_vbIkl_screen1 &&flag_screen2==en_vbIkl_screen2)
   { // НАЧАЛО УСЛОВИЕ 1
   if(ao_buy!=EMPTY_VALUE && count_orders_market_buy ==0)
   {
    if(OrderSend(Symbol(),OP_BUY,lot,Ask,slippages,Bid-sl,Bid+tp ,comment_ao_market_buy)) Print("Buy Open"); // ОТКРЫВАЕМ БАЙ ОРДЕР
   }
   } // КОНЕЦ УСЛОВИЕ1

// И ОТЛОЖКИ ВОТ ТАК

   /*УСЛОВИЕ 1*/
   if(flag_screen1==en_vbIkl_screen1 &&flag_screen2==en_vbIkl_screen2)
   { // НАЧАЛО УСЛОВИЕ 1
   
   if(ao_buy!=EMPTY_VALUE && count_orders_stop_buy ==0&& max_Price>Bid)
   { //НАЧАЛО ПРОВЕРКИ УСЛОВИЯ 1 НА ОТКРЫТИЕ
   
   Print("БАЙ СТОП AO УСЛОВИЕ 1");
        if( OrderSend(Symbol(),OP_BUYSTOP,lot,max_Price,slippages,max_Price-sl,max_Price+tp ,comment_ao_otloj_buy,Magik_number,TimeCurrent()+order_life_time))Print("BUY_STOP OPEN"); // ОТКРЫВАЕМ ОТЛОЖЕННЫЙ БАЙ ОРДЕР
   
   }  //КОНЕЦ ПРОВЕРКИ УСЛОВИЯ 1 НА ОТКРЫТИЕ
   } // КОНЕЦ УСЛОВИЕ1



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

         void data_orders(string comment="alt",int magik_number=123)
              {
         int I = 0;
   count_orders_all = 0;   //КОЛИЧЕСТВО ВСЕХ УСТАНОВЛЕННЫХ ОРДЕРОВ
   count_orders_market_all = 0; //КОЛИЧСТВО ВСЕХ РЫНОЧНЫХ ОРДЕРОВ
   count_orders_market_buy = 0;
   
   count_orders_stop_buy = 0;    //КОЛИЧЕСТВО СТОП БАЕВ
   count_orders_limit_buy = 0;   // КОЛИЧЕСТВО ЛИМИТ БАЕВ
   
   count_orders_stop_sell = 0;    //КОЛИЧЕСТВО СТОП СЕЛОВ
   count_orders_limit_sell = 0;   //КОЛИЧЕСТВО ЛИМИТ СЕЛОВ
   
   
  lot_orders_buy = 0;    //ОБЪЁМ ЛОТА ПО БАЙ ОРДЕРАМ
         lot_orders_sell = 0;      //ОБЪЁМ ЛОТА ПО СЕЛЛ ОРДЕРАМ
         balance_all = 0;          // БАЛАНС ПО ВСЕМ ОРДЕРАМ
         balance_buy = 0;         // БАЛАНС ПО ОРДЕРАМ БАЙ
         balance_sell = 0;        // БАЛАНС ПО ОРДЕРАМ СЕЛЛ
         
         
         
          for(int i = 0; i <= OrdersTotal();i ++) // перебор всех ордеров в цикле
          {
  
   if(OrderSelect(I , SELECT_BY_POS, MODE_TRADES))// выбираем ордер по переменной цикла
   {
    if(OrderMagicNumber() != magik_number || OrderSymbol() !=Symbol()) // если ордер не нашь то
    {
    continue; // переходим на следующую итерацию
    
    }
    if(comment== OrderComment() || comment=="alt")// если коментарий нашь то 
    {
    count_orders_all+=1;
    if(OrderType()== OP_BUY)
    {
    count_orders_market_all+=1;
    count_orders_market_buy+=1;
    }
    if(OrderType()== OP_SELL)
    {
    count_orders_market_all+=1;
    count_orders_market_sell+=1;
    }
    if(OrderType()== OP_BUYSTOP)
    {
    count_orders_stop_buy+=1;
    }
    if(OrderType()== OP_BUYLIMIT)
    {
    count_orders_limit_buy+=1;
    
    }
    if(OrderType()== OP_SELLSTOP)
    {
    count_orders_stop_sell+=1;
    
    }
    if(OrderType()== OP_SELLLIMIT)
    {
    count_orders_limit_sell+=1;
    
    }
    
    
    
    }
         
         
              }
              }
              }

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

 
DanilaMactep:

Всем добрый день.

напишите пожалуйста- как обработать ошибки праавильно и как избежать долбежа сервера на каждом тике при возникновении ошибки?
if (GetLastError()==141){Alert(GetLastError()); ExpertRemove();}
 
MakarFX:

И это дело надо пописать после каждой строки в которой есть попытка открыть ордер с помощью ордерсенд- правильно?

Но у меня вопрос- если эксперт ремув удалиьт мне советник с графика, то каким образом сделать так, чтобы он автоматически опять на график прикрепился и продолжил работу? можно как-то поподробней описать всю суть этого дела- ошибка 141-слишком много запросов. Хорошо, если запросов много удаляем эксперта с графика, а дальше-то что- ждать пока я с утра встану, всё переделаю и приду за компьютер, чтобы снова советник накинуть на график О_о?

Причина обращения: