Пробой средней.Помогите оформить задачу.

 

Здравствуйте. Недавно начал учить MQL4. Вот пишу первый эксперт. На истории все проходит гладко, а на демо возникают проблемы.

Задача: При пробивании свечой IMA на дневном графике(или на любом) во время формирования нового бара(нулевого) открывать ордер в направлении пробива, на максимальной(БайСтоп) и минимальной(Селстоп) цене прошлого бара(который пробил IMA). Если есть открытый данным экспертом ордер на данном графике ( на данной паре ) игнорировать, все последующие сигналы сигналы.

Проблема. На демо открывает один ордер на все графики( те на одну валютную пару, должен открывать по 1 ордеру на каждую пару (каждое окно)). Вроде я все учел в коде, но все равно где то что-то не пошло как надо.

Помогите, пожалуйста, буду признателен.

extern int periodma=3;

extern double vol=0.01;

extern int expiration=0;

extern int mashift=0;

extern int shift=1;

int magic=77777; 

 int start()

{ double ma=iMA(Symbol(),0,periodma,mashift,MODE_SMA,PRICE_CLOSE,shift);

   double tp=High[1];

   double sl=Low[1];

   bool cond=false;

   if(OrdersTotal()==0) 

     {cond=true;}   

   else for(int i=1; i<=OrdersTotal(); i++)

           {  

            if(OrderSelect(i-1,SELECT_BY_POS)==true)

               {if (OrderSymbol()!=Symbol())

                   {continue;}                   

                if(OrderMagicNumber()!=magic)         

                  {

                   cond=true;

                   continue;                             

                  }                 

                else break;                     

               }

           }  

   RefreshRates();   

   if(cond==true)

     {if(Open[1]>ma&&Close[1]<ma)

      {OrderSend(Symbol(),OP_SELLSTOP,vol,Low[1],2,High[1],0,NULL,magic,0,Red);}

      if(Open[1]<ma&&Close[1]>ma)

      {OrderSend(Symbol(),OP_BUYSTOP,vol,High[1],2,Low[1],0,NULL,magic,0,Blue);}

     }   

} 

} 
 
Skyisover:
Каковы у вас результаты работы хотя бы на одной паре?
 
DmitriyN:
Каковы у вас результаты работы хотя бы на одной паре?

Не совсем понимаю что вы подразумеваете по результатами.

?Результаты ТС или что-то ещё?

Да ещё все вышесказанное мной можно сжать до вопроса:"Как научить(какой код использовать), чтобы бот мог учитывать открытые им по заданной паре ордера"

 
DmitriyN:
Каковы у вас результаты работы хотя бы на одной паре?
Дим, если не собираешься помогать, то зачем лишние вопросы человеку?
 
moskitman:
Дим, если не собираешься помогать, то зачем лишние вопросы человеку?
Андрей, я вопросы задаю тогда, когда мне интересны ответы на них. Помогаю я тогда, когда уверен, что моя помощь принесёт пользу.
 
DmitriyN:
Андрей, я вопросы задаю тогда, когда мне интересны ответы на них. Помогаю я тогда, когда уверен, что моя помощь принесёт пользу.
Это оригинальная форма помощи :))
 
Skyisover:

Да ещё все вышесказанное мной можно сжать до вопроса:"Как научить(какой код использовать), чтобы бот мог учитывать открытые им по заданной паре ордера"

Этот не подойдет ? https://www.mql5.com/ru/forum/131859

 
Skyisover:

_ Да ещё все вышесказанное мной можно сжать до вопроса:"Как научить(какой код использовать), чтобы бот мог учитывать открытые им по заданной паре ордера"

Я понял. Возьмём одну пару EURUSD, например. У вас положительные результаты работы вашей ТС по этой паре есть? Можно на стейт взглянуть, если есть?
 
Skyisover:

Здравствуйте. Недавно начал учить MQL4. Вот пишу первый эксперт. На истории все проходит гладко, а на демо возникают проблемы.

Задача: При пробивании свечой IMA на дневном графике(или на любом) во время формирования нового бара(нулевого) открывать ордер в направлении пробива, на максимальной(БайСтоп) и минимальной(Селстоп) цене прошлого бара(который пробил IMA). Если есть открытый данным экспертом ордер на данном графике ( на данной паре ) игнорировать, все последующие сигналы сигналы.

Проблема. На демо открывает один ордер на все графики( те на одну валютную пару, должен открывать по 1 ордеру на каждую пару (каждое окно)). Вроде я все учел в коде, но все равно где то что-то не пошло как надо.

Помогите, пожалуйста, буду признателен.

А чем вас советник Moving Average не устраивает? Он открывает ордера на пробое средней. Зачем свой велосипед изобретать, если велосипед есть в стандартной поставке МТ4?
 
khorosh:
А чем вас советник Moving Average не устраивает? Он открывает ордера на пробое средней. Зачем свой велосипед изобретать, если велосипед есть в стандартной поставке МТ4?

Сравнил. Свое и чужое. Учится человек.
 

Мдааа. Куда скатился форум. (Вот они "скучающие ... кхм ... форумчане"). Хотя все согласно анекдоту про англоязычный, ивритоязычный и русскоязычные форумы. :(

2Топикастер.

"Проанализируйте" и вставьте в свой советник (в свои советники), например, такую функцию.

(int magic=77777 лучше сделать "extern")

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.03.2008                                                     |
//|  Описание : Возвращает флаг существования ордеров.                         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ot - время открытия             ( 0   - любое время установки)          |
//+----------------------------------------------------------------------------+
bool ExistOrders(string sy="", int op=-1, int mn=-1, datetime ot=0) 
{
int i, k=OrdersTotal(), ty;

if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) 
{
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
  {
   ty=OrderType();
   if (ty>1 && ty<6) 
   {
    if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) 
    {
     if (mn<0 || OrderMagicNumber()==mn) 
     {
      if (ot<=OrderOpenTime()) return(True);
     }
    }
   }
  }
}
return(False);
}
И подобных функций, написанных один раз и "навсегда" (в кавычках) много.
Причина обращения: