Помогите исправить ошибочки в советнике.

 

Советник плохо работает коэффициент удваивания, во время работы постоянно  слетает и возвращается к изначальному лоту торга т.е. 0.01 объема. И при компилировании вот такая ошибка вылазиет  ->  return value of 'OrderSend' should be checked



int X=0;

double S = 0.0000;

extern double       lot=0.1;

extern double       koef=1.5;

extern int       SL=10;

extern int       TP=10;

double dl;

double a;


int init()

  {

  a=lot;

   return(0);

  }


int deinit()

  {


   return(0);

  }



int start()

 {   

               

              

              

                S=Open[0];

                Sleep(1000);

                

             

             if(OrdersTotal() == 0 && X==1)

              { 

              if (Close[0]>dl){lot=a;}

              X=0;

              }

              

              if(OrdersTotal() == 0 && X==2)

              { 

              if (Close[0]<dl){lot=a;}

              X=0;

              }

                

             

             

 

                   if (OrdersTotal() == 0 && Close[0]>S && Close[1]>Open[1]) 

                           {

                            dl=Close[0];

                            OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-SL*0.0001,Ask+TP*0.0001,"",14774,0,Blue); 

                            lot=lot*koef;

                            X=1;            

                           }

                   

                    if(OrdersTotal() == 0 && Close[0]<S && Close[1]<Open[1]) 

                           {

                            dl=Close[0];

                            OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+SL*0.0001,Bid-TP*0.0001,"",14774,0,Red); 

                            lot=lot*koef;

                            X=2;

                           }


   return(0);

 }

Файлы:
Nova.mq4  2 kb
 
KAV AVK:

Советник плохо работает коэффициент удваивания, во время работы постоянно  слетает и возвращается к изначальному лоту торга т.е. 0.01 объема. И при компилировании вот такая ошибка вылазиет  ->  return value of 'OrderSend' should be checked



int X=0;

double S = 0.0000;

extern double       lot=0.1;

extern double       koef=1.5;

extern int       SL=10;

extern int       TP=10;

double dl;

double a;


int init()

  {

  a=lot;

   return(0);

  }


int deinit()

  {


   return(0);

  }



int start()

 {   

               

              

              

                S=Open[0];

                Sleep(1000);

                

             

             if(OrdersTotal() == 0 && X==1)

              { 

              if (Close[0]>dl){lot=a;}

              X=0;

              }

              

              if(OrdersTotal() == 0 && X==2)

              { 

              if (Close[0]<dl){lot=a;}

              X=0;

              }

                

             

             

 

                   if (OrdersTotal() == 0 && Close[0]>S && Close[1]>Open[1]) 

                           {

                            dl=Close[0];

                            OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-SL*0.0001,Ask+TP*0.0001,"",14774,0,Blue); 

                            lot=lot*koef;

                            X=1;            

                           }

                   

                    if(OrdersTotal() == 0 && Close[0]<S && Close[1]<Open[1]) 

                           {

                            dl=Close[0];

                            OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+SL*0.0001,Bid-TP*0.0001,"",14774,0,Red); 

                            lot=lot*koef;

                            X=2;

                           }


   return(0);

 }

Лот нужно нормализовать, как минимум. тейки и стопы тоже. Слип можно выкинуть.

При новой инициализации он и будет постоянно слетать. Вам нужно каждый раз при открытии позиции увеличивать лот?

 
   bool op_buy = OrderSend(Symbol(),OP_BUY,lot,
   NormalizeDouble(Ask,Digits()),3,
   NormalizeDouble(Ask-SL*Point(),Digits()),
   NormalizeDouble(Ask+TP*Point(),Digits()),"",14774,0,clrBlue);
 
Evgeny Belyaev:

Лот нужно нормализовать, как минимум. тейки и стопы тоже. Слип можно выкинуть.

При новой инициализации он и будет постоянно слетать. Вам нужно каждый раз при открытии позиции увеличивать лот?

Да, увеличивать. Если вы мне поможете я был бы вам весьма благодарен!
 
Iurii Tokman:
Подскажите пожалуйста. Как правельно воспользоваться вашим советом. Я не понимаю.
 
Iurii Tokman:

int X=0;
double S = 0.0000;
extern double       lot=0.1;
extern double       koef=1.5;
extern int       SL=10;
extern int       TP=10;
double dl;
double a;

int init()
  {
  a=lot;
   return(0);
  }

int deinit()
  {

   return(0);
  }


int start()
 {   
               
              
              
                S=Open[0];
                Sleep(1000);
                
             
             if(OrdersTotal() == 0 && X==1)
              { 
              if (Close[0]>dl){lot=a;}
              X=0;
              }
              
              if(OrdersTotal() == 0 && X==2)
              { 
              if (Close[0]<dl){lot=a;}
              X=0;
              }
                
             
             
 
                   if (OrdersTotal() == 0 && Close[0]>S && Close[1]>Open[1]) 
                           {
                            dl=Close[0];
                            bool op_buy = OrderSend(Symbol(),OP_BUY,lot,
                            OrderSend(Symbol(),OP_BUY,lot,Ask,3,NormalizeDouble(Ask+TP*Point(),Digits()),"",14774,0,clrBlue);
                            lot=lot*koef;
                            X=1;            
                           }
                   
                    if(OrdersTotal() == 0 && Close[0]<S && Close[1]<Open[1]) 
                           {
                           dl=Close[0];
                           bool op_buy = OrderSend(Symbol(),OP_SELL,lot,
                            OrderSend(Symbol(),OP_SELL,lot,Bid,3,NormalizeDouble(Ask-SL*Point(),Digits()),"",14774,0,clrRed); 
                            lot=lot*koef;
                            X=2;
                           }

   return(0);
 }



У меня не получается, что я ни так сделал? Подскажите пожалуйста.

 
KAV AVK:
Подскажите пожалуйста. Как правельно воспользоваться вашим советом. Я не понимаю.

в редакторе нужно выделить не понятное слово и нажать клавишу F1

 
Iurii Tokman:

в редакторе нужно выделить не понятное слово и нажать клавишу F1

Благодарю за помощь, буду пробывать.


 
KAV AVK:
Благодарю за помощь, буду пробывать.


цены нужно нормализовать, и использовать размер пункта текущего инструмента в валюте котировки.

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                               Yuriy Tokman (YTG) |
//|                       https://www.mql5.com/ru/users/satop/seller |
//+------------------------------------------------------------------+
#property copyright "Yuriy Tokman (YTG)"
#property link      "https://www.mql5.com/ru/users/satop/seller"
#property version   "1.00"
#property strict

int X=0;
double S = 0.0000;
extern double       lot=0.1;
extern double       koef=1.5;
extern int       SL=10;
extern int       TP=10;
double dl;
double a;

bool op_pos = true;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   a=lot;
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {

   S=Open[0];
   Sleep(1000);

   if(OrdersTotal() == 0 && X==1)
     {
      if(Close[0]>dl)
        {
         lot=a;
        }
      X=0;
     }

   if(OrdersTotal() == 0 && X==2)
     {
      if(Close[0]<dl)
        {
         lot=a;
        }
      X=0;
     }

   if(OrdersTotal() == 0 && Close[0]>S && Close[1]>Open[1])
     {
      dl=Close[0];
      op_pos = OrderSend(Symbol(),OP_BUY,lot,
                         NormalizeDouble(Ask,Digits()),3,
                         NormalizeDouble(Ask-SL*Point(),Digits()),
                         NormalizeDouble(Ask+TP*Point(),Digits()),"",14774,0,clrBlue);
      if(!op_pos)
         Print((string(GetLastError())));
      lot=lot*koef;
      X=1;
     }

   if(OrdersTotal() == 0 && Close[0]<S && Close[1]<Open[1])
     {
      dl=Close[0];

      op_pos = OrderSend(Symbol(),OP_BUY,lot,
                         NormalizeDouble(Bid,Digits()),3,
                         NormalizeDouble(Bid+SL*Point(),Digits()),
                         NormalizeDouble(Bid-TP*Point(),Digits()),"",14774,0,clrBlue);
      if(!op_pos)
         Print((string(GetLastError())));
      lot=lot*koef;
      X=2;
     }

   return(0);
  }
//+------------------------------------------------------------------+
 
Iurii Tokman:

цены нужно нормализовать, и использовать размер пункта текущего инструмента в валюте котировки.

О боже, я попробую его в действие. Бесконечно вам благодарен!

 
KAV AVK:


вот это не правильно

lot=a;
lot=lot*koef;

lot - это внешняя переменная

Причина обращения: