Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 555

 
Alexey Viktorov:

Я читал те споры. Но там были не споры, а просто не желание понять объяснения и попытки доказать неисправность терминала. Там твои слова ничем не подкреплялись. Тебе лениво сделать скрины и доходчиво объяснить свои мысли.

Какие скрины?! Предоставил код, он выполняется на MT4 и вылетает с ошибкой в MT5. Тип ошибки написан в коде, который прокомментирован к тому же.
 
comp:
Какие скрины?! Предоставил код, он выполняется на MT4 и вылетает с ошибкой в MT5. Тип ошибки написан в коде, который прокомментирован к тому же.

Ну и ладно. Это твоя точка зрения. Ты считаешь что для понимания твоей точки зрения все должны ещё проделать некие действия, но не думаешь о том, что проще не спорить с тобой, а за излишнюю требовательность действительно проще забанить.

У меня к моему счастью нет права бана, поэтому я просто прекращаю этот диалог.

 
Скажите пожалуйста, почему ордера не открываю
void OnTick()
  {
   int pos;
   int rsi;
   int uroven1;
   int uroven2;
   int kolpos;
   uroven1=RSI_uroven1;
   uroven2=RSI_uroven2;

   rsi=iRSI(Symbol(),0,RSI,0,1);

//==================================================================
   for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;

     }
//====================================================================
   if(kolpos==0)
     {
      if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2)
        {
         OrderSend(Symbol(),OP_BUY,Lot,Ask,30,0,0,"",Magic,0,clrAliceBlue);
         OrderSend(Symbol(),OP_SELL,Lot,Bid,30,0,0,"",Magic,0,clrRed);

        }
     }
  }
тся.
 
edutak:
Скажите пожалуйста, почему ордера не открываются.

у меня как минимум 4 ошибки

'RSI_uroven1' - undeclared identifier 32.mq4 13 12

'RSI_uroven2' - undeclared identifier 32.mq4 14 12

'RSI' - undeclared identifier 32.mq4 16 24

'pos' - variable already defined 32.mq4 19 12

 

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property strict
int RSI=23;
int RSI_uroven1=100;
int RSI_uroven2=100;
int Magic=777;
double Lot=0.1;
void OnTick()
  {
   int pos;
   int rsi;
   int uroven1;
   int uroven2;
   int kolpos;
   uroven1=RSI_uroven1;
   uroven2=RSI_uroven2;

   rsi=iRSI(Symbol(),0,RSI,0,1);

//==================================================================
   for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;

     }
//====================================================================
   if(kolpos==0)
     {
      if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2)
        {
         OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lot,2),Ask,30,0,0,"",Magic,0,clrAliceBlue);
         OrderSend(Symbol(),OP_SELL,NormalizeDouble(Lot,2),Bid,30,0,0,"",Magic,0,clrRed);

        }
     }
  }
//+------------------------------------------------------------------+

все октрывает

1	2015.01.02 09:00	buy	1	0.10	120.42	0.00	0.00	0.00	10000.00
2	2015.01.02 09:00	sell	2	0.10	120.39	0.00	0.00	0.00	10000.00
3	2016.04.04 13:08	close at stop	2	0.10	111.66	0.00	0.00	3.26	10003.26
4	2016.04.04 13:08	close at stop	1	0.10	111.63	0.00	0.00	-11.85	9991.41

 
edutak:
Скажите пожалуйста, почему ордера не открываются.

Во первых я вам давал нормальную функцию которая считает кол-во ордеров, а вы по прежнему продолжаете использовать вашу неправильную.

во вторых  if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2) условие взаимо противоречащие друг другу. 

 
Vitalii Ananev:

Во первых я вам давал нормальную функцию которая считает кол-во ордеров, а вы по прежнему продолжаете использовать вашу неправильную.

во вторых  if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2) условие взаимо противоречащие друг другу. 

Я буду использовать нормальные функции, это пока черновой вариант, для тестера - я просто копирую блоками, так быстрей.

Если при пересечении RSI любого из уровней ордер открывается, а при пересечении любого другого уровня - закрывается и сразу открывается другой, то противоречия нет.

Или есть? 

 
Vladislav Andruschenko:

у меня как минимум 4 ошибки

'RSI_uroven1' - undeclared identifier 32.mq4 13 12

'RSI_uroven2' - undeclared identifier 32.mq4 14 12

'RSI' - undeclared identifier 32.mq4 16 24

'pos' - variable already defined 32.mq4 19 12

 


Спасибо, работает.
 
edutak:

Я буду использовать нормальные функции, это пока черновой вариант, для тестера - я просто копирую блоками, так быстрей.

Если при пересечении RSI любого из уровней ордер открывается, а при пересечении любого другого уровня - закрывается и сразу открывается другой, то противоречия нет.

Или есть? 

Сами порассуждайте. Допустим uroven1 = 80; rsi = 30; условие rsi > 80 или rsi < 80 получается что     (30 > 80 [false]   или 30< 80[true] )  такого в природе не бывает. Хоть условие  и будет true , так как используется оператор ИЛИ но по сути дела оно бессмысленно.   

Вторая часть выражения Допустим uroven2 =  20; rsi = 30 (30 > 20 [true]   или 30< 20[false] )  тоже самое.

 

Вторая часть выражения Допустим uroven2 =  20; rsi = 30 (30 > 20 [true]   или 30< 20[false] )  тоже самое.

Когда пишу или, то подразумеваю, что при любом пересечении уровня. ордер откроется. Когда наступит второе условие 30<20[false] , то на этот момент, предыдущий ордер закроется и оно станет истинным.

Если правильно понимаю. 

 
Если вы окажетесь правы - добавлю второй  RSI.
Причина обращения: