Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Добавляй наш канал в Twitter'e и следи за новостями!
Владимир
16
Владимир 2015.11.12 06:24 

Вот кусок кода:

void OnTick()

{
   if(CountBuy()!=0)
   {
      OrderSend(Symbol(), OP_BUYSTOP, Lots, PriceB, 5, 0, 0, "", 100500, 0, Green);
   }
  
   if(CountSell()!=0)
   {
      OrderSend(Symbol(), OP_SELLSTOP, Lots, PriceS, 5, 0, 0, "", 100500, 0, Red);
   }
 
 
 }
//+------------------------------------------------------------------+
int CountSell()
{
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
   {
      if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
      {
      if(OrderSymbol()==Symbol())
      {
         if(OrderType()==OP_SELLSTOP);
         count++;
      }
   }}
   return(count);
}
//+------------------------------------------------------------------+
int CountBuy()
{
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
   {
      if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)){
      if(OrderSymbol()==Symbol())
      {
         if(OrderType()==OP_BUYSTOP);
         count++;
      }}
   }
   return(count);

}


По плану, советник должен открывать два отложенных ордера по заданной цене, если таких нет. Но открывается только один ордер.

Подскажите, что не так, а то уже весь мозг сломал.

Ihor Herasko
8443
Ihor Herasko 2015.11.12 09:09  

Потому что в условиях открытия указано: открывать новый ордер, если уже есть орде buy или sell. Если же ордеров нет, то новые открываться не будут.

P. S.  Вставляйте код правильно .

Владимир
16
Владимир 2015.11.12 19:25  
Scriptong:

Потому что в условиях открытия указано: открывать новый ордер, если уже есть орде buy или sell. Если же ордеров нет, то новые открываться не будут.

P. S.  Вставляйте код правильно .

Упс. Исправил, но теперь только один ордер на покупку открывается и все.
Ihor Herasko
8443
Ihor Herasko 2015.11.13 05:40  
calvuscaput:
Упс. Исправил, но теперь только один ордер на покупку открывается и все.
Покажите, что именно исправили.
Владимир
16
Владимир 2015.11.13 06:13  
Scriptong:
Покажите, что именно исправили.
void OnTick()
{
   if(CountBuy()==0)
   {
      OrderSend(Symbol(), OP_BUYSTOP, Lots, LastUpFractal(), 5, 0, 0, "", 100500, 0, Green);
   }
   
   else if(CountSell()==0)
   {
      OrderSend(Symbol(), OP_SELLSTOP, Lots, LastDownFractal(), 5, 0, 0, "", 100500, 0, Red);
   }
  
 
 }
//+------------------------------------------------------------------+
int CountSell()
{
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
   {
      if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
      {
      if(OrderSymbol()==Symbol())
      {
         if(OrderType()==OP_SELLSTOP);
         count++;
      }
   }}
   return(count);
}
//+------------------------------------------------------------------+
int CountBuy()
{
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
   {
      if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)){
      if(OrderSymbol()==Symbol())
      {
         if(OrderType()==OP_BUYSTOP);
         count++;
      }}
   }
   return(count);
}
Mislaid
556
Mislaid 2015.11.13 09:35  
calvuscaput:

Точка с запятой лишние в обоих функциях в этих фрагментах

if(OrderType()==OP_SELLSTOP);
if(OrderType()==OP_BUYSTOP);
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий