[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 565

 

abeiks:

Какое-то время пытаюсь переделать блок закрытие buy позиции чтобы закрыть только две последние buy позиции, но не получается. Можете подсказать как переделать блок?

//+------------------------------------------------------------------+
//|                                                         0000.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
void Close_2buy()
   {
   bool     result;
   int      Count=2,Ticket=-1,error;
   datetime time=0;
   while(Count>0)
      {
      for (int f=OrdersTotal()-1; f>=0; f--) // 
         {
         OrderSelect(f, SELECT_BY_POS);
         if (OrderSymbol()==Symbol() &&(OrderMagicNumber()==magic ) 
         && (OrderType() == OP_BUY )) 
            {
            if(OrderOpenTime()>time)
               {
               time=OrderOpenTime();Ticket=OrderTicket();
            }
         }
      }
      if(OrderSelect(Ticket,SELECT_BY_TICKET)==True);
         {
         result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),0,CLR_NONE);
         if(result!=TRUE){error=GetLastError();Print("LastError = ", error);}
      }
      else{error=GetLastError();Print("LastError = ", error);} 
      Ticket=-1;time=0;Count--;
   }
   return;
} 
 
ametist444:

Здравствуйте!

Подскажите, какие файлы нужно скачать и куда их установить в mt4, чтобы получить данное окно?

на странице Моделирование на разных тайм-фреймах тестируемого инструмента я не понял как это сделать

и хотелось бы всего три графика дневной четырехчасовой и часовой увидеть

помогите пожалуйста, за весь вечер у самого ничего не получилось!!! 


 


Окна типа (visual) открываются при тестировании советника в визуальном режиме.


 
peshihod:

Какой-такой StopLoss?

Наверное я не правильно сформулировал, что нужно :(

Есть есть алгоритм открытия ордеров.

Нужно, чтобы при любом варианте закрытия последнего ордера, следующий открывался в другом направлении ( при появлении условий соответственно). 

Все работает, но если закрылся по стоп лосс, например по sell,  а условия на открытие по sell в данном направлении есть, то  открытия продолжаются. А надо, что бы ждал условий на buy.

То есть, нужна проверка последнего закрытого ордера, что бы он не совпадал с открывающимся (чередование  buy-sell-buy-sell). В работе только один ордер или ожидание сигнала.  

 Понимаю, что скорее всего надо через   OrdersHistoryTotal(), но как это может  выглядеть в работающем советнике ?

Спасибо. 

 
delf:

Есть есть алгоритм открытия ордеров.

Нужно, чтобы при любом варианте закрытия последнего ордера, следующий открывался в другом направлении ( при появлении условий соответственно). 

То есть, нужна проверка последнего закрытого ордера, что бы он не совпадал с открывающимся (чередование  buy-sell-buy-sell). В работе только один ордер или ожидание сигнала.  

Чередование происходит всегда и в любом случае, и в работе всегда только один ордер?

Тогда проще в условие добавить  контроль количества ордеров:

if(OrdersTotal()==0)
{
	if(OldOrder==OrderBuy)
		{
		...
		}
	else
		{
		...
		}
}
 
rigonich:


Проблема в следующем: так как у вас в этой функции нет OrderSelect(), видимо она используется где то в цикле с перебором ордеров. Если этот цикл организует перебор от нулевого ордера к последнему, то после модификации первого ордера или если на этом тике например был зарыт какой либо ордер при следующем вызове ф-и  OrderSelect() порядок следования ордеров меняется и функция может выбрать для модификации ордер, который уже модифицирован. Поэтому надо проверять не равно ли значение стоплосса ордера тому, которое мы передаем в функцию OrderModify()

 


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

delf:

 

Нужно, чтобы при любом варианте закрытия последнего ордера, следующий открывался в другом направлении ( при появлении условий соответственно). 

Более строгий вариант

#define OrderBuy  0
#define OrderSell 1
int NewOrder;
int RezultatSend; 

int start()
{
... 
... 

if(OrdersTotal()==0)
{
if(NewOrder==OrderBuy)
   {
   if(/*Условие для Buy*/)
      { RezultatSend=OrderSend(/*...buy*/);     //Ставим Buy
        if(RezultatSend!=-1)NewOrder=OrderSell; //Если ставка прошла
      }
   }
 else
   {
   if(/*Условие для Sell*/)
      { RezultatSend=OrderSend(/*...*/);       //Ставим Sell
        if(RezultatSend!=-1)NewOrder=OrderBuy; //Если ставка прошла
      }
   }
}

...
...

}  
 

abeiks:

 

Какое-то время пытаюсь переделать блок закрытие buy позиции чтобы закрыть только две последние buy позиции, но не получается. Можете подсказать как переделать блок?

Проще, и удобнее, сделать функцию(блок)  закрытия одной последней позиции. А запускать её дважды. В цикле, или просто подряд.
 
abeiks:

Какое-то время пытаюсь переделать блок закрытие buy позиции чтобы закрыть только две последние buy позиции, но не получается. Можете подсказать как переделать блок?

Какое-то время назад я Вам давал алгоритм решения поиска последних позиций. А что потом с ними делать НЕ ВАЖНО: считать, удалять, модифицировать СТОПы. Если Вы не в состоянии писать код хотя бы "по образу и подобию", то это не Ваше (программировать)...
 
rigonich:



Спасибо!

 
peshihod:
Проще, и удобнее, сделать функцию(блок)  закрытия одной последней позиции. А запускать её дважды. В цикле, или просто подряд.

Спасибо, хороший вариант попробую тоже сделать.

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