[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 46

 
bool exit_for=false;
double max_1=0;
double max_2=0;
for(int k=0;k<Bars;k++)
{
	if(	iRSI(Symbol(),0,rsi_period,PRICE_CLOSE,k)<iRSI(Symbol(),0,rsi_period,PRICE_CLOSE,k+1)
		&& iRSI(Symbol(),0,rsi_period,PRICE_CLOSE,k+1)>iRSI(Symbol(),0,rsi_period,PRICE_CLOSE,k+2) 	)
	{
		//Если это первый максимум:
		if(max_1==0)
			max_1=iRSI(Symbol(),0,rsi_period,PRICE_CLOSE,k+1);//Записываем номер бара экстремума
		else
		//Если первый найден, записываем второй
		{	
                        max_2=iRSI(Symbol(),0,rsi_period,PRICE_CLOSE,k+1);
                        exit_for=true;
                } 
	}
        //Выход из цикла, когда найдены оба максимума
        if(exit_for==true)k=Bars+1;  
}
Добрый день . Подскажите плиз. На мой вопрос о сравнении вершин с RSI после выхода значения его выше 70, подсказали вот такое решение.(код выше)

Но получается немного не так. В результате получается что ищется максимумы в истории( находит например в прошлых сутках), а нужно чтоб это условие ждало своего выполнения после того как этой функции разрешат действие( например значение на 1м баре > 70) ... и при выполнении условия ( не в истории перед баром>70, а после) 1й маким ниже 2го - то закрытие покупок

Подскажите что изменить.

Спасибо
 
xruss писал(а) >>

еще один вопрос - помогите плиз)

как определить после выделения ордера истории его тип (был ли закрыт ордер Buy или Sell)?

// ищем самый последний закрытый ордер
for(i=OrdersHistoryTotal();i>=0;i--){
  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()==MagicNumber){
        if(OrderCloseTime()!=0){
          if(OrderCloseTime()>time){
            time  =OrderCloseTime();
            tikcet=OrderTicket();
            profit=OrderProfit();
            type  =OrderType(); <-----
          }
        }
      }
    }
  }
}
 
Roger >>:
У тебя объявлена одна переменная, а потом пытается использовать другую.

АААААААААААААААААААААААААА......семён семёныч!!!!!!!!!!!!!!!!!!! Ну так БЫ сразу и сказали........... а то старость не радость - а молодость гадость.....

ССППААССИИББОО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

подскажите, пожалуйста
надо четкое понимание того, закрылся ордер по стопу или профиту
я сделал переменные priceprofitbuy и pricestopbuy
перед ordersend я делаю pricebuy = Ask, потом ордерсенд по pricebuy, если успешно, то алерт и запоминание priceprofitbuy и pricestopbuy, исходя из цены pricebuy
далее условием priceprofitbuy >= Bid и pricestopbuy <= Bid проверяю, как закрылся - по профиту или стопу
однако бывает что за время цикла Bid дошел до уровня тейкпрофита, ордер закрылся, но пока цикл дошел до priceprofitbuy >= Bid, Bid стал меньше и тогда дальше цикл работает неправильно

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

 
gramp >>:

я сделал переменные priceprofitbuy и pricestopbuy
перед ordersend я делаю pricebuy = Ask, потом ордерсенд по pricebuy, если успешно, то алерт и запоминание priceprofitbuy и pricestopbuy, исходя из цены pricebuy
далее условием priceprofitbuy >= Bid и pricestopbuy <= Bid проверяю, как закрылся - по профиту или стопу
однако бывает что за время цикла Bid дошел до уровня тейкпрофита, ордер закрылся, но пока цикл дошел до priceprofitbuy >= Bid, Bid стал меньше и тогда дальше цикл работает неправильно

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

Не вполне корректно:

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

Правильнее будет определять цену открытого ордера с пом функции OrderOpenPrice(), предварительно выбрав его с пом OrderSelect(...)

А ещё проще после его закрытия вычислить разность цены открытия и закрытия. Последняя определяется функцией OrderClosePrice().

OrderType() вернёт Вам тип (buy/sell).

 

To xrust: огромное спасибо.


Только непонятно как в условиях торговли прописать, что если тип закрытого ордера был OP_BUY,то бла бла((

у меня идет так:


int ORDtype;
// ищем самый последний закрытый ордер
for(i=OrdersHistoryTotal();i>=0;i--){
  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()==MagicNumber){
        if(OrderCloseTime()!=0){
          if(OrderCloseTime()>time){
            time  =OrderCloseTime();
            tikcet=OrderTicket();
            profit=OrderProfit();
            ORDtype  =OrderType(); <-----
          }
        }
      }
    }
  }
}
// торг условия
if(ORDtype=1)&&....

в условии я верно написал что Если тип ордера был OP_BUY тогда блаблабла?

 
xruss >>:

if(ORDtype=1)&&....

в условии я верно написал что Если тип ордера был OP_BUY тогда блаблабла?

Должно быть:

if(ORDtype==1)&&....

 
Everlost >>:

Должно быть:

if(ORDtype==1)&&....

fа сли истории нет - в моем случае ORDtype будет ==0?

 
xruss >>:

fа сли истории нет - в моем случае ORDtype будет ==0?

Он будет равен значению, указанному при объявлении переменной, т.е. в вашем случае 0, поскольку явного присвоения ей значения не было. Кстати, в предыдущем посте я не обратил внимание, что вы хотели выбрать ордер OP_BUY - этой константе соответствует как раз 0, а 1 - это OP_SELL. Поэтому лучше объявить переменную ORDtype со значением -1:

int ORDtype=-1;

А ещё, чтобы не путаться, какое значение какому типу операции соответствует, можете в условии так и указывать:


if (ORDtype==OP_BUY) ...

 
Everlost >>:

Он будет равен значению, указанному при объявлении переменной, т.е. в вашем случае 0, поскольку явного присвоения ей значения не было. Кстати, в предыдущем посте я не обратил внимание, что вы хотели выбрать ордер OP_BUY - этой константе соответствует как раз 0, а 1 - это OP_SELL. Поэтому лучше объявить переменную ORDtype со значением -1:

int ORDtype=-1;

А ещё, чтобы не путаться, какое значение какому типу операции соответствует, можете в условии так и указывать:


if (ORDtype==OP_BUY) ...

а если в истории был ордер Sell, а затем его эксперт закрыл (в типе истории он (его закрытие) отображается как t/p или s/l - не будет ли он считаться последним? не смог добиться нужного эффекта((

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