Автоматизация торговли на финансовых рынках Автоматизация торговли на финансовых рынках

 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Требуется помощь с безубытком и его тралом

 
Начать новую тему   Ответить на тему    Список форумов Автоматизация торговли на финансовых рынках -> Программирование в MQL4
Предыдущая тема :: Следующая тема  
Автор Сообщение
Tramloyr



Зарегистрирован: 12.02.2014
Сообщения: 6

СообщениеДобавлено: Чт Мар 13, 2014 11:35 am    Заголовок сообщения: Требуется помощь с безубытком и его тралом Ответить с цитатой

Вообщем имею в советнике вот такой код

Код:
extern string T5_1 = "Безубыток для Пирамиды";
extern bool   WL            = true;    // Включение, отключение безубытка ордеров.
extern int    WLstart       = 30;      // Откуда переводим (пункты профита)
extern int    WLlevel       = 1;       // Куда переводим (пункты профита)
//---------------------------------------
extern string T5_2 = "Trailing для Пирамиды";
extern bool   Trailing      = true;    // Вкл. треилинга     
extern int    TrailingStop  = 30;      // Размер трала в пунктах     
extern int    TrailingStep  = 30;      // Шаг трала в пунктах

//==========================================================

//+------------------------------------------------------------------+
//| global variables                                                 |
//+------------------------------------------------------------------+

double dPiramidTP = 0.0;
double dWLstart = 0.0;
double dWLlevel = 0.0;
double dTrailingStop = 0.0;
double dTrailingStep = 0.0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

//---- проверка введенных пользователем данных
if(WLlevel < 0) WLlevel = 0.0;
   if(WLstart < 0) WLstart = 0.0;
   if(TrailingStop < 0) TrailingStop = 0.0;
   if(TrailingStep < 0) TrailingStep = 0.0;

//---конвертация данных

   dWLstart = WLstart;
   InfoChangeToDigit(_Symbol, dWLstart);
   dWLlevel = WLlevel;
   InfoChangeToDigit(_Symbol, dWLlevel);
   dTrailingStop = TrailingStop;
   InfoChangeToDigit(_Symbol, dTrailingStop);
   dTrailingStep = TrailingStep;
   InfoChangeToDigit(_Symbol, dTrailingStep);

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
// Трейлинг Стоп ордеров пирамиды
void PiramidTrailing(){
   if(Trailing && TrailingStop > 0.0){
      for(int i=OrdersTotal()-1;i>=0;i--){
         if(OrderSelect(i,SELECT_BY_POS)){
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicPiramid){
               switch(OrderType()){
                  case OP_BUY:
                     double _price = OrderStopLoss();                     
                     if(_price == 0.0 || _price < OrderOpenPrice()) _price = OrderOpenPrice();
                     //
                     if(Bid >= NormalizeDouble(_price+dTrailingStop,Digits)){
                        double _new_sl = NormalizeDouble(Bid-dTrailingStep,Digits);
                        if(NormalizeDouble(OrderStopLoss()-_new_sl,Digits)!=0.0 && _new_sl > _price){
                           OrderModify(OrderTicket(),OrderOpenPrice(),_new_sl,OrderTakeProfit(),OrderExpiration());
                        }
                     }                     
                     break;
                  case OP_SELL:
                     _price = OrderStopLoss();
                     if(_price == 0.0 || _price > OrderOpenPrice()) _price = OrderOpenPrice();
                     //
                     if(Ask <= NormalizeDouble(_price-dTrailingStop,Digits)){
                        _new_sl = NormalizeDouble(Ask+dTrailingStep,Digits);
                        if(NormalizeDouble(OrderStopLoss()-_new_sl,Digits)!=0.0 && _new_sl < _price){
                           OrderModify(OrderTicket(),OrderOpenPrice(),_new_sl,OrderTakeProfit(),OrderExpiration());
                        }
                     }
                     break;
               }
            }
         }
      }
   }

//+------------------------------------------------------------------+ 
// Установка безубытка для ордеров пирамиды
void PiramidBE(){
   if(WL && WLstart > 0){
      for(int i=OrdersTotal()-1;i>=0;i--){
         if(OrderSelect(i,SELECT_BY_POS)){
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicPiramid){
               switch(OrderType()){
                  case OP_BUY:
                     if(OrderStopLoss()==0.0 || OrderStopLoss() < NormalizeDouble(OrderOpenPrice()+dWLlevel,Digits)){
                        if(Bid >= NormalizeDouble(OrderOpenPrice()+dWLstart,Digits)){
                           double _new_sl = NormalizeDouble(OrderOpenPrice()+dWLlevel,Digits);
                           if(NormalizeDouble(OrderStopLoss()-_new_sl,Digits)!=0.0){   
                              OrderModify(OrderTicket(),OrderOpenPrice(),_new_sl,OrderTakeProfit(),OrderExpiration());
                           }
                        }
                     }
                     break;
                  case OP_SELL:
                     if(OrderStopLoss()==0.0 || OrderStopLoss() > NormalizeDouble(OrderOpenPrice()-dWLlevel,Digits)){
                        if(Ask <= NormalizeDouble(OrderOpenPrice()-dWLstart,Digits)){
                           _new_sl = NormalizeDouble(OrderOpenPrice()-dWLlevel,Digits);
                           if(NormalizeDouble(OrderStopLoss()-_new_sl,Digits)!=0.0){   
                              OrderModify(OrderTicket(),OrderOpenPrice(),_new_sl,OrderTakeProfit(),OrderExpiration());
                           }
                        }
                     }
                     break;
               }
            }
         }
      }
   }
}


Мне нужно добавить в блок без убытка еще один параметр
Код:
extern int    BU_Start      = 2;       // С какова ордера ничинать выставлять без убыток

А так же в блок трейлинга этого без убытка
Код:
extern int    Trailing_Start= 2;       // С какова ордера ничинать тралить стоп лос без убытка.


Пробовал изменять строку
Код:
for(int i=OrdersTotal()-1;i>=0;i--){

вот таким образом
Код:
 for(int i=OrdersTotal()-1;i>=BU_Start;i--){


так же и в трале, но данная работа проходит не коректно и срабатывает по чему то через раз
если сделать i>=2; то без убыток начинает отрабатывать со второго ордера, но если вместо 2 вставлен BU_Start в тестере работает нормально с визуалом, а в онлан режиме переодически и очнь часто глюки появляются, в основном в упор не хочет видеть что ему там выставляешь и шпарит как обычно с первого ордера.

Буду очень признателен если поможете в реализации с пояснениями, я вроде бы как пока начинающий программист и все пояснения были бы мне к стати

Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Автоматизация торговли на финансовых рынках -> Программирование в MQL4 Часовой пояс: GMT + 5
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять вложения в этом форуме
Вы не можете просматривать вложения в этом форуме
Рейтинг@Mail.ru


Powered by phpBB © 2001, 2005 phpBB Group