igr-yard

 
Уровень 5

  Торгую в компаниях:


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

Рейтинг 2089



РЕКОМЕНДУЮ



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

cm-insurer.mq4 (5 Kb)Доброго здоровья! Просьба подправить советник. 1.данный советник считает прибыль от процента депозита. прошу исправить на прибыль в валюте. 2. советник когда достигает необходимого результата, закрывает все ордера. но при открытии нового ордера опять выставляет свои ордера. мне необходимо чтобы он после этого совсем выключался, пока его не активируют вручную. Заранее спасибо!
  • 0
  • Просмотров: 2322
  • 10 февраля 2016, 19:16
  • igr-yard
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
нужно смотреть код
avatar

  34  AM2 Сообщений: 15886 - Андрей

  • 10 февраля 2016, 19:18
+
0
Закрыл по профиту в валюте и ждет.



//+------------------------------------------------------------------+
//|                               Copyright © 2014, Vladimir Hlystov |
//|    Закрывает все ордера при определенном профите                 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, http://cmillion.narod.ru"
#property link      "cmillion@narod.ru"
#property version   "1.0"
#property description "Советник выставляет на расстоянии от крайних ордеров стоп ордера указанного объема, после их срабатывания и достижения суммарного профита всех ордеров данной валютной паре, советник все закрывает позиции по этой паре"
#property strict
//-------------------------------------------------------------------
extern double PercentProfitClose = 10;    //закрывать все ордера при получении профита в проценте от депозита
extern double CurrProfitClose    = 1000;  //закрывать все ордера при получении профита в валюте депозита
extern double Lot                = 5;     //лот страхующего стоп ордера
extern int    delta              = 25;    //расстояние до стоп ордера от крайней позиции
//--------------------------------------------------------------------
int one=0;
//+------------------------------------------------------------------+
int init()
  {
   if(IsTesting())
     {
      int err=OrderSend(Symbol(),OP_SELL,Lot/2,NormalizeDouble(Bid,Digits),30,0,0,NULL,0,0,Red);
     }
   return(0);
  }
//-------------------------------------------------------------------
int deinit()
  {
   return(0);
  }
//-------------------------------------------------------------------
int start()
  {
   double Profit=0,LB=0,LS=0,OL=0,MaxPrice=0,MinPrice=0;
   int b=0,s=0,bs=0,ss=0,OT;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            OT = OrderType();
            OL = OrderLots();
            double OOP=OrderOpenPrice();
            if(MaxPrice<OOP) MaxPrice=OOP;
            if(MinPrice>OOP || MinPrice==0) MinPrice=OOP;
            if(OT==OP_BUY)
              {
               b++;LB+= OL;
               Profit+=OrderProfit();
              }
            if(OT==OP_SELL)
              {
               s++;LS+= OL;
               Profit+=OrderProfit();
              }
            if(OT==OP_BUYSTOP) bs++;
            if(OT==OP_SELLSTOP) ss++;
           }
        }
     }
//--- 
   if(Profit>=CurrProfitClose)
     {
      Alert("Достигнут уровень профита = "+DoubleToStr(Profit,2));
      CloseAll();
      one=1;
     }
//--- 
   int err;
   if(one==0)
     {
      if(bs==0)
        {
         err=OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(MaxPrice+delta*Point,Digits),30,0,0,NULL,0,0,Blue);
        }
      if(ss==0)
        {
         err=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(MinPrice-delta*Point,Digits),30,0,0,NULL,0,0,Red);
        }
     }

   Comment("\n Profit: ",Profit);
   return(0);
  }
//------------------------------------------------------------------
bool CloseAll()
  {
   bool error=true;
   int j,err,nn,OT;
   while(true)
     {
      for(j=OrdersTotal()-1; j>=0; j--)
        {
         if(OrderSelect(j,SELECT_BY_POS))
           {
            if(OrderSymbol()==Symbol())
              {
               OT=OrderType();
               if(OT>1)
                 {
                  error=OrderDelete(OrderTicket());
                 }
               if(OT==OP_BUY)
                 {
                  error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,Blue);
                  if(error) Alert(Symbol(),"  Закрыт ордер N ",OrderTicket(),"  прибыль ",OrderProfit(),
                     " ",TimeToStr(TimeCurrent(),TIME_SECONDS));
                 }
               if(OT==OP_SELL)
                 {
                  error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,Red);
                  if(error) Alert(Symbol(),"  Закрыт ордер N ",OrderTicket(),"  прибыль ",OrderProfit(),
                     " ",TimeToStr(TimeCurrent(),TIME_SECONDS));
                 }
               if(!error)
                 {
                  err=GetLastError();
                  if(err<2) continue;
                  if(err==129)
                    {
                     Comment("Неправильная цена ",TimeToStr(TimeCurrent(),TIME_MINUTES));
                     Sleep(5000);
                     RefreshRates();
                     continue;
                    }
                  if(err==146)
                    {
                     if(IsTradeContextBusy()) Sleep(2000);
                     continue;
                    }
                  Comment("Ошибка ",err," закрытия ордера N ",OrderTicket()," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
                 }
              }
           }
        }
      int k=0;
      for(j= 0; j<OrdersTotal(); j++)
        {
         if(OrderSelect(j,SELECT_BY_POS))
           {
            if(OrderSymbol()==Symbol())
              {
               OT=OrderType();
               if(OT==OP_BUY || OT==OP_SELL) k++;
              }
           }
        }
      if(k==0) break;
      nn++;
      if(nn>10) {Alert(Symbol(),"  Не удалось закрыть все сделки, осталось еще ",k);return(0);}
      Sleep(1000);
      RefreshRates();
     }
   return(1);
  }
//--------------------------------------------------------------------
avatar

  34  AM2 Сообщений: 15886 - Андрей

  • 10 февраля 2016, 19:51
+
0
Андрей! он и будет ждать. пока не откроется какой то ордер. мне он нужен в исключительных обстоятельствах. для контроля другого советника. а другой советник откроет ордер сразу же как на это будет сигнал индикатора. вот тогда мне и нужно чтобы этот советник больше не вмешивался, пока я его не активирую сам.
avatar

  5  igr-yard Автор Сообщений: 77

  • 10 февраля 2016, 19:57
+
0
открой ордер вручную.
avatar

  5  igr-yard Автор Сообщений: 77

  • 10 февраля 2016, 19:59
+
0
поставь советник и посмотри :) 
avatar

  34  AM2 Сообщений: 15886 - Андрей

  • 10 февраля 2016, 20:07
+
0
хорошо. тестирую.
avatar

  5  igr-yard Автор Сообщений: 77

  • 10 февраля 2016, 20:18
+
0
Андрей! Спасибо! вроде всё работает. после срабатывания отключается. активация только путём переустановки? или возможны варианты?
avatar

  5  igr-yard Автор Сообщений: 77

  • 10 февраля 2016, 20:59
+
0
ещё вопрос. советник только для 5знака? в инсте на 4знаке по евро нормально работает, а по йене не корректно.
avatar

  5  igr-yard Автор Сообщений: 77

  • 10 февраля 2016, 22:08

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