Небольшая помощь? - страница 2

 
WHRoeder:
  1. Конечно, нет. RTFM. Вы получаете новый тик только после возвращения со старта.
  2. RTFM и ограничения тестера Вы НЕ можете спать в тестере
  3. Что такое возвращаемые значения функции? Как их использовать? - Форум MQL4


Спасибо за помощь, я удалил цикл while и перехожу к функции start при каждом выполнении ордера, удалил функцию IsTesting (пока что) и мой OrderSend, похоже, работает.


Запустил, теперь не важно где у меня функция Print() ничего не появляется в журнале (или в журнале) начальный ордер открывается нормально, а потом ничего - даже если у меня ордер на печать будет следующей строкой в коде?

 
j.w.msb:

спасибо за помощь, я удалил цикл while и прерывание к функции start при каждом выполнении ордера, удалил функцию IsTesting (пока) и мой OrderSend, похоже, работает.


Запуская его сейчас, независимо от того, где у меня есть функция Print(), ничего не появляется в журнале (или в журнале регистрации), первоначальный ордер открывается нормально, а затем ничего - даже если у меня есть мой ордер печати в качестве следующей строки в коде?


как теперь выглядит ваш код?
 
Извините за кошмар! Я пытался найти информацию об ошибках в тестере стратегий, но googles не помогает :s
//+------------------------------------------------------------------+
//|                                                   SMA scripy.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern int z=1234;
int total;
//---
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   int i;
   total=0;
   if (OrdersTotal()!=0)
      {
      for (i=OrdersTotal()-1; i>=0; i--)                                                     
         {
         if (OrderSelect(i,SELECT_BY_POS))
            {
            if ((OrderSymbol()==Symbol())&&(OrderMagicNumber()==z))
               {
               if ((OrderType()==OP_BUY)&&(iMA(Symbol(),0,6,0,MODE_SMA,PRICE_CLOSE,0)<iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0)))
                  { 
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);                  
               }
               if ((OrderType()==OP_SELL)&&(iMA(Symbol(),0,6,0,MODE_SMA,PRICE_CLOSE,0)>iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0)))
                  {
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);                  
               }
               else 
                  {
                  total++;                                                                 
               }
            }
         }
      }
   }
//----
   return;
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int start()
   {
//----
   int i,L;
   if (AccountBalance()>50)                                                                                     
   {
//-----
double SMA6=iMA(Symbol(),0,6,0,MODE_SMA,PRICE_CLOSE,0);
double SMA21=iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0);
double RSI70=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)<70;
double RSI30=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)>30;                                                                                                            
//----
   if (total==0)
      {
      if ((RSI70)&&(SMA6>SMA21))
         {                                                                                                                       
         OrderSend(Symbol(),OP_BUY,0.1,Ask,0,0,0,"",z,0,Red); 
         Print("WE ARE HERE");
         total+=1;                                                       
      }
      if ((RSI30)&&(SMA6<SMA21))
         {
         OrderSend(Symbol(),OP_SELL,0.1,Bid,0,0,0,"",z,0,Blue);
         total+=1;
      }  
   }
//---
   if (total!=0)
      {
      L=0;
      for (i=OrdersTotal()-1; i>=0; i--)                                                    
         {
         if (OrderSelect(i,SELECT_BY_POS))
            {
            if ((OrderSymbol()==Symbol())&&(OrderMagicNumber()==z))
               {
               if ((OrderType()==OP_BUY)&&(SMA6<SMA21))
                  { 
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);
                     total+=-1;
                     break;
               }
               if ((OrderType()==OP_SELL)&&(SMA6>SMA21))
                  {
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);                 
                     total+=-1;
                     break;
               }
               else 
                  {
                  L++;                                                                  
               }
            }
            total=L;
         }
      }
   }
//----
}
//----
return;
}
//-------------------------------------------
 

double, int, string, bool, datetime, color, ........ что я должен использовать ???....

//-----
double SMA6=iMA(Symbol(),0,6,0,MODE_SMA,PRICE_CLOSE,0);
Print("SMA6=  ",SMA6);
double SMA21=iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0);
Print("SMA21=  ",SMA21);
double RSI70=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)<70;
Print("RSI70=  ",RSI70);
double RSI30=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)>30;
Print("RSI30=  ",RSI30);                                                                                                            
//----

Являются ли они двойными ???

         OrderSend(Symbol(),OP_BUY,0.1,Ask,0,0,0,"",z,0,Red); 
         Print("WE ARE HERE");

SEEEEEE Что такое возвращаемые значения функций ? Как их использовать? - MQL4 форум

большое объяснение

Если функция возвращает значение int, например OrderSend(), мы можем использовать код, подобный этому, чтобы проверить, что функция сработала, и сообщить об ошибке в журналы, если она не сработала. ...

int TicketNumber;

TicketNumber = OrderSend( . . . . . . . . );

**(*******************)
   {
   Print(******************);
   }
else
   {
   Print(************************);
   }

. Посмотрите ссылку, которую дал WHRoeder, и вы найдете то, что я спрятал здесь со звездами .......

Используйте ее также для проверки закрытия сделок

Сделайте что-то подобное внутри вашего code...., таким образом, когда ordersend не срабатывает, вы будете знать, что это за ошибка и откуда она исходит.

.

что происходит при неудачном закрытии ордера.......?????

 

И RSI, и MA являются двойными, поэтому переменные тоже должны быть двойными, не так ли?

https://docs.mql4.com/indicators/iRSI && https://docs.mql4.com/indicators/iMA

Я закодировал ошибки печати, но в журнал ничего не печатается, поэтому я не могу понять, какие ошибки происходят? Может быть, я все еще упускаю что-то очевидное? Теперь я снова открываю продажу, а потом не могу закрыть...

//+------------------------------------------------------------------+
//|                                                   SMA scripy.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern int z=1234;
int total;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   int i;
   total=0;
   if (OrdersTotal()!=0)
      {
      for (i=OrdersTotal()-1; i>=0; i--)                                                     
         {
         if (OrderSelect(i,SELECT_BY_POS))
            {
            if ((OrderSymbol()==Symbol())&&(OrderMagicNumber()==z))
               {
               if ((OrderType()==OP_BUY)&&(iMA(Symbol(),0,6,-3,MODE_SMA,PRICE_CLOSE,0)<iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0)))
                  { 
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);                  
               }
               if ((OrderType()==OP_SELL)&&(iMA(Symbol(),0,6,-3,MODE_SMA,PRICE_CLOSE,0)>iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0)))
                  {
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);                  
               }
               else 
                  {
                  total++;                                                                 
               }
            }
         }
      }
   }
//----
   return;
}
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int start()
   {
//----
   int ticket,i,L;
   bool x;
   if (AccountBalance()>50)                                                                                     
   {
//-----
double SMA6=iMA(Symbol(),0,6,-3,MODE_SMA,PRICE_CLOSE,0);
Print("SMA6 is ",SMA6);
double SMA21=iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0);
Print("SMA21 is ",SMA21);
double RSI70=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)<70;
Print("RSI70 is ",RSI70);
double RSI30=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)>30; 
Print("RSI30 is ",RSI30);                                                                                                           
//----
   if (total==0)
      {
      if ((RSI70)&&(SMA6>SMA21))
         {                                                                                                                       
         ticket=OrderSend(Symbol(),OP_BUY,v(AccountBalance()),Ask,0,0,0,"",z,0,Red); 
         total+=1;                                                       
         if (ticket<0)
            {
            Print("OrderSend Failed", GetLastError());
         }
      }
      if ((RSI30)&&(SMA6<SMA21))
         {
         ticket=OrderSend(Symbol(),OP_SELL,v(AccountBalance()),Bid,0,0,0,"",z,0,Blue);
         total+=1;
         if (ticket<0)
            {
            Print("OrderSend Failed", GetLastError());
         }
      }  
   }
//---
   if (total!=0)
      {
      L=0;
      for (i=OrdersTotal()-1; i>=0; i--)                                                    
         {
         if (OrderSelect(i,SELECT_BY_POS))
            {
            if ((OrderSymbol()==Symbol())&&(OrderMagicNumber()==z))
               {
               if ((OrderType()==OP_BUY)&&(SMA6<SMA21))
                  { 
                  x=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);
                     if (x==false)
                        {
                        Print("Error is ", GetLastError());
                     }
                     else total+=-1;
                     break;
               }
               if ((OrderType()==OP_SELL)&&(SMA6>SMA21))
                  {
                  x=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);   
                     if (x==false)
                        {
                        Print("Error is ", GetLastError());
                     }
                     else 
                        {
                        total+=-1;
                     }
                     break;
               }
               else 
                  {
                  L++;                                                                  
               }
            }
            total=L;
         }
      }
   }
//----
}
//----
return;
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
}
//-------------------------------------------------------------------+
double v(double k)
{
   double v=((k*0.015)/1000);
   if (v<MarketInfo(Symbol(),MODE_MINLOT))
      {
      v=MarketInfo(Symbol(),MODE_MINLOT);
      return(v);
   }
   else
      {
      return(v);
   }
}
//-------------------------------------------------------------------+
 

duuuhhhh iRSI двойной, но сравнение выводит 1 - поэтому я заменил RSI30 и RSI70 на просто RSI и сделал сравнение и все работает УРА! ИСКЛЮЧЕНИЕ, когда я меняю SMA6 на сдвиг, он выводит SMA6=0 всегда? почему?

Спасибо всем за помощь! Надеюсь в следующий раз не буду так сильно раздражать!

 
j.w.msb:

И RSI, и MA являются двойными, поэтому переменные тоже должны быть двойными, не так ли?

https://docs.mql4.com/indicators/iRSI && https://docs.mql4.com/indicators/iMA

Я закодировал ошибки печати, но ничего не печатается в журнал, поэтому я не могу понять, какие ошибки происходят? Я все еще упускаю что-то очевидное? Теперь я снова открываю продажу, а потом не могу закрыть...

поместите советника на график демо-счета

не ищите только в журнале терминала ...
загляните также в журнал "Эксперты терминалов" .....

что вы видите там напечатанным

 
deVries:

поместите советника на график демо-счета

не смотрите только в журнал терминала ...
посмотрите также в терминале экспертов .....

что вы там увидите


Теперь печатается и выполняется :) спасибо за помощь - я ошибся, определив iRSI<70 как двойное значение (так как это было сравнение), что вызвало проблемы. Теперь он печатает и работает как ожидалось, за исключением того, что если я изменю сдвиг SMA, он печатает SMA=0?
 
j.w.msb:

Печатается и выполняется сейчас :) спасибо за помощь - я неправильно определил iRSI<70 как двойное значение (так как это было сравнение) и это вызывало проблемы. Теперь он печатает и работает как ожидалось, за исключением того, что если я изменю сдвиг SMA, он печатает SMA=0?

Поместите SMA с теми же настройками на график вашего советника и посмотрите, что у вас получилось...
 
   if (total==0)
      {
      if ((RSI70)&&(SMA6>SMA21))
         {                                                                                                                       
         ticket=OrderSend(Symbol(),OP_BUY,v(AccountBalance()),Ask,0,0,0,"",z,0,Red); 
         total+=1;                                                       
         if (ticket<0)
            {
            Print("OrderSend Failed", GetLastError());
         }
      }

Почему общий итог += 1;

В данный момент я не знаю, удался ли ordersend.

и если он не работает, я не вижу, какой тип ордера он пытался открыть, это может быть также сделка на продажу, которую вы пытались открыть.