Кто сможет помочь с роботом, почему не работает? - страница 2

 
Alexey Volchanskiy:

Нельзя по правилам языка проглатывать параметры со значениями по умолчанию. Если надо задавать цвет стрелочек, то пишите все параметры левее цвета. B slippage 3 мало, ели это 5-знак, будут реквоты, я написал 50. И значения СЛ и ТП надо задать не равными нулю, тут уже Aleksey Vakhrushev написал об этом.


Ошибка:

             return value of 'OrderSend' should be checked
 
GIM:

Ошибка:

             return value of 'OrderSend' should be checked
Это лишь предупреждение. Файл скомпилируется.
 

Добрый день помогите пожалуйста.Советник открывает только на продажу.  

 


extern double Lots=0.1;
extern int FastMAPeriod=14;
extern int FastMAMethod=0; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
extern int FastMAPrice=0; // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted
extern int SlowMAPeriod=42;
extern int SlowMAMethod=0; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
extern int SlowMAPrice=0; // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted
extern int TP=0; //тейкпрофит
 extern int SL=0; //стоплосс

int BuyTicket,SellTicket;



int start(){

      double fast_ma1=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,1);
      double slow_ma1=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1);
      double fast_ma2=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,2);
      double slow_ma2=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,2);


         if(fast_ma1>slow_ma1 && !(fast_ma2>slow_ma2)){
            if(SellTicket!=0){               //Истина, если SellTicket не равно 0    ; 

            SellTicket=0;
            }
            if(BuyTicket==0){            ////  Истина, если BuyTicket равно 0 ; 
 
               BuyTicket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL=Ask-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE);
            }
         }
         if(fast_ma1<slow_ma1 && !(fast_ma2<slow_ma2)){
            if(BuyTicket!=0){                 //Истина, если BuyTicket не равно 0    ;
              
               BuyTicket=0;
            }
            if(SellTicket==0){ // Истина, если SellTicket равно 0
               SellTicket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE);
            }
         }         
         
      

   return(0);
}

 
Alexey Kozitsyn:
Это лишь предупреждение. Файл скомпилируется.
Ну все равно сделку не открывает.....
 
GIM:
Ну все равно сделку не открывает.....
Ну, видно не судьба... Хотя, возможно, стоит заглянуть в журнал, посмотреть, что пишет... Ну это так, как вариант.
 
Alexey Kozitsyn:
Ну, видно не судьба... Хотя, возможно, стоит заглянуть в журнал, посмотреть, что пишет... Ну это так, как вариант.
Спасибо! Буду и дальше пробовать))
 
AdikAmir:

Добрый день помогите пожалуйста.Советник открывает только на продажу.  

 


extern double Lots=0.1;
extern int FastMAPeriod=14;
extern int FastMAMethod=0; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
extern int FastMAPrice=0; // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted
extern int SlowMAPeriod=42;
extern int SlowMAMethod=0; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
extern int SlowMAPrice=0; // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted
extern int TP=0; //тейкпрофит
 extern int SL=0; //стоплосс

int BuyTicket,SellTicket;



int start(){

      double fast_ma1=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,1);
      double slow_ma1=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1);
      double fast_ma2=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,2);
      double slow_ma2=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,2);


         if(fast_ma1>slow_ma1 && !(fast_ma2>slow_ma2)){
            if(SellTicket!=0){               //Истина, если SellTicket не равно 0    ; 

            SellTicket=0;
            }
            if(BuyTicket==0){            ////  Истина, если BuyTicket равно 0 ; 
 
               BuyTicket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL=Ask-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE);
            }
         }
         if(fast_ma1<slow_ma1 && !(fast_ma2<slow_ma2)){
            if(BuyTicket!=0){                 //Истина, если BuyTicket не равно 0    ;
              
               BuyTicket=0;
            }
            if(SellTicket==0){ // Истина, если SellTicket равно 0
               SellTicket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE);
            }
         }         
         
      

   return(0);
}

Странный код я такого еще не видел.

 Переменные  BuyTicket и SellTicket при поступлении нового тика каждый раз будут равны нулю или непонятно чему так как они не инициализируются.

Конструкция   if(fast_ma1>slow_ma1 && !(fast_ma2>slow_ma2)) совсем не понятна в переводе на человеческий язык это условие выглядит так: 

если  fast_ma1 больше slow_ma1 И НЕ fast_ma2 больше slow_ma2. Оператор ! означает отрицание по другому это можно записать так: if(fast_ma1>slow_ma1 && (fast_ma2<slow_ma2))

У вас получается условие выполняется когда выражение  fast_ma1>slow_ma1 = true (истинно) и fast_ma2>slow_ma2 = false (ложно)

....
if (OrdersTotal()==0)
{
  if (условие на покупку)
  {
    ticet = OrderSend(Symbol(),OP_BUY,.....);
    if (ticet==0) Print("ERROR");
  }
  if (условие на продажу)
  {
    ticet = OrderSend(Symbol(),OP_SELL,.....);    
    if (ticet==0) Print("ERROR");
  }

}
//Простейший код для примера.
 
Vitalii Ananev:

Странный код я такого еще не видел.

 Переменные  BuyTicket и SellTicket при поступлении нового тика каждый раз будут равны нулю или непонятно чему так как они не инициализируются.

Конструкция   if(fast_ma1>slow_ma1 && !(fast_ma2>slow_ma2)) совсем не понятна в переводе на человеческий язык это условие выглядит так: 

если  fast_ma1 больше slow_ma1 И НЕ fast_ma2 больше slow_ma2. Оператор ! означает отрицание по другому это можно записать так: if(fast_ma1>slow_ma1 && (fast_ma2<slow_ma2))

У вас получается условие выполняется когда выражение  fast_ma1>slow_ma1 = true (истинно) и fast_ma2>slow_ma2 = false (ложно)

Я поставил ваш код все равно позицию на Sell не открывает.Чисто на BUY.
 
AdikAmir:
Я поставил ваш код все равно позицию на Sell не открывает.Чисто на BUY.

extern double Lots=0.1;
extern int FastMAPeriod=5;
extern int FastMAMethod=0; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
extern int FastMAPrice=0; // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted
extern int SlowMAPeriod=75;
extern int SlowMAMethod=3; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
extern int SlowMAPrice=3; // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted
extern int TP=500; //тейкпрофит
 extern int SL=250; //стоплосс
double ticet;

int start(){

      double fast_ma1=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,1);
      double slow_ma1=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1);
      double fast_ma2=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,2);
      double slow_ma2=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,2);

if (OrdersTotal()==0)
{
  if (fast_ma1>slow_ma1 && (fast_ma2<slow_ma2))
  {   ticet = OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE);
     
    if (ticet==0) Print("ERROR");
  }
if (slow_ma1>fast_ma1 && (slow_ma2<fast_ma2))
  {
   
   
  ticet = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE);    
    if (ticet==0) Print("ERROR");
  }

}

   return(0);
}



 


 
Нужно поменять знаки при рассчете SL /TP
ticet = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE); 
Причина обращения: