Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



Поправить советник

Добрый вечер, программисты!

Сможете поправить советник! Суть такова, чтобы стоп двигался с каждым тиком в нужную сторону и до уровня безубытка.

спасибо!modifystoploss.mq4 (5 Kb)
  • 0
  • Просмотров: 2675
  • 12 ноября 2015, 23:01
  • PetrovMaxim
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Просьба немного доработать советник
Следующая запись в группе  
изменение существующего индикатора
12 ноября 2015
13 ноября 2015

Брокер для ваших роботов, 15 лет на рынке

Комментарии (2)

+
+1
Поправил:


//--------------------------------------------------------------------
// modifystoploss.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
extern int Tral_Stop=100;                        // Дист. преследования
//--------------------------------------------------------------- 1 --
int start() // Спец. функция start
  {
   string Symb=Symbol();                        // Финанс. инструмент

//--------------------------------------------------------------- 2 --
   for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
     {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         int Tip=OrderType();                   // Тип ордера
         if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
         double SL=OrderStopLoss();             // SL выбранного орд.
         //------------------------------------------------------ 3 --
         while(true) // Цикл модификации
           {
            double TS=Tral_Stop;                // Исходное значение
            int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист
            if(TS<Min_Dist) // Если меньше допуст.
               TS=Min_Dist;                     // Новое значение TS
            //--------------------------------------------------- 4 --
            bool Modify=false;                  // Не назначен к модифи
            switch(Tip)                         // По типу ордера
              {
               case 0 :                         // Ордер Buy
                  if(NormalizeDouble(SL,Digits)<NormalizeDouble(Bid-TS*Point,Digits))// Если ниже желаем.
                    {
                     SL=Bid-TS*Point;           // то модифицируем его
                     if(SL<OrderOpenPrice())
                       {
                        string Text="Buy ";        // Текст для Buy 
                        Modify=true;               // Назначен к модифи.
                       }
                    }
                  break;                        // Выход из switch
               case 1 :                         // Ордер Sell
                  if(NormalizeDouble(SL,Digits)>NormalizeDouble(Ask+TS*Point,Digits) || NormalizeDouble(SL,Digits)==0)//или равно нулю// Если выше желаем.
                    {
                     SL=Ask+TS*Point;           // то модифицируем его
                     if(SL>OrderOpenPrice())
                       {
                        Text="Sell ";              // Текст для Sell 
                        Modify=true;               // Назначен к модифи.
                       }
                    }
              }                                 // Конец switch
            if(Modify==false) // Если его не модифи
               break;                           // Выход из while
            //--------------------------------------------------- 5 --
            double TP    =OrderTakeProfit();    // TP выбранного орд.
            double Price =OrderOpenPrice();     // Цена выбранн. орд.
            int    Ticket=OrderTicket();        // Номер выбранн. орд.

            Alert("Модификация ",Text,Ticket,". Ждём ответ..");
            bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
            //--------------------------------------------------- 6 --
            if(Ans==true) // Получилось <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '> 
              {
               Alert("Ордер ",Text,Ticket," модифицирован<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '> ");
               break;                           // Из цикла модифи.
              }
            //--------------------------------------------------- 7 --
            int Error=GetLastError();           // Не получилось <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/005.gif' alt=' ( '> 
            switch(Error)                       // Преодолимые ошибки
              {
               case 130:Alert("Неправильные стопы. Пробуем ещё раз.");
               RefreshRates();               // Обновим данные
               continue;                     // На след. итерацию
               case 136:Alert("Нет цен. Ждём новый тик..");
               while(RefreshRates()==false)  // До нового тика
                  Sleep(1);                  // Задержка в цикле
               continue;                     // На след. итерацию
               case 146:Alert("Подсистема торгов занята.Пробуем ещё");
               Sleep(500);                   // Простое решение
               RefreshRates();               // Обновим данные
               continue;                     // На след. итерацию
                                             // Критические ошибки
               case 2 : Alert("Общая ошибка.");
               break;                        // Выход из switch
               case 5 : Alert("Старая версия клиентского терминала.");
               break;                        // Выход из switch
               case 64: Alert("Счет заблокирован.");
               break;                        // Выход из switch
               case 133:Alert("Торговля запрещена");
               break;                        // Выход из switch
               default: Alert("Возникла ошибка ",Error);//Др. ошибки
              }
            break;                              // Из цикла модифи.
           }                                    // Конец цикла модифи.
         //------------------------------------------------------ 8 --
        }                                       // Конец анализа орд.
     }                                          // Конец перебора орд.

   if(IsTesting() && OrdersTotal()<1)
     {
     int r=0;
      //r=OrderSend(Symbol(),OP_SELL,0.1,Bid,50,Bid+500*Point,Bid-1500*Point,"",123,0,Red);
      r=OrderSend(Symbol(),OP_BUY,0.1,Ask,50,Ask-500*Point,Ask+1500*Point,"",123,0,Blue);
     }
//--------------------------------------------------------------- 9 --
   return(0);                                      // Выход из start()
  }
//-------------------------------------------------------------- 10 --

avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 13 ноября 2015, 00:37
+
0
Андрей, спасибо!
avatar

  7  PetrovMaxim Автор Сообщений: 119 - Максим

  • 13 ноября 2015, 07:07

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