Помогите разобраться

 

Привет форумчане! Нужна Ваша помощь: нужно открыть одновременно несколько позиций (ордеров) бай и селл (например 4 ордера бай и столько же селл).

написал для этого такую штуку:

void Run(bool use,string time)
 {
   if(use&&time==TimeToStr(TimeCurrent(),TIME_MINUTES)&&CountOrders()==0)
   {
      if(LotAmount!=0)
      {
         for(int i=0;i<LotAmount;i++)
         {
            if(OpenOrder(1,1,Autolots(),TakeProfit,StopLoss,Magic,0))
            {
               ObjectCreate(0,"Реальный Тейк Профит для БАЙ",OBJ_HLINE,0,TimeCurrent(),NormalizeDouble(Bid+NormalizeDouble(RealTakeProfit*Point,Digits()),Digits()));
            }
            if(OpenOrder(2,1,Autolots(),TakeProfit,StopLoss,Magic,0))
            {
               ObjectCreate(0,"Реальный Тейк Профит для СЕЛЛ",OBJ_HLINE,0,TimeCurrent(),NormalizeDouble(Ask-NormalizeDouble(RealTakeProfit*Point,Digits()),Digits()));
            }
         }
      }
   }
 }

где LotAmount - количество ордеров

OpenOrder - пользовательская функция для открытия ордеров.

Но эта штука не везде работает... у большинства брокеров все ок, но есть такие где открывается только по одному ордеру бай и селл, а дальше выдает ошибку 129 (неправильная цена). Не понимаю почему эту ошибку выдает только в некоторых брокерах (лично я столкнулся с одним). Подскажите, может я что-то мелочное упустил или может это вовсе не правильно...

 
Maksim Neimerik:

Привет форумчане! Нужна Ваша помощь: нужно открыть одновременно несколько позиций (ордеров) бай и селл (например 4 ордера бай и столько же селл).

написал для этого такую штуку:

где LotAmount - количество ордеров

OpenOrder - пользовательская функция для открытия ордеров.

Но эта штука не везде работает... у большинства брокеров все ок, но есть такие где открывается только по одному ордеру бай и селл, а дальше выдает ошибку 129 (неправильная цена). Не понимаю почему эту ошибку выдает только в некоторых брокерах (лично я столкнулся с одним). Подскажите, может я что-то мелочное упустил или может это вовсе не правильно...

А здесь порядок?

         for(int i=0;i<LotAmount;i++)
         {
            if(OpenOrder(1,1,Autolots(),TakeProfit,StopLoss,Magic,0))
            {
               ObjectCreate(0,"Реальный Тейк Профит для БАЙ",OBJ_HLINE,0,TimeCurrent(),NormalizeDouble(Bid+NormalizeDouble(RealTakeProfit*Point,Digits()),Digits()));
            }
            if(OpenOrder(2,1,Autolots(),TakeProfit,StopLoss,Magic,0))
            {
               ObjectCreate(0,"Реальный Тейк Профит для СЕЛЛ",OBJ_HLINE,0,TimeCurrent(),NormalizeDouble(Ask-NormalizeDouble(RealTakeProfit*Point,Digits()),Digits()));
            }
         }
 
Maksim Neimerik:

Привет форумчане! Нужна Ваша помощь: нужно открыть одновременно несколько позиций (ордеров) бай и селл (например 4 ордера бай и столько же селл).

написал для этого такую штуку:

где LotAmount - количество ордеров

OpenOrder - пользовательская функция для открытия ордеров.

Но эта штука не везде работает... у большинства брокеров все ок, но есть такие где открывается только по одному ордеру бай и селл, а дальше выдает ошибку 129 (неправильная цена). Не понимаю почему эту ошибку выдает только в некоторых брокерах (лично я столкнулся с одним). Подскажите, может я что-то мелочное упустил или может это вовсе не правильно...

Скорее всего, в параметр price функции OrderSend() вы передаете устаревшие цены Bid/Ask. То есть, за то время, пока открывается первая пара ордеров, приходит новый тик и запрашиваемой цены открытия следующих ордеров уже нет в ценовом потоке. Убедитесь что вы используете RefreshRates() перед получением Bid/Ask.

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