Нужна помощь

 

Здравствуйте уважаемые господа программисты, будьте добры подскажите либо прокомментируйте, может будут у кого либо мысли по данному вопросу?

В инклюде советника на вычисление различных торговых критериев на комбинациях МА, индикаторах (Аллигатор, сстох и т.д.) все работает, советник тестируется на истории, открывает ордера, работает в режиме реального времени и т.д. Но при подключении в инклюд стратегии, основанной на правиле 4-х недель Д.Мерфи: 1. цена закрытия выше макс цены за последние 20 дней - Открытие Buy, 2.цена закрытия ниже мин цены за последние 20 дней
- Открытие Sell, 3. цена закрытия ниже мин цены за последние 10 дней - Закрытие Buy, 4. цена закрытия выше макс цены за последние 10 дней - Закрытие Sell, все компилируется, но советник на истории (закачана вся) не работает, ордера не открываются, хотя условия были.  Условия открытия, закрытия ордеров я тупо прописал не циклами, а на основе массивов-таймсерий, (при органицации циклов) тоже не работает. Индикатор, изготовленный на таком же 

коде все кажет исправно. 

//--------------------------------------------------------------------
// Criterion.mqh
// 
//--------------------------------------------------------------- 1 --
// Функция вычисления торговых критериев.
// Возвращаемые значения:
// 10 - открытие Buy  
// 20 - открытие Sell 
// 11 - закрытие Buy
// 21 - закрытие Sell
// 0 - значимых критериев нет
// -1 - используется другой финансовый инструмент
//--------------------------------------------------------------- 2 --

//--------------------------------------------------------------- 3 --
int Criterion()                                             // Пользовательская функция
  {
  string Sym="EURUSD";
  if (Sym!=Symbol())                                  // Если не наш фин. инструмент
  {
  Inform(16); // Сообщение..
  return(-1); // .. и выход
  }
   
                                                             // Вычисление торговых критериев
   
  if (Close[0]  >  High[1]>High[2] && High[1]>High[3] && High[1]>High[4] && High[1]>High[5]&& High[1]>High[6] && High[1]>High[7] && High[1]>High[8] && High[1]>High[9]&& High[1]>High[10] && High[1]>High[11] && High[1]>High[12] && High[1]>High[13]&& High[1]>High[14] && High[1]>High[15] && High[1]>High[16] && High[1]>High[17] && High[1]>High[18] && High[1]>High[19] && High[1]>High[20] && High[1]>High[21])
      
  return(10); // Открытие Buy  
   
  if (Close[0]  <   Low[1]<Low[2] && Low[1]<Low[3] && Low[1]<Low[4] && Low[1]<Low[5]&& Low[1]<Low[6] && Low[1]<Low[7] && Low[1]<Low[8] && Low[1]<Low[9]&& Low[1]<Low[10] && Low[1]<Low[11]) 
    
  return(11); // Закрытие Buy  
   
  
  if (Close[0]   <   Low[1]<Low[2] && Low[1]<Low[3] && Low[1]<Low[4] && Low[1]<Low[5]&& Low[1]<Low[6] && Low[1]<Low[7] && Low[1]<Low[8] && Low[1]<Low[9]&& Low[1]<Low[10] && Low[1]<Low[11] && Low[1]<Low[12] && Low[1]<Low[13]&& Low[1]<Low[14] && Low[1]<Low[15] && Low[1]<Low[16] && Low[1]<Low[17] && Low[1]<Low[18] && Low[1]<Low[19] && Low[1]<Low[20] &&Low[1]<Low[21])
   
   
  return(20);                                // Открытие Sell
   
   
  if (Close[0]   >   High[1]>High[2] && High[1]>High[3] && High[1]>High[4] && High[1]>High[5]&& High[1]>High[6] && High[1]>High[7] && High[1]>High[8] && High[1]>High[9] && High[1]>High[10] && High[1]>High[11]) 
   
     return(21);                          // Закрытие Sell  
   
      
//--------------------------------------------------------------- 6 --
  return(0);                                // Выход из пользов. функции
  }
//--------------------------------------------------------------- 7 --


 

Я бы посоветовал для добавлять условия по частям.

Второе,ещё у тебя в первом критерии:

Close[1] > High[1]...

но ведь цена закрытия не может быть выше верхней тени свечи,

в случае свечки без верхней тени её цена закрытия может быть равна её верхней тени.

Вот у тебя данное условие никогда не выполняется. Я так понял ты хотел поставить условие отсутствия верхней тени.

Кстати, и в других критериях у тебя подобное.

 
Luptator >>:

Я бы посоветовал для добавлять условия по частям.

Второе,ещё у тебя в первом критерии:

Close[1] > High[1]...

но ведь цена закрытия не может быть выше верхней тени свечи,

в случае свечки без верхней тени её цена закрытия может быть равна её верхней тени.

Вот у тебя данное условие никогда не выполняется. Я так понял ты хотел поставить условие отсутствия верхней тени.

Кстати, и в других критериях у тебя подобное.


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

максимума предыдущей, т.е. Close[0]>High[1], a ne Close[1]>High[1], суйчас проверю на истории. От души благодарю за внимание.

 
От души благодарю за участие: были ошибки в операторах сравнения. В настоящее время все работает, благодарю!
 
уважвемые господа программисты помогите пожалуйста: Как сделать чтобы 1. при срабатывании условия ордер выставлялся только один раз(у меня выставляется на каждом тике) 2. условие которое сработало, больше не участвовало в программе(пропускалось) до тех пор,пока не закроется ордер выставленный по этому условию. ПРИМЕР if (условие) OrderSend(Symbol(),op_sellstop (далее любые параметры) if(2 условие) OrderSend(Symbol(),op-sellstop ( ) и так далее
 
MOHCTP36 >>:
уважвемые господа программисты помогите пожалуйста: Как сделать чтобы 1. при срабатывании условия ордер выставлялся только один раз(у меня выставляется на каждом тике) 2. условие которое сработало, больше не участвовало в программе(пропускалось) до тех пор,пока не закроется ордер выставленный по этому условию. ПРИМЕР if (условие) OrderSend(Symbol(),op_sellstop (далее любые параметры) if(2 условие) OrderSend(Symbol(),op-sellstop ( ) и так далее

f(OrdersTotal<1)
OrderSend(Symbol(),op_sellstop (далее любые параметры)).вот теперъ он будет открыватъ толъко один ордер.

 

Ребят. Код вставляйте правильнее пож.

Где текст набираете есть панель выше,там такая кнопочка- код. Или Ctrl+Alt+M  

 
Подскажите пожалуйста. Возможно ли обнулить OrdersTotal() при выставленном ордере не закрывая его,
 

Нельзя. Так как функция OrdersTotal() лишь возвращает количество выставленных ордеров.