Закрывать все сделки через 30м после открытия

 

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

Я совсем новичок, только разбираюсь. Бесконечно буду благодарен за любой совет, помощь. 

Вот EA которым пользуюсь: 

input bool   OpenBUY=True;
input bool   OpenSELL=True;
input bool   CloseBySignal=True;
input double StopLoss=0;
input double TakeProfit=0;
input double TrailingStop=0;
input int    RSIperiod=14;
input double BuyLevel=30;
input double SellLevel=70;
input bool   AutoLot=True;
input double Risk=10;
input double ManualLots=0.1;
input int    MagicNumber=123;
input string Koment="RSIea";
input int    Slippage=10;
//---
int OrderBuy,OrderSell;
int ticket;
int LotDigits;
double Trail,iTrailingStop;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double stoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
   OrderBuy=0;
   OrderSell=0;
   for(int cnt=0; cnt<OrdersTotal(); cnt++)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderComment()==Koment)
           {
            if(OrderType()==OP_BUY) OrderBuy++;
            if(OrderType()==OP_SELL) OrderSell++;
            if(TrailingStop>0)
              {
               iTrailingStop=TrailingStop;
               if(TrailingStop<stoplevel) iTrailingStop=stoplevel;
               Trail=iTrailingStop*Point;
               double tsbuy=NormalizeDouble(Bid-Trail,Digits);
               double tssell=NormalizeDouble(Ask+Trail,Digits);
               if(OrderType()==OP_BUY && Bid-OrderOpenPrice()>Trail && Bid-OrderStopLoss()>Trail)
                 {
                  ticket=OrderModify(OrderTicket(),OrderOpenPrice(),tsbuy,OrderTakeProfit(),0,Blue);
                 }
               if(OrderType()==OP_SELL && OrderOpenPrice()-Ask>Trail && (OrderStopLoss()-Ask>Trail || OrderStopLoss()==0))
                 {
                  ticket=OrderModify(OrderTicket(),OrderOpenPrice(),tssell,OrderTakeProfit(),0,Blue);
                 }
              }
           }
     }
   double rsi=iRSI(Symbol(),0,RSIperiod,PRICE_CLOSE,0);
   double rsi1=iRSI(Symbol(),0,RSIperiod,PRICE_CLOSE,1);
// double HTb=iCustom(Symbol(),0,"HalfTrend-1.02",0,0); //buy
// double HTs=iCustom(Symbol(),0,"HalfTrend-1.02",1,0); //buy
//--- open position
   if(OpenSELL && OrderSell<1 && rsi<SellLevel && rsi1>SellLevel) OPSELL();
   if(OpenBUY && OrderBuy<1 && rsi>BuyLevel && rsi1<BuyLevel) OPBUY();
//--- close position by signal
   if(CloseBySignal)
     {
      if(OrderBuy>0 && rsi<SellLevel && rsi1>SellLevel) CloseBuy();
      if(OrderSell>0 && rsi>BuyLevel && rsi1<BuyLevel) CloseSell();
     }
//---
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OPBUY()
  {
   double StopLossLevel;
   double TakeProfitLevel;
   if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
   if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;

   ticket=OrderSend(Symbol(),OP_BUY,LOT(),Ask,Slippage,StopLossLevel,TakeProfitLevel,Koment,MagicNumber,0,DodgerBlue);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OPSELL()
  {
   double StopLossLevel;
   double TakeProfitLevel;
   if(StopLoss>0) StopLossLevel=Ask+StopLoss*Point; else StopLossLevel=0.0;
   if(TakeProfit>0) TakeProfitLevel=Bid-TakeProfit*Point; else TakeProfitLevel=0.0;
//---
   ticket=OrderSend(Symbol(),OP_SELL,LOT(),Bid,Slippage,StopLossLevel,TakeProfitLevel,Koment,MagicNumber,0,DeepPink);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseSell()
  {
   int  total=OrdersTotal();
   for(int y=OrdersTotal()-1; y>=0; y--)
     {
      if(OrderSelect(y,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber)
           {
            ticket=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,Black);
           }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseBuy()
  {
   int  total=OrdersTotal();
   for(int y=OrdersTotal()-1; y>=0; y--)
     {
      if(OrderSelect(y,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==MagicNumber)
           {
            ticket=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,Black);
           }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LOT()
  {
   double lotsi;
   double ilot_max =MarketInfo(Symbol(),MODE_MAXLOT);
   double ilot_min =MarketInfo(Symbol(),MODE_MINLOT);
   double tick=MarketInfo(Symbol(),MODE_TICKVALUE);
//---
   double  myAccount=AccountBalance();
//---
   if(ilot_min==0.01) LotDigits=2;
   if(ilot_min==0.1) LotDigits=1;
   if(ilot_min==1) LotDigits=0;
//---
   if(AutoLot)
     {
      lotsi=NormalizeDouble((myAccount*Risk)/10000,LotDigits);
        } else { lotsi=ManualLots;
     }
//---
   if(lotsi>=ilot_max) { lotsi=ilot_max; }
//---
   return(lotsi);
  }
//+------------------------------------------------------------------+

Пытался через 

void CloseOrders()
  {
   int  total=OrdersTotal();
   for(int y=OrdersTotal()-1; y>=0; y--)
     {
      if(OrderSelect(y,SELECT_BY_POS,MODE_TRADES))
         if(TimeCurrent()>=OrderOpenTime()+20*60)
           {
            ticket=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,Black);
           }
     }
 
banalen:

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

Я совсем новичок, только разбираюсь. Бесконечно буду благодарен за любой совет, помощь. 

Вот EA которым пользуюсь: 

Пытался через 

int start()
  {
  CloseOrders();
  double stoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
  // дальше существующий код
 
banalen:

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

Я совсем новичок, только разбираюсь. Бесконечно буду благодарен за любой совет, помощь. 

Вот EA которым пользуюсь: 

Пытался через 

Это не правильно написано

ticket=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,Black);

Бай закрывается по Биду, селл по Аску

 
Evgeniy Zhdan:

Это не правильно написано   Бай закрывается по Биду, селл по Аску

OrderClosePrice() это и есть Бид для Бай, Аск для селл. Попробуйте проверить.
 
Konstantin Erin:
OrderClosePrice() это и есть Бид для Бай, Аск для селл. Попробуйте проверить.

Прекратите.


 
Evgeniy Zhdan: Прекратите.
Откройте второй глаз и внимательно прочитайте определение

 

Для закрытого ордера OrderClosePrice() - это цена, по которой ордер закрыт...

А вот для открытого ордера - это цена закрытия ордера. OrderClosePrice() это и есть Бид для Бай, Аск для селл.

Проверено

Закрывать все сделки через 30м после открытия
Закрывать все сделки через 30м после открытия
  • 2020.11.04
  • www.mql5.com
Подскажите пожалуйста, пытался сам разобраться, но не выходит. Как задать правило, которое бы закрывало все сделки через полчаса после открытия...
 
Konstantin Erin:

А вот для открытого ордера - это цена закрытия ордера. OrderClosePrice() это и есть Бид для Бай, Аск для селл.

Проверено

Кто вам такое сказал? Приведите ваши доказательства.
 
Evgeniy Zhdan:
Кто вам такое сказал? Приведите ваши доказательства.

Ну, чуток перепутал человек. 

 
Konstantin Erin:
Откройте второй глаз и внимательно прочитайте определение

 

Для закрытого ордера OrderClosePrice() - это цена, по которой ордер закрыт...

А вот для открытого ордера - это цена закрытия ордера. OrderClosePrice() это и есть Бид для Бай, Аск для селл.

Проверено

Вообще то и не только у меня по цене закрытия ордера, если она не равна нулю проверяется закрытие ордера. Так в доках написано. верно и для 4ки для ордера и для 5ки для позиции при закрытии полной позиции. А закрывает по правилам минуса спреда, вверх бай открываем по нижней, закрываем по верхней цене и наоборот.

 
Evgeniy Zhdan:
Кто вам такое сказал? Приведите ваши доказательства.
Алексей Тарабанов:

Ну, чуток перепутал человек. 

Ничего он не перепутал. Всё именно так и работает на ура. Только есть некоторые опасности и Ренат об этом предупреждал. Если ордер не закрылся, по какой либо причине, то изменение цены Ask или Bid можно обновить вызвав соответствующую функцию, а для обновления OrderClosePrice() надо ордер ещё раз выбрать обновив свойства ордера.

Ищите и читайте. Этот вопрос обсуждался лет 12-15 назад.

 
Alexey Viktorov:

Ничего он не перепутал. Всё именно так и работает на ура. Только есть некоторые опасности и Ренат об этом предупреждал. Если ордер не закрылся, по какой либо причине, то изменение цены Ask или Bid можно обновить вызвав соответствующую функцию, а для обновления OrderClosePrice() надо ордер ещё раз выбрать обновив свойства ордера.

Ищите и читайте. Этот вопрос обсуждался лет 12-15 назад.

В документации такого нет, следовательно, разговаривать не о чем. У некоторых брокеров в цену закрытия хоть 0 ставь (у а-ри, например), будет закрываться по текущей бид или аск-цене. У других - будет ошибка.

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