условия if(...) вопросы

 

Добрый день. Меня мучает парочка вопросов! Умоляю:)

1) Как можно реализовать закрытие всех позиций при наступлении допустим 00:00, т.е. при наступлении нового дня?

2)Как сделать ограничение позиций за день (если один ордер открылся, то другой уже не открыется за этот день)?  Я просто не пойму как условие связать с временем((

3)Как в условии  указать на то, что прошлый допустим фрактал был ниже предыдущего? (с этим тоже не пойму что делать)

Спасибо!

 
Ibiss >>:

Добрый день. Меня мучает парочка вопросов! Умоляю:)

1) Как можно реализовать закрытие всех позиций при наступлении допустим 00:00, т.е. при наступлении нового дня?

2)Как сделать ограничение позиций за день (если один ордер открылся, то другой уже не открыется за этот день)? Я просто не пойму как условие связать с временем((

3)Как в условии указать на то, что прошлый допустим фрактал был ниже предыдущего? (с этим тоже не пойму что делать)

Спасибо!


воспользуйтесь этими функциями


bool Orders() // Есть-ли ордера
{
bool ret = false; // Пока нет ордеров
for(int i=0; i<OrdersTotal(); i++) // По рыночн. и отлож. ордерам
if( (OrderSelect(i,SELECT_BY_POS)==true) && (OrderSymbol()==Symbol()) // Выбрать ордер по номеру i если есть такой и чтоб совпадал валютная пара
&& (OrderMagicNumber()>10000||OrderMagicNumber()<10005) ) // и Магический номер бал наш от 10001 до 10004
ret = true; // если условие выполняется хоть раз то истина
return (ret); // возврат из функции true если есть false если нет ордеров
}



void CloseAllOrders() // Закрыть все ордера
{
while(Orders()) // Пока есть ордера повторать все
for(int i=0; i<OrdersTotal(); i++) // По рыночн. и отлож. ордерам
if( (OrderSelect(i,SELECT_BY_POS)==true) && (OrderSymbol()==Symbol()) // Выбрать ордер по номеру i если есть такой и чтоб совпадал валютная пара
&& (OrderMagicNumber()>10000||OrderMagicNumber()<10005) ) // и Магический номер бал наш от 10001 до 10004
{
if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(), Ask, 3); // Закрыть ордер по цене Ask +-3пп если это Селл
if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(), Bid, 3); // Закрыть ордер по цене Bid +-3пп если это Бай
if(OrderType()==OP_SELLSTOP||OrderType()==OP_BUYSTOP) OrderDelete(OrderTicket()); // Удалить если отложка
}
}

 
Ibiss писал(а) >>

3)Как в условии указать на то, что прошлый допустим фрактал был ниже предыдущего? (с этим тоже не пойму что делать)

Спасибо!

А вы уверены, что дело в условии, а не в поиске того самого фрактала? Без циклов здесь не обойтись.

 

Shev, мне нужно закрытие по окончании дня и ограничение ордеров, а у  вас не понятно что)

vasya_vasya >>:

А вы уверены, что дело в условии, а не в поиске того самого фрактала? Без циклов здесь не обойтись.



Прошу прощения, мне нужен поиск по фракталам!)

И как после этого в условия его поставить?

 

Закрытие всех ордеров - непростая задача.

На эту тему посмотрите здесь: http://www.forextrade.ru/mqlabs/17.07.2009-zakrytie-orderov-v-strategii-k-autograf-4

 
SK. >>:

Закрытие всех ордеров - непростая задача.

На эту тему посмотрите здесь: http://www.forextrade.ru/mqlabs/17.07.2009-zakrytie-orderov-v-strategii-k-autograf-4


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

мне б подсказать  как такое условие сделать)

 
Ibiss писал(а) >>

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

мне б подсказать как такое условие сделать)

Анализируйте дату.

Для каждого бара можно запросить время его закрытия.

 
Ibiss >>:


мне б подсказать как такое условие сделать)

В Вашем случае можно так:

if(TimeDay(Time[0])!=TimeDay(OrderOpenTime()) {...}
 
Ibiss писал(а) >>

Shev, мне нужно закрытие по окончании дня и ограничение ордеров, а у вас не понятно что)


Прошу прощения, мне нужен поиск по фракталам!)

И как после этого в условия его поставить?

например можно так

//вернет номенр бара
int fractal(int mode,int nomer_fractala){
  string symbol=Symbol();
  int timeframe=0;
  int i=0;
  int fr=0;
while(true){
int shift=i;
if(iFractals(symbol,timeframe,mode,shift)>0.003){fr++;}
if(fr>=nomer_fractala)break ;
i++;
}
return(i);
}

для проверки

int start()
  {
  for (int i =0;i<100;i++){
  int f;
  f=fractal(MODE_UPPER,i);
   string name="fghfgh"+i;
  ObjectCreate(name,OBJ_ARROW,  0, Time[f], High[f]) ;
}
  
   return(0);
  }

дла условий времени используйте

OrderOpenTime(),TimeDay( datetime date) 
//или
TimeHour( datetime time) 
 

то есть вам нужно написать, что то вроде

if(High[fractal(MODE_UPPER,1)]<High[fractal(MODE_UPPER,2)])
 
Спасибо. Сейчас же попробую.
Причина обращения: