beton2011

 
Уровень 14

  Моя торговля


График торгового счета beton2011


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

Рейтинг 2151



РЕКОМЕНДУЮ



Советник "Тени свечи"

Здравствуйте Андрей.

Можно попросить написать для меня советник, есть одна интересная идея у меня :) 

Логика такая, на открытии новой свечи открывается два противоположных ордера ( замок ). В настройках советника задаем ТП для прибыльного ордера и СЛ для убыточного ордера. Но проблема в том что мы изначально не знаем какой ордер будет прибыльным а какой убыточный, значит надо сделать отдельные счетчики для противоположных ордеров. Первым должен закрыться профитный ордер по ТП, сразу после закрытия профитного ордера выставляется СЛ для убыточного ордера, если получится сделать переключатель в настройках советника, какой должен первый ордер закрыться, профитный или убыточный, соответственно меняется логика. Если мы будет закрывать с начало убыточный ордер по СЛ, тогда нужно автоматическое выставление ТП для прибыльного ордера.

На каждой новой свече закрываются все открытые ордера и выставляются новый замок.

Пока так, если будет непонятно, попробую по другому объяснить :D 
  • +1
  • Просмотров: 4488
  • 18 мая 2016, 16:54
  • beton2011
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Можно смотреть пункты прибыли или профит в валюте ордера, закрывать прибыльный а с убытком дальше что то делать. Надо набросок сделать посмотреть вместе и затем дальше согласовывать.
avatar

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

  • 18 мая 2016, 18:06
+
0
Хорошо, сделайте пожалуйсто набросок.
avatar

  14  beton2011 Автор Сообщений: 895

  • 18 мая 2016, 18:50
+
0
Набросок есть но мне нужно понимать что я делаю и для чего все это:


//+------------------------------------------------------------------+
//|                                                       Shadow.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь
extern int TimeClose     = 30;       // время закрытия
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,0,0,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Время открытия позиции                                           |
//+------------------------------------------------------------------+
datetime TimeOrderOpen()
  {
   datetime t=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) t=OrderOpenTime();
           }
        }
     }
   return(t);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Mode()
  {
   bool m;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(OrderStopLoss()==0 && OrderProfit()<0)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderStopLoss()==0 && OrderProfit()<0)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseProfit()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid-OrderOpenPrice()>=TakeProfit*Point)
                 {
                  CloseAll(0);
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()-Ask>=TakeProfit*Point)
                 {
                  CloseAll(1);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1)
     {
      PutOrder(0,Ask);
      PutOrder(1,Bid);
     }
   else CloseProfit();

   if(TimeCurrent()-TimeOrderOpen()>TimeClose*60) CloseAll();
   if(CountTrades()==1) Mode();
  }
//+------------------------------------------------------------------+

avatar

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

  • 18 мая 2016, 21:11
+
0
Это типа советник для флэта. Вот как я думал, скажем ставим ТП 40п для прибыльного ордера и 30п СЛ для убыточного ордера, чаше всего цена будет откатывать после закрытия прибыльного ордера, вот тогда и закрывается убыточный ордер по стопу и у нас получается общая прибыль в 10п.

Это типа торговля с расчетом на откат цены.

По советнику все правильно, осталось только придумать как закрывать убыточный ордер так чтоб получилась общая прибыль. Может вы че то придумаете, а я пока тоже еще подумаю до завтра.
avatar

  14  beton2011 Автор Сообщений: 895

  • 18 мая 2016, 21:54
+
0
Доброе утро :) 

Ничего не надо менять в советнике, тока сделайте чтоб по СЛ также работал как и по ТП, а то он сейчас когда закроется по СЛ открывает сразу замок, а надо чтоб на новой свече все закрывал и снова открывал.
avatar

  14  beton2011 Автор Сообщений: 895

  • 19 мая 2016, 08:36
+
0
Так примерно? :) 




//+------------------------------------------------------------------+
//|                                                       Shadow.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern int StopLoss      = 300;      // лось
extern int TakeProfit    = 400;      // язь
extern int TimeClose     = 1440;     // время закрытия
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,0,0,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Время открытия позиции                                           |
//+------------------------------------------------------------------+
datetime TimeOrderOpen()
  {
   datetime dt=0;
   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()<2) dt=OrderOpenTime();
        }
     }
   return(dt);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Mode()
  {
   bool m;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(OrderStopLoss()==0 && Bid>OrderOpenPrice()-StopLoss*Point)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderStopLoss()==0 && Ask<OrderOpenPrice()+StopLoss*Point)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseProfit()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid-OrderOpenPrice()>=TakeProfit*Point)
                 {
                  CloseAll(0);
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()-Ask>=TakeProfit*Point)
                 {
                  CloseAll(1);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1 && t!=Time[0])
     {
      PutOrder(0,Ask);
      PutOrder(1,Bid);
      t=Time[0];
     }

   if(CountTrades()>0) CloseProfit();
   if(TimeCurrent()-TimeOrderOpen()>TimeClose*60) CloseAll(-1);
   if(CountTrades()==1) Mode();

   Comment("\n TimeOrderOpen:  ",TimeOrderOpen(),
           "\n TimeCurrent: ",TimeCurrent(),
           "\n Minus:  ",(int)(TimeCurrent()-TimeOrderOpen()));
  }
//+------------------------------------------------------------------+

avatar

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

  • 19 мая 2016, 11:38
+
0
Не, че то не то. В первой версии все правильно закрывал по стопу, тока надо было чтоб работал как при закрытии по ТП. То есть логика такая же как по ТП, тока надо чтоб по СЛ.
avatar

  14  beton2011 Автор Сообщений: 895

  • 19 мая 2016, 12:40
+
0
Я тормоз. Вы в последней версии уже доработали стоп для убыточного ордера. Я сейчас еще немного посмотрю и дам ответ.
avatar

  14  beton2011 Автор Сообщений: 895

  • 19 мая 2016, 15:12
+
0
Не знаю как у вас это получилось но все работает так как я хотел :) 

Осталось только сделать так чтоб закрывался с начало убыточный ордер а потом прибыльный по ТП, может нужен переключатель в самом советнике.

Тогда будет точно все.
avatar

  14  beton2011 Автор Сообщений: 895

  • 19 мая 2016, 15:41
+
0
Cделано:


//+------------------------------------------------------------------+
//|                                                       Shadow.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern int StopLoss      = 300;      // лось
extern int TakeProfit    = 400;      // язь
extern int TimeClose     = 1440;     // время закрытия
extern int CloseTake     = 1;        // 1-кроем сначала плюс 0-минус
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,0,0,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Время открытия позиции                                           |
//+------------------------------------------------------------------+
datetime TimeOrderOpen()
  {
   datetime dt=0;
   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()<2) dt=OrderOpenTime();
        }
     }
   return(dt);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Mode()
  {
   bool m;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(OrderStopLoss()==0 && Bid>OrderOpenPrice()-StopLoss*Point && CloseTake==1)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }

               if(OrderTakeProfit()==0 && Bid<OrderOpenPrice()+TakeProfit*Point && CloseTake==0)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()+TakeProfit*Point,0,Yellow);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderStopLoss()==0 && Ask<OrderOpenPrice()+StopLoss*Point && CloseTake==1)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }

               if(OrderTakeProfit()==0 && Ask>OrderOpenPrice()-TakeProfit*Point && CloseTake==1)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()-TakeProfit*Point,0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseProfit()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid-OrderOpenPrice()>=TakeProfit*Point && CloseTake==1)
                 {
                  CloseAll(0);
                 }

               if(OrderOpenPrice()-Bid>=StopLoss*Point && CloseTake==0)
                 {
                  CloseAll(0);
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()-Ask>=TakeProfit*Point && CloseTake==1)
                 {
                  CloseAll(1);
                 }

               if(Ask-OrderOpenPrice()>=StopLoss*Point && CloseTake==0)
                 {
                  CloseAll(1);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1 && t!=Time[0])
     {
      PutOrder(0,Ask);
      PutOrder(1,Bid);
      t=Time[0];
     }

   if(CountTrades()>0) CloseProfit();
   if(TimeCurrent()-TimeOrderOpen()>TimeClose*60) CloseAll(-1);
   if(CountTrades()==1) Mode();

   Comment("\n TimeOrderOpen:  ",TimeOrderOpen(),
           "\n TimeCurrent: ",TimeCurrent(),
           "\n Minus:  ",(int)(TimeCurrent()-TimeOrderOpen()));
  }
//+------------------------------------------------------------------+

avatar

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

  • 19 мая 2016, 18:13
+
0
Сейчас когда кроет с начало убыточный ордер, он ставит ТП только для бай ордеров. А так все правильно <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; '>&nbsp; 
Редактирован: 19 мая 2016, 21:17
avatar

  14  beton2011 Автор Сообщений: 895

  • 19 мая 2016, 18:42
+
0
Сейчас закрыл убыток бай и поставил тейк на селл: www.opentraders.ru/downloads/1185/




//+------------------------------------------------------------------+
//|                                                       Shadow.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern int StopLoss      = 300;      // лось
extern int TakeProfit    = 400;      // язь
extern int TimeClose     = 1440;     // время закрытия
extern int CloseTake     = 1;        // 1-кроем сначала плюс 0-минус
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,0,0,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Время открытия позиции                                           |
//+------------------------------------------------------------------+
datetime TimeOrderOpen()
  {
   datetime dt=0;
   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()<2) dt=OrderOpenTime();
        }
     }
   return(dt);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Mode()
  {
   bool m;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(OrderStopLoss()==0 && Bid>OrderOpenPrice()-StopLoss*Point && CloseTake==1)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-StopLoss*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }

               if(OrderTakeProfit()==0 && Bid<OrderOpenPrice()+TakeProfit*Point && CloseTake==0)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()+TakeProfit*Point,0,Yellow);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderStopLoss()==0 && Ask<OrderOpenPrice()+StopLoss*Point && CloseTake==1)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+StopLoss*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }

               if(OrderTakeProfit()==0 && Ask>OrderOpenPrice()-TakeProfit*Point && CloseTake==0)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()-TakeProfit*Point,0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseProfit()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid-OrderOpenPrice()>=TakeProfit*Point && CloseTake==1)
                 {
                  CloseAll(0);
                 }

               if(OrderOpenPrice()-Bid>=StopLoss*Point && CloseTake==0)
                 {
                  CloseAll(0);
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()-Ask>=TakeProfit*Point && CloseTake==1)
                 {
                  CloseAll(1);
                 }

               if(Ask-OrderOpenPrice()>=StopLoss*Point && CloseTake==0)
                 {
                  CloseAll(1);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1 && t!=Time[0])
     {
      PutOrder(0,Ask);
      PutOrder(1,Bid);
      t=Time[0];
     }

   if(CountTrades()>0) CloseProfit();
   if(TimeCurrent()-TimeOrderOpen()>TimeClose*60) CloseAll(-1);
   if(CountTrades()==1) Mode();

   Comment("\n TimeOrderOpen:  ",TimeOrderOpen(),
           "\n TimeCurrent: ",TimeCurrent(),
           "\n Minus:  ",(int)(TimeCurrent()-TimeOrderOpen()));
  }
//+------------------------------------------------------------------+


Редактирован: 22 мая 2016, 15:28
avatar

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

  • 19 мая 2016, 21:42
+
0
Да все правильно, спасибо за работу :) 
avatar

  14  beton2011 Автор Сообщений: 895

  • 19 мая 2016, 22:11
+
0
Я извиняюсь, только сейчас заметил один мой недочет. Сейчас когда закрываются оба ордера, советник сразу открывает новый замок, а надо чтоб ждал окончания времени указанном в советнике. Подправьте пожалуйста.


Редактирован: 22 мая 2016, 13:36
avatar

  14  beton2011 Автор Сообщений: 895

  • 22 мая 2016, 13:35
+
0
Объясните подробнее что именно нужно? По ТЗ время закрытия совпадает с открытием свечи, поэтому 2 ордера закрываются и сразу открываются новые.
avatar

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

  • 22 мая 2016, 15:20
+
0
А нет, все правильно вы сделали, просто я поставил время в советнике 1440 минут и тестировал на 60 минутах, вот он так и работал. А если поставить одинаковое время в советнике и в тестере, тогда все правильно работает. Но если у вас получится, подправьте пожалуйсто, чтоб советник работал по времени в настройках и не зависел от ТФ.
avatar

  14  beton2011 Автор Сообщений: 895

  • 22 мая 2016, 18:09

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