Подскажите пожайлуста, как сделать писать правельно (Новечку)

 
int start()
        {

  int Magic=7612;
  int kolpos=0;
  int ticket=0;  
  double Lot=0.1;
//+------------------------------------------------------------------+  
//                   Checking if ONLY ONE position opened
//+------------------------------------------------------------------+    
for (int pos=0; pos<OrdersTotal();pos++)
   {
   
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
   
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
      kolpos++;
   }
//+------------------------------------------------------------------+  
//                   Order BUY signal
//+------------------------------------------------------------------+    
   if(High[1]<High[0]&&kolpos==0)
      OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,0,1111,0,Green);
   else
      Print("OrderSend_BUY ERROR = ", GetLastError());
//+------------------------------------------------------------------+  
//                   Order SELL signal
//+------------------------------------------------------------------+ 
   if(Low[1]>Low[0]&&kolpos==0)
      OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,0,1111,0,Green);
   else
      Print("OrderSend_SELL ERROR = ", GetLastError());
//+------------------------------------------------------------------+  
//                   Close by profit
//+------------------------------------------------------------------+      
   if(OrderSelect(0, SELECT_BY_POS)==true)
       Print("Profit for the order 0 ",OrderProfit());
//+------------------------------------------------------------------+ 
   if(OrderProfit()>1)
      OrderClose(OrderTicket(),0.1,Bid,3,Blue);
//+------------------------------------------------------------------+       
   return(0);
  }

Обьясните пожалуйста, почему у меня ордера не открываются, с учетом 1 позиции, и не закрываются...

2013.06.09 13:09:25 2010.01.07 15:42  MQL4_ADVISOR#1 EURUSD,M1: OrderSend_BUY ERROR = 138
2013.06.09 13:09:25 2010.01.07 15:42  MQL4_ADVISOR#1 EURUSD,M1: OrderClose error 138
2013.06.09 13:09:25 2010.01.07 15:42  MQL4_ADVISOR#1 EURUSD,M1: Profit for the order 0 8.1
2013.06.09 13:09:25 2010.01.07 15:42  MQL4_ADVISOR#1 EURUSD,M1: OrderSend error 148
2013.06.09 13:09:25 2010.01.07 15:42  MQL4_ADVISOR#1 EURUSD,M1: OrderSend_BUY ERROR = 138

 

Подскажите пожалуйста, как писать правильно (Новичку)

 
alehandro:

Обьясните пожалуйста, почему у меня ордера не открываются, с учетом 1 позиции, и не закрываются...

2013.06.09 13:09:25 2010.01.07 15:42  MQL4_ADVISOR#1 EURUSD,M1: OrderSend_BUY ERROR = 138
2013.06.09 13:09:25 2010.01.07 15:42  MQL4_ADVISOR#1 EURUSD,M1: OrderClose error 138
2013.06.09 13:09:25 2010.01.07 15:42  MQL4_ADVISOR#1 EURUSD,M1: Profit for the order 0 8.1
2013.06.09 13:09:25 2010.01.07 15:42  MQL4_ADVISOR#1 EURUSD,M1: OrderSend error 148
2013.06.09 13:09:25 2010.01.07 15:42  MQL4_ADVISOR#1 EURUSD,M1: OrderSend_BUY ERROR = 138


ERR_TRADE_TOO_MANY_ORDERS148Количество открытых и отложенных ордеров достигло предела, установленного брокером.

ERR_REQUOTE138Новые цены
 
Vinin:

Подскажите пожалуйста, как писать правильно (Новичку)


Зарание извеняюсь за свой русский язык я не из СНГ.
 
Спасибо документацию я тоже умею читать :)
 
int start()
        {

  int Magic=7612;
  int kolpos=0;
  int ticket=0;  
  double Lot=0.1;
//+------------------------------------------------------------------+  
//                   Checking if ONLY ONE position opened
//+------------------------------------------------------------------+    
for (int pos=0; pos<OrdersTotal();pos++)
   {
   
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
   
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
      kolpos++;
   }
//+------------------------------------------------------------------+  
//                   Order BUY signal
//+------------------------------------------------------------------+    
   if(High[1]<High[0]&&kolpos==0)
      OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,0,1111,0,Green);
   else
      Print("OrderSend_BUY ERROR = ", GetLastError());
//+------------------------------------------------------------------+  
//                   Order SELL signal
//+------------------------------------------------------------------+ 
   if(Low[1]>Low[0]&&kolpos==0)
      OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,0,1111,0,Green);
   else
      Print("OrderSend_SELL ERROR = ", GetLastError());
//+------------------------------------------------------------------+  
//                   Close by profit
//+------------------------------------------------------------------+      
   if(OrderSelect(0, SELECT_BY_POS)==true)
       Print("Profit for the order 0 ",OrderProfit());
//+------------------------------------------------------------------+ 
   if(OrderProfit()>5)
      OrderClose(OrderTicket(),0.1,Bid,3,Blue);
//+------------------------------------------------------------------+       
   return(0);
  }
Обьясните как работать с OrderSelect() и OrderProfit() что бы закрывались на 100% , читатал документацию...не совсем понятно...
 

alehandro:

Спасибо документацию я тоже умею читать :)


и понимать?
 
alehandro:
Обьясните как работать с OrderSelect() и OrderProfit() что бы закрывались на 100% , читатал документацию...не совсем понятно...

int OrderSend(  string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

против реквот попробуйте увеличить slippage

не открываете ордеров больше чем разрешает брокер 

 
int start()
        {

  int Magic=7612;
  int kolpos=0;
  int ticket=0;  
  double Lot=0.1;
//+------------------------------------------------------------------+  
//                   Checking if ONLY ONE position opened
//+------------------------------------------------------------------+    
for (int pos=0; pos<OrdersTotal();pos++)
   {
   
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
   
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
      kolpos++;
   }
//+------------------------------------------------------------------+  
//                   Order BUY signal
//+------------------------------------------------------------------+    
   if(High[1]<High[0]&&kolpos==0)
      OrderSend(Symbol(),OP_BUY,0.1,Ask,7,0,0,0,1111,0,Green);
   else
      Print("OrderSend_BUY ERROR = ", GetLastError());
//+------------------------------------------------------------------+  
//                   Order SELL signal
//+------------------------------------------------------------------+ 
   if(Low[1]>Low[0]&&kolpos==0)
      OrderSend(Symbol(),OP_SELL,0.1,Bid,7,0,0,0,1111,0,Green);
   else
      Print("OrderSend_SELL ERROR = ", GetLastError());
//+------------------------------------------------------------------+  
//                   Close by profit
//+------------------------------------------------------------------+      
   if(OrderSelect(0, SELECT_BY_POS)==true)
       Print("Profit for the order 0 ",OrderProfit());
//+------------------------------------------------------------------+ 
   if(OrderProfit()>15||OrderProfit()>-15)
      OrderClose(OrderTicket(),0.1,Bid,7,Blue);
//+------------------------------------------------------------------+       
   return(0);
  }
// Получается какой то балаган.

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

Управления количеством одновременно открытых ордеров, закрытие (CloseOrder) при достижении определеного плюса минуса...

Буду очень вам блогодарен.

 

Как пишите, то и имеете...

int start()
{
    int Magic=7612;
    int kolpos=0;
    int ticket=0;  
    double Lot=0.1, ld_Price;
//+------------------------------------------------------------------+  
//                   Checking if ONLY ONE position opened
//+------------------------------------------------------------------+    
    for (int pos = OrdersTotal() - 1; pos >= 0; pos--)
    {
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
//+------------------------------------------------------------------+  
//                   Close by profit
//+------------------------------------------------------------------+      
        if (OrderProfit() > 15 || OrderProfit() < -15)
        {
            if (OrderType() == OP_BUY) ld_Price = Bid;
            else if (OrderType() == OP_SELL) ld_Price = Ask;
            if (OrderClose (OrderTicket(), OrderLots(), ld_Price, 7, Blue)) continue;
        }
//+------------------------------------------------------------------+ 
        kolpos++;
    }
    if (kolpos > 0) return (0);
//+------------------------------------------------------------------+  
//                   Order BUY signal
//+------------------------------------------------------------------+    
    if (High[1] < High[0])
    {
       ticket = OrderSend (Symbol(), OP_BUY, Lot, Ask, 7, 0, 0, "", Magic, 0, Green);
       if (ticket <= 0) Print("OrderSend_BUY ERROR = ", GetLastError());
       else return (0);
    }
//+------------------------------------------------------------------+  
//                   Order SELL signal
//+------------------------------------------------------------------+ 
    if (Low[1] > Low[0])
    {
        ticket = OrderSend (Symbol(),OP_SELL, Lot, Bid, 7, 0, 0, "", Magic, 0, Green);
        if (ticket <= 0) Print("OrderSend_SELL ERROR = ", GetLastError());
    }
//+------------------------------------------------------------------+       
    return (0);
}
 

Тарас Большое вам спасибо,

 

Еще если можно...

Подскажите пожалуйста как лучше вставить условие СПРЕДА в этот код, когда спред большой что бы позиции не открывались...

int start()
{
    int Magic=7612;
    int kolpos=0;
    int ticket=0;  
    double Lot=0.1, ld_Price;
//+------------------------------------------------------------------+  
//                   Checking if ONLY ONE position opened
//+------------------------------------------------------------------+    
    for (int pos = OrdersTotal() - 1; pos >= 0; pos--)
    {
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
//+------------------------------------------------------------------+  
//                   Close by profit
//+------------------------------------------------------------------+      
        if (OrderProfit() > 15 || OrderProfit() < -15)
        {
            if (OrderType() == OP_BUY) ld_Price = Bid;
            else if (OrderType() == OP_SELL) ld_Price = Ask;
            if (OrderClose (OrderTicket(), OrderLots(), ld_Price, 7, Blue)) continue;
        }
//+------------------------------------------------------------------+ 
        kolpos++;
    }
    if (kolpos > 0) return (0);
//+------------------------------------------------------------------+  
//                   Order BUY signal
//+------------------------------------------------------------------+    
    if (High[1] < High[0])
    {
       ticket = OrderSend (Symbol(), OP_BUY, Lot, Ask, 7, 0, 0, "", Magic, 0, Green);
       if (ticket <= 0) Print("OrderSend_BUY ERROR = ", GetLastError());
       else return (0);
    }
//+------------------------------------------------------------------+  
//                   Order SELL signal
//+------------------------------------------------------------------+ 
    if (Low[1] > Low[0])
    {
        ticket = OrderSend (Symbol(),OP_SELL, Lot, Bid, 7, 0, 0, "", Magic, 0, Green);
        if (ticket <= 0) Print("OrderSend_SELL ERROR = ", GetLastError());
    }
//+------------------------------------------------------------------+       
    return (0);
}

 

 extern double spread;
spread=MarketInfo(Symbol(),MODE_SPREAD);
if(spread>2);

Типо того..  что бы не довал открывать...

Как лучше внедрить это условие в код (выше),?