Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Статьи помогут закрепить твои знания. Заходи и читай!
Олег
84
Олег 2012.03.02 14:55 
//+------------------------------------------------------------------
                                          // Численные значения для М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 знаков, или ошибка кода здесь. Хотябы направление понять. С уважением к мастерам !!!
Роман
7939
Роман 2012.03.02 15:01  
aleks-tomsk:
Господа! Помогите хотя бы на мысль натолкнуть. Пишу эксперта, меняю данные. Но он не работает. Компиляция без ошибок. Выдает OrderSend error 130 и все тут. Может быть ошибка, что у ДЦ 5 знаков, или ошибка кода здесь. Хотябы направление понять. С уважением к мастерам !!!


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

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

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

Сергей
728
Сергей 2012.03.02 15:03  
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-ти знака).

new-rena
3372
new-rena 2012.03.02 15:23  

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

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

Олег
84
Олег 2012.03.02 15:47  
Roman.:


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

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

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


Спасибо, большое !!!
Олег
84
Олег 2012.03.02 15:47  
new-rena:

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

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


Благодарю Вас !!!
Олег
84
Олег 2012.03.02 15:51  
zxc:


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

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

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


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

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

Victor Nikolaev
Модератор
14508
Victor Nikolaev 2012.03.02 17:09  
aleks-tomsk:

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

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


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

new-rena
3372
new-rena 2012.03.02 17:46  
aleks-tomsk:

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

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

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

А вы ее для чего используете?
new-rena
3372
new-rena 2012.03.02 17:54  
Vinin:

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

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

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

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

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий