Господа! Помогите хотя бы на мысль натолкнуть.

 
//+------------------------------------------------------------------
                                          // Численные значения для М30
extern double StopLoss     = 20;          // SL для открываемого ордера
extern double TakeProfit   = 50;          // ТР для открываемого ордера
extern double Lots         = 3.0;         // Жестко заданное колич. лотов
extern double TrailingStop = 20;          // Trail stop in points
extern double Prots        = 0.4;         // Процент свободных средств

//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()                                  // Внутренние переменные
  {
  double MA_1Current,MA_1Previous,MA_2Current, MA_2Previous;
  double MA_3Current, MA_3Previous, StochMCurrent, StochMPrevious;
  double StochSCurrent, StochSPrevious, MacdSCurrent, MacdSPrevious;
  int cnt, ticket, total;
  
//+------------------------------------------------------------------+
       
                                              //Описание функций технических индикаторов.
MA_1Current    = iMA(NULL,0,5,0,MODE_EMA,PRICE_OPEN,0);              // МА_1 0 бар
MA_1Previous   = iMA(NULL,0,5,0,MODE_EMA,PRICE_OPEN,1);              // МА_1 1 бар
MA_2Current    = iMA(NULL,0,13,0,MODE_EMA,PRICE_OPEN,0);             // МА_2 0 бар
MA_2Previous   = iMA(NULL,0,13,0,MODE_EMA,PRICE_OPEN,1);             // МА_2 1 бар
MA_3Current    = iMA(NULL,0,34,0,MODE_EMA,PRICE_OPEN,0);             // МА_3 0 бар
MA_3Previous   = iMA(NULL,0,34,0,MODE_EMA,PRICE_OPEN,1);             // МА_3 1 бар
StochMCurrent  = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);    // Sto_M 0 бар
StochMPrevious = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1);    // Sto_M 1 бар
StochSCurrent  = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);  // Sto_S 0 бар
StochSPrevious = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);  // Sto_S 1 бар
MacdSCurrent   = iMACD(NULL,0,5,7,3,PRICE_OPEN,MODE_SIGNAL,0);       // MACD_S 0 бар
MacdSPrevious  = iMACD(NULL,0,5,7,3,PRICE_OPEN,MODE_SIGNAL,1);       // MACD_S 1 бар

                                                   //Проверка наличия открытых ордеров. 
total=OrdersTotal(); 
if(total<1)
  {
   //Определение торговых критериев.
   //Проверяем возможность открытия длинной позиции.                                              
   if(MA_1Current<MA_2Current && MacdSCurrent<0 && MacdSPrevious>0 && 
      StochMPrevious>50 && StochMPrevious>StochSPrevious)
     {   
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Bid+TakeProfit*Point);
      return(0);   
     }    
   //Проверяем возможность открытия короткой позиции.  
   if(MA_1Current>MA_2Current && MacdSCurrent>0 && MacdSPrevious<0 && 
      StochMPrevious<50 && StochMPrevious<StochSPrevious)
     {   
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Ask-TakeProfit*Point);
      return(0); 
     }
   return(0);                          
  }      
//+------------------------------------------------------------------+
                                                   //Контроль открытых позиций.
for(cnt=0;cnt<total;cnt++)  
  {      
   OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);  
   if(OrderType()<=OP_SELL &&                     // это открытая позиция? OP_BUY или OP_SELL.         
      OrderSymbol()==Symbol())                    // инструмент совпадает?       
     {         
      if(OrderType()==OP_BUY)                     // открыта длинная позиция.           
        {                                         // проверка необходимости закрытия позиции. 
         if(StochMCurrent>StochSCurrent &&  StochMPrevious<StochSPrevious && 
            MacdSCurrent>MacdSPrevious)
             {
              OrderClose(OrderTicket(),OrderLots(),Bid,3);      // закрываем позицию.  
              return(0);                          // выход.
             }
                                                  // проверка - трейлинг стоп ставить?                       
         if(TrailingStop>0) 
           {
            if(Bid-OrderOpenPrice()>Point*TrailingStop)
              {
               if(OrderStopLoss()<Bid-Point*TrailingStop)
                 {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,
                              OrderTakeProfit(),0);
                  return(0);
                 }
              }
           }
        }
      else // Иначе, это короткая позиция.
        {
                                // проверка необходимости закрытия позиции.
         if(StochMCurrent<StochSCurrent &&  StochMPrevious>StochSPrevious && 
            MacdSCurrent<MacdSPrevious)
           {
            OrderClose(OrderTicket(),OrderLots(),Ask,3);      // закрываем позицию.
            return(0);                                        // выход.
           }
                               // проверка - трейлинг стоп ставить?
         if(TrailingStop>0) 
           {
            if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
              {
               if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                 {
                  OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,
                              OrderTakeProfit(),0);
                  return(0);
                 }
              }
           }
        }   
     }
  }
return(0);
}
//Коне
Господа! Помогите хотя бы на мысль натолкнуть. Пишу эксперта, меняю данные. Но он не работает. Компиляция без ошибок. Выдает OrderSend error 130 и все тут. Может быть ошибка, что у ДЦ 5 знаков, или ошибка кода здесь. Хотябы направление понять. С уважением к мастерам !!!
 
aleks-tomsk:
Господа! Помогите хотя бы на мысль натолкнуть. Пишу эксперта, меняю данные. Но он не работает. Компиляция без ошибок. Выдает OrderSend error 130 и все тут. Может быть ошибка, что у ДЦ 5 знаков, или ошибка кода здесь. Хотябы направление понять. С уважением к мастерам !!!


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

Можете для начала просто эти уровни заменить нулями... Причин может быть много, в частости в отсутствие необходимых проверок при установке того или иного типа ордера... близкие стопы... Их надо всегда делать эти проверки...

П.С. Ваш код не смотрел.

 
aleks-tomsk:
Господа! Помогите хотя бы на мысль натолкнуть. Пишу эксперта, меняю данные. Но он не работает. Компиляция без ошибок. Выдает OrderSend error 130 и все тут. Может быть ошибка, что у ДЦ 5 знаков, или ошибка кода здесь. Хотябы направление понять. С уважением к мастерам !!!


Конечно неправильные стопы. StopLoss = 20 - для пятизнака, это как StopLoss = 2 для четырехзнака.

Поставьте стопы в 10 раз больше (тейкпрофит и трейлинг это тоже касается).

И здесь: OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Bid+TakeProfit*Point) тройку измените на 30 (в 10 раз больше для 5-ти знака).

 

Вот оно. Моё читайте про ошибки...

Там код функции обработки ошибок. Скажет Вам на русском - в чём дело

 
Roman.:


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

Можете для начала просто эти уровни заменить нулями... Причин может быть много, в частости в отсутствие необходимых проверок при установке того или иного типа ордера... близкие стопы... Их надо всегда делать эти проверки...

П.С. Ваш код не смотрел.


Спасибо, большое !!!
 
new-rena:

Вот оно. Моё читайте про ошибки...

Там код функции обработки ошибок. Скажет Вам на русском - в чём дело


Благодарю Вас !!!
 
zxc:


Конечно неправильные стопы. StopLoss = 20 - для пятизнака, это как StopLoss = 2 для четырехзнака.

Поставьте стопы в 10 раз больше (тейкпрофит и трейлинг это тоже касается).

И здесь: OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Bid+TakeProfit*Point) тройку измените на 30 (в 10 раз больше для 5-ти знака).


Спасибо Вам за ценный совет.Получается, что функцию

DoubleToStr() необязательно использовать?

 
aleks-tomsk:

Спасибо Вам за ценный совет.Получается, что функцию

DoubleToStr() необязательно использовать?


А Вы ее для каких целей используете?

 
aleks-tomsk:

Спасибо Вам за ценный совет.Получается, что функцию

DoubleToStr() необязательно использовать?

Не везде проходит без неё. Кое где нужна. От ДЦ зависит - есть ли у него обработка размера лота на тему округлений... Кое кто округлять не научился пока. Ггггг
 
new-rena:
Не везде проходит без неё. Кое где нужна. От ДЦ зависит - есть ли у него обработка размера лота на тему округлений... Кое кто округлять не научился пока. Ггггг

А вы ее для чего используете?
 
Vinin:

А вы ее для чего используете?

Извините. Я тоже ступил. Это же только чтобы символьную переменную получить из той что с запятой и более менее округленной.

В его случае нужно про NormalizeDouble() в букваре почитать.

Совсем уже мозги закипают под вечер с этой ФОРОЙ

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