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

 

Ребят, нужно чтобы отложенные ордера обновляли свое значение каждую минуту, модификация чего-то была кривая, вот решил сделать удаление и установку каждую минуту в обе стороны, на тестере работает норм, но в реале, как-то не проставляет. Поправьте или помогите вместо удаления, модификацию сделать.


      if(TimeCurrent()>TimeCheck_sn && TimeCurrent()<TimeCheck_en && Ogranichitel > 0)
        {

         if(IsNewCandle())
           {

            if(OrderOfSymbol>0 && OrderType() ==  OP_BUYSTOP)
               ticket2 =  OrderDelete(OrderTicket(),Violet);

            if(OrderOfSymbol>0 && OrderType() ==  OP_SELLSTOP)
               ticket2 =  OrderDelete(OrderTicket(),Violet);


            if(Close[1]>Open[1] && CountOrders()==0)
               if(NewsSellAllow == true)
                  ticket2 = OrderSend(Symbol(),OP_SELLSTOP, LotSk, Bid-(Skachok*Point), Slippage, 0, Bid-((Skachok+TPsk)*Point), "открыт ордер на продажу", Magic, 0, Red);
                  Print("OpenOrderSuccess");
                  
            if(Close[1]>Open[1] && CountOrders()==0)
               if(NewsBuyAllow == true)
                  ticket2 = OrderSend(Symbol(),OP_BUYSTOP, LotSk, Ask+(Skachok*Point), Slippage, 0, Ask+((Skachok+TPsk)*Point), "открыт ордер на покупку", Magic, 0, Blue);
                  Print("OpenOrderSuccess");


            if(OrderType() ==  OP_BUYSTOP && OrderOfSymbol>0)
               ticket2 = OrderModify(OrderTicket(), (Ask+(Skachok*Point)), 0, (Ask+((Skachok+TPsk)*Point)), 0);

            if(OrderType() ==  OP_SELLSTOP && OrderOfSymbol>0)
               ticket2 = OrderModify(OrderTicket()+1, (Bid-(Skachok*Point)), 0, (Bid-((Skachok+TPsk)*Point)), 0);
           }
        }


      if(TimeCurrent() == TimeCheck_en)
        {


         if(IsNewCandle())
           {
            if(OrderOfSymbol>0 && OrderType() ==  OP_BUYSTOP)
               ticket2 =  OrderDelete(OrderTicket(),Violet);

            if(OrderOfSymbol>0 && OrderType() ==  OP_SELLSTOP)
               ticket2 =  OrderDelete(OrderTicket(),Violet);
           }


        }
 
Порт-моне тв #:

Ребят, нужно чтобы отложенные ордера обновляли свое значение каждую минуту, модификация чего-то была кривая, вот решил сделать удаление и установку каждую минуту в обе стороны, на тестере работает норм, но в реале, как-то не проставляет. Поправьте или помогите вместо удаления, модификацию сделать.


Вернись лучше к модификации, объясни что надо
 
Tretyakov Rostyslav #:
Вернись лучше к модификации, объясни что надо

нужно на новой свече каждый раз модифицировать отложку в обе стороны с заданным отступом в пунктах и по тейкпрофиту (классика вроде), если пробивает (прострел на новости), то ордер открывается (вторую отложку можно автоматом закрыть), но пока не открылся, то снова и снова модифицировать; и все это в заданном промежутке времени. указанном в параметрах советника.

 
Порт-моне тв #:

нужно на новой свече каждый раз модифицировать отложку в обе стороны с заданным отступом в пунктах и по тейкпрофиту (классика вроде), если пробивает (прострел на новости), то ордер открывается (вторую отложку можно автоматом закрыть), но пока не открылся, то снова и снова модифицировать; и все это в заданном промежутке времени. указанном в параметрах советника.

А как первые ордера выставляются?
 
Tretyakov Rostyslav #:
А как первые ордера выставляются?
if(Close[1]>Open[1] && CountOrders()==0)
               if(NewsSellAllow == true)
                  ticket2 = OrderSend(Symbol(),OP_SELLSTOP, LotSk, Bid-(Skachok*Point), Slippage, 0, Bid-((Skachok+TPsk)*Point), "открыт ордер на продажу", Magic, 0, Red);
                  Print("OpenOrderSuccess");
                  
            if(Close[1]>Open[1] && CountOrders()==0)
               if(NewsBuyAllow == true)
                  ticket2 = OrderSend(Symbol(),OP_BUYSTOP, LotSk, Ask+(Skachok*Point), Slippage, 0, Ask+((Skachok+TPsk)*Point), "открыт ордер на покупку", Magic, 0, Blue);
                  Print("OpenOrderSuccess");
 
Порт-моне тв #:
Сейчас посмотрю
 
Порт-моне тв #:
У тебя для обоих типов ордеров одиноковое условие
if(Close[1]>Open[1] && CountOrders()==0)
 
Tretyakov Rostyslav #:
У тебя для обоих типов ордеров одиноковое условие

так мне так и надо, в обе стороны же или надо что-то добавить?

 
Порт-моне тв #:

так мне так и надо, в обе стороны же или надо что-то добавить?

Вот...модификация один раз на открытии бара

Что касается открытия, то если ты по новостям торгуешь, тогда "Close[1]>Open[1]" вообще не надо, а если свеча имеет значение, то

в одну сторону "Close[1]>Open[1]", а в другую "Close[1]<Open[1]"

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(Close[1]>Open[1] && CountOrders()==0)
     {
      if(NewsSellAllow == true)
        {
         ticket2 = OrderSend(Symbol(),OP_SELLSTOP, LotSk, Bid-(Skachok*Point), Slippage, 0, Bid-((Skachok+TPsk)*Point), "открыт ордер на продажу", Magic, 0, Red);
         Print("OpenOrderSuccess");
        }
     }
   if(Close[1]>Open[1] && CountOrders()==0)
     {
      if(NewsBuyAllow == true)
        {
         ticket2 = OrderSend(Symbol(),OP_BUYSTOP, LotSk, Ask+(Skachok*Point), Slippage, 0, Ask+((Skachok+TPsk)*Point), "открыт ордер на покупку", Magic, 0, Blue);
         Print("OpenOrderSuccess");
        }
     }
   if(newbar!=Time[0])
     {
      ModifyOrder();
      newbar=Time[0];
     }
  }
//+------------------------------------------------------------------+
//| Подсчет открытых ордеров                                         |
//+------------------------------------------------------------------+
int CountOrders(int ot=-1) 
  {
   int cnt=0;
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol&&OrderMagicNumber()==Magic)
           {
            if(OrderType()==ot||ot==-1) cnt++;
           }
        }
     }
   return(cnt);
  }
//+------------------------------------------------------------------+
//| Модификация ордера                                               |
//+------------------------------------------------------------------+
void ModifyOrder()
  {
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol&&OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUYSTOP&&OrderOpenPrice()!=Ask+(Skachok*Point))
              {
               if(OrderModify(OrderTicket(), Ask+(Skachok*Point), 0, Ask+((Skachok+TPsk)*Point)))
                 {Print("Ордер модифицирован");}
               else
                 {Print("Ошибка модификации ордера:", GetLastError());}
              }
            if(OrderType()==OP_SELLSTOP&&OrderOpenPrice()!=Bid-(Skachok*Point))
              {
               if(OrderModify(OrderTicket(), Bid-(Skachok*Point), 0, Bid-((Skachok+TPsk)*Point)))
                 {Print("Ордер модифицирован");}
               else
                 {Print("Ошибка модификации ордера:", GetLastError());}
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
 
Tretyakov Rostyslav #:

Вот...модификация один раз на открытии бара

Что касается открытия, то если ты по новостям торгуешь, тогда "Close[1]>Open[1]" вообще не надо, а если свеча имеет значение, то

в одну сторону "Close[1]>Open[1]", а в другую "Close[1]<Open[1]"

благодарю, завтра с утра погоняю

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