Ищу помощи: Советник GreenTrade не открывает сделки

 


с

 
Izillger:

Советник GreenTrade не открывает сделки ни на демо, ни на реале. А на истории торгует без проблем...

1‌) в терминале все разрешения для торговли советниками включены

2‌) никаких дополнительных индюков и прочего советник не требует

3‌) в логах всё чисто => ОШИБОК 0 и каких либо сообщений тоже...

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

5‌) код писал не я!!! прошу помощи понять, почему советник ничего не делает. (есть подозрение на "GlobalVariableSet", но могу и ошибаться)

весь код советника:‌‌

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//                                                GreenTrade.mq4                                                      //

//                                                kozaka@ukr.net                                                      //

//                                                                                                                    //

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


#property copyright "Kozak Andrey"

#property link "Kozaka@ukr.net"



extern int    MA_period = 67;

extern int    RSI_period = 57;

extern int    Tral = 150;

extern int    TakeProfit = 300;

extern int    StopLoss = 300;

extern int    Index_orders = 7;



int init()

{

 GlobalVariableSet("time",Time[0]);

 return;

}



int start()

{

int ticket;

//if(Period() && Symbol())

{


 double Ma0 = iMA(NULL,0,MA_period,0,MODE_SMMA,PRICE_MEDIAN,0);

 double Ma5 = iMA(NULL,0,MA_period,0,MODE_SMMA,PRICE_MEDIAN,2);

 double Ma10 = iMA(NULL,0,MA_period,0,MODE_SMMA,PRICE_MEDIAN,4);

 double Ma15 = iMA(NULL,0,MA_period,0,MODE_SMMA,PRICE_MEDIAN,7);

 double RSI = iRSI(NULL,PERIOD_H1,RSI_period,PRICE_CLOSE,0);

 

if(OrdersTotal()<Index_orders)

 {

   if((Ma0>Ma5) > (Ma5>Ma10) > (Ma10>Ma15) && RSI>60)

     {

       ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,30,Bid-StopLoss*Point,Ask+TakeProfit*Point);

       OrderSelect(ticket,SELECT_BY_TICKET); 

     }

     

     if((Ma0<Ma5) < (Ma5<Ma10) < (Ma10<Ma15) && RSI<36)

     {

       ticket=OrderSend(Symbol(),OP_SELL,0.1,Bid,30,Ask+StopLoss*Point,Bid-TakeProfit*Point);

       OrderSelect(ticket,SELECT_BY_TICKET); 

     }

}

if(OrdersTotal()<1)

{

for(int i=0;i<OrdersTotal(); i++)

 {

 OrderSelect(i,SELECT_BY_POS);

   if(OrderType() == OP_BUY)

   {

     if(Ask+100*Point<OrderOpenPrice())

     {

       OrderClose(OrderTicket(),OrderLots(),Bid,30,Red);

       ticket=OrderSend(Symbol(),OP_SELL,0.1,Bid,30,Ask+StopLoss*Point,Bid-TakeProfit*Point);

       OrderSelect(ticket,SELECT_BY_TICKET);

     }

   

   }

   

     if(OrderType() == OP_SELL)

       {

         if(Bid-100*Point>OrderOpenPrice())

          {

            OrderClose(OrderTicket(),OrderLots(),Ask,30,Red);

            ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,30,Bid-StopLoss*Point,Ask+TakeProfit*Point);

            OrderSelect(ticket,SELECT_BY_TICKET);

          }

   

      }

 

 }

}


if(GlobalVariableGet("time")!= Time[0])

{

      for(int col=0;col<OrdersTotal(); col++)

      {

       OrderSelect(col,SELECT_BY_POS);

       {

         if(OrderType()==OP_BUY)

         {

           if(Bid-Tral*Point>OrderOpenPrice())

           {

           OrderClose(OrderTicket(),0.05,Bid,30,Red);// && OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Tral*Point,OrderTakeProfit(),0);

            

            

       ticket=OrderSend(Symbol(),OP_SELL,0.1,Bid,30,Ask+StopLoss*Point,Bid-TakeProfit*Point);

       OrderSelect(ticket,SELECT_BY_TICKET);

           }

         }

         

          if(OrderType()==OP_SELL)

           {

             if(Ask+Tral*Point<OrderOpenPrice())

              {

                OrderClose(OrderTicket(),0.05,Ask,30,Red);// && OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Tral*Point,OrderTakeProfit(),0);

                

            ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,30,Bid-StopLoss*Point,Ask+TakeProfit*Point);

            OrderSelect(ticket,SELECT_BY_TICKET);

              }

           }

       

       }

      

       GlobalVariableSet("time",Time[0]);

      }

}

}

 return;

}



Вы про этот советник? Этого автора? Да, бросьте зачем он Вам? Есть много советников более лучших.
 
Izillger:

да, я в курсе, что это за советник, но мне нужно чтобы он начал совершать сделки

В журнале ошибок нет?
 
Izillger:

Нет. Я писал уже выше, что всё чисто. Советник простоял двое суток, но так и не открыл ни одной сделки, а на истории торгует ...


А на истории он что, каждую минуту по 100 ордеров открывает, что ли? На дату и время в результатах тестирования смотреть не пробовали?

К‌роме того, торги на истории - это совсем не то же самое, что торговля в реальном времени. Всегда есть разница, история не повторяется один в один на реале.

 
Izillger:


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

 
 
Vitaly Murlenko:


Спасибо за пояснение, но это не у меня од бестолково построен, а у автора данного советника. Я не программист, но попробую исправить этот код. Спасибо!

 
Vitaly Murlenko:
Вы правы. Разрисованное вами место в советнике вряд ли выполнится при любых допущениях. Это место можно безболезненно выбросить при полном сохранении функционала. Однако... Внимательно вчитайтесь в исходный вопрос. Требуется выяснить, почему отсутствуют сделки. А вышеупомянутый кусок содержит лишь OrderClose. Желанные OrderSend находятся чуть выше. И перед ними условия  if((Ma0>Ma5) > (Ma5>Ma10) > (Ma10>Ma15) && RSI>60) и  if((Ma0<Ma5) < (Ma5<Ma10) < (Ma10<Ma15) && RSI<36). Следовало бы для выяснения ситуации с помощью функции Alert() вывести составляющие этих условий. Или давайте просто порассуждаем.
Выражение (Ma0>Ma5) > (Ma5>Ma10) > (Ma10>Ma15) && RSI>60 будет истинно, если истинны (Ma0>Ma5) > (Ma5>Ma10) > (Ma10>Ma15)  и  RSI>60 т.к. по приоритетам сначала вычисляются >>> слева направо и уж затем &&. Нужно, чтобы Ma0>Ma5    Ma5<=Ma10    Ma10<=Ma15   RSI>60. И тогда будет покупать... А что, разумно! Покупаем на развороте!
Причина обращения: