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

Рейтинг 2146



РЕКОМЕНДУЮ



последняя просьба ))

Delta.mq4 (3 Kb) тестируя предыдущие версии понял, на тестере в замедленном виде обьем себя выдает… прошу помочь поменять условие открытие отложек, при достижении тикового обьема определенного количества ( параметр выводится в настройках ) открывается 2 стоп ордера, стоп равен профиту ( выведен в настройках). К примеру открывается бар, набирается 55 обьема выставляется бай и сел стопы. Тогда у меня будет 2 советника для 2 х разных ситуаций, чувствую, что все
это время занимался не тем))))
  • 0
  • Просмотров: 2351
  • 14 декабря 2014, 18:43
  • Walerii
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
+1
последняя просьба ))

Почему последняя?
Чем больше сдадим, тем лучше. (С) Хмырь. «Джентельмены удачи».
avatar

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

  • 14 декабря 2014, 19:16
+
0
Вот посмотрите вариант:


//+------------------------------------------------------------------+
//|                                                        Delta.mq4 |
//|                                            Copyright © 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Forex expert advisor"

//--- Inputs
extern int    Delta   = 200;  // расстояние до ордера и стопы
extern int    Slip    = 30;   // проскальзывание ордера
extern int    Try     = 5;    // количество попыток выставить ордер
extern double Lots    = 0.1;  // объем позиции
extern double MaxLot  = 5;    // максимальный объем позиции
extern double TickVol = 0.5;  // тиковый объем
extern int    MAGIC   = 333;  // магик
double lot;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void PutOrder()
  {
   int    res,b,s,err;
   double price;
   double tickvol=MarketInfo(Symbol(),MODE_TICKVALUE);   
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUYSTOP)b++;
         if(OrderType()==OP_SELLSTOP)s++; 
        }
      }
    }
    
   //--- buy
   if(tickvol>=TickVol && b<1)
    {
     price=Ask+Delta*Point;
     res=OrderSend(Symbol(),OP_BUYSTOP,Lot(),fND(price),Slip,fND(price-Delta*Point),fND(price+Delta*Point),"",MAGIC,0,Blue);
      if(res<0)
        {
         Print("Ошибка: ",GetLastError());
         err++;
         Sleep(500);
         RefreshRates();
        }
      else
         Print("OK Order BUYSTOP");     
    }             
                    
   //--- sell 
   if(tickvol>=TickVol && s<1)
    {
     price=Bid-Delta*Point;
     res=OrderSend(Symbol(),OP_SELLSTOP,Lot(),fND(price),Slip,fND(price+Delta*Point),fND(price-Delta*Point),"",MAGIC,0,Red);
      if(res<0)
        {
         Print("Ошибка: ",GetLastError());
         err++;
         Sleep(500);
         RefreshRates();
        }
      else
         Print("OK Order SELLSTOP");     
    }
   Comment("\nTick Volume ",tickvol);
   if (err>Try) return;  
  }
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del; 
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if (OrderType()==OP_BUYSTOP)  del=OrderDelete(OrderTicket()); 
         if (OrderType()==OP_SELLSTOP) del=OrderDelete(OrderTicket());       
        }
      }
    }     
  }
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
          count++;
        }
      }
    }
    return(count);
  }
//+------------------------------------------------------------------+
double fND(double d,int n=-1)
  {
   if(n<0) return(NormalizeDouble(d, Digits));
   return(NormalizeDouble(d, n));
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double Lot()
  {  
   if(OrdersHistoryTotal()==0)
    {
     lot=Lots;
    }             
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))      
     {                                       
      if(OrderProfit()>0)                     
       {
        lot=Lots;  
       }
      if(OrderProfit()<=0)
        {
         lot=OrderLots()*2;  
        }
     }
    if(lot>MaxLot)lot=MaxLot;            
   return(lot);
  } 
//+------------------------------------------------------------------+
void ClosePos()
  {
   double tickvol=MarketInfo(Symbol(),MODE_TICKVALUE);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(tickvol>=TickVol)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(tickvol>=TickVol)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }  
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
    
     if(CountTrades()<1)PutOrder();
     if(CountTrades()>0)DelOrder();
     //if(TickVol>0) ClosePos();   
//---
  }
//+------------------------------------------------------------------+

avatar

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

  • 14 декабря 2014, 19:38
+
0
что то не получается, я торгую на 4 знаке, в настройках при увеличении параметра tick volume на 9 ордера вообще не выставляются, мысль была следующая, открывается новый минутный бар, его обьем доходи до отметки 56, к примеру, И сразу выставляются 2 отложки, помогите пожалуйста.
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 15 декабря 2014, 15:41
+
0
Поправил. Сейчас ставит ордера при превышении указанного тикового объема и значение объема выводится в окно терминала.




//+------------------------------------------------------------------+
//|                                                        Delta.mq4 |
//|                                            Copyright © 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Forex expert advisor"

//--- Inputs
extern int    Delta   = 200;  // расстояние до ордера и стопы
extern int    Slip    = 30;   // проскальзывание ордера
extern int    Try     = 5;    // количество попыток выставить ордер
extern double Lots    = 0.1;  // объем позиции
extern double MaxLot  = 5;    // максимальный объем позиции
extern double TickVol = 0.5;  // тиковый объем
extern int    MAGIC   = 333;  // магик
double lot,tickvol;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void PutOrder()
  {
   int    res,b,s,err;
   double price;
   tickvol=iVolume(Symbol(),0,0);   
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUYSTOP)b++;
         if(OrderType()==OP_SELLSTOP)s++; 
        }
      }
    }
    
   //--- buy
   if(tickvol>=TickVol && b<1)
    {
     price=Ask+Delta*Point;
     res=OrderSend(Symbol(),OP_BUYSTOP,Lot(),fND(price),Slip,fND(price-Delta*Point),fND(price+Delta*Point),"",MAGIC,0,Blue);
      if(res<0)
        {
         Print("Ошибка: ",GetLastError());
         err++;
         Sleep(500);
         RefreshRates();
        }
      else
         Print("OK Order BUYSTOP");     
    }             
                    
   //--- sell 
   if(tickvol>=TickVol && s<1)
    {
     price=Bid-Delta*Point;
     res=OrderSend(Symbol(),OP_SELLSTOP,Lot(),fND(price),Slip,fND(price+Delta*Point),fND(price-Delta*Point),"",MAGIC,0,Red);
      if(res<0)
        {
         Print("Ошибка: ",GetLastError());
         err++;
         Sleep(500);
         RefreshRates();
        }
      else
         Print("OK Order SELLSTOP");     
    }
   if (err>Try) return;  
  }
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del; 
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if (OrderType()==OP_BUYSTOP)  del=OrderDelete(OrderTicket()); 
         if (OrderType()==OP_SELLSTOP) del=OrderDelete(OrderTicket());       
        }
      }
    }     
  }
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
          count++;
        }
      }
    }
    return(count);
  }
//+------------------------------------------------------------------+
double fND(double d,int n=-1)
  {
   if(n<0) return(NormalizeDouble(d, Digits));
   return(NormalizeDouble(d, n));
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double Lot()
  {  
   if(OrdersHistoryTotal()==0)
    {
     lot=Lots;
    }             
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))      
     {                                       
      if(OrderProfit()>0)                     
       {
        lot=Lots;  
       }
      if(OrderProfit()<=0)
        {
         lot=OrderLots()*2;  
        }
     }
    if(lot>MaxLot)lot=MaxLot;            
   return(lot);
  } 
//+------------------------------------------------------------------+
void ClosePos()
  {
   tickvol=MarketInfo(Symbol(),MODE_TICKVALUE);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(tickvol>=TickVol)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(tickvol>=TickVol)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }  
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for trading
   if(IsTradeAllowed()==false)
      return;
     tickvol=MarketInfo(Symbol(),MODE_TICKVALUE);
     if(CountTrades()<1)PutOrder();
     if(CountTrades()>0)DelOrder();
     //if(TickVol>0) ClosePos();
     Comment("\nTick Volume: ",tickvol);   
//---
  }
//+------------------------------------------------------------------+

avatar

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

  • 15 декабря 2014, 17:08
+
0
благодарю, сегодня в 3 30 на австраллийских новостях протестирую)
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 15 декабря 2014, 17:31
+
0
протестил, получилось именно то что надо!!! Пожалуйста выложите код, где выставляются отложки по параметру delta, а условие на закрытие ордера — если сработала отложка, то она закроется при достижении тикового обьема определенного значения (выводится в настройках). У меня по плану будет задействовано 2 советника, для разных ситуаций, первый выше указанный, второй сегодняшний.
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 15 декабря 2014, 20:50
+
0
У меня не сохраняются промежуточные версии, если только в базе или в коментариях.
avatar

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

  • 15 декабря 2014, 20:54
+
0
zakaz.opentraders.ru/21557.html, вот ссылка на топик с этой версией советника, там что то не срабатывает (, необходимо чтобы отложка открывалась по параметру delta, а закрывалась по превышению тикового обьема(выводится в настройках )
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 15 декабря 2014, 21:07
+
0
Так вроде там было:


//+------------------------------------------------------------------+
//|                                                        Delta.mq4 |
//|                                            Copyright © 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Forex expert advisor"

//--- Inputs
extern int    Delta   = 200;  // расстояние до ордера и стопы
extern int    Slip    = 30;   // проскальзывание ордера
extern int    Try     = 5;    // количество попыток выставить ордер
extern double Lots    = 0.1;  // объем позиции
extern double MaxLot  = 5;    // максимальный объем позиции
extern double TickVol = 0.5;  // тиковый объем
extern int    MAGIC   = 333;  // магик
double lot,tickvol;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void PutOrder()
  {
   int    res,b,s,err;
   double price;
   tickvol=iVolume(Symbol(),0,0);   
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUYSTOP)b++;
         if(OrderType()==OP_SELLSTOP)s++; 
        }
      }
    }
    
   //--- buy
   if(b<1)
    {
     price=Ask+Delta*Point;
     res=OrderSend(Symbol(),OP_BUYSTOP,Lot(),fND(price),Slip,fND(price-Delta*Point),fND(price+Delta*Point),"",MAGIC,0,Blue);
      if(res<0)
        {
         Print("Ошибка: ",GetLastError());
         err++;
         Sleep(500);
         RefreshRates();
        }
      else
         Print("OK Order BUYSTOP");     
    }             
                    
   //--- sell 
   if(s<1)
    {
     price=Bid-Delta*Point;
     res=OrderSend(Symbol(),OP_SELLSTOP,Lot(),fND(price),Slip,fND(price+Delta*Point),fND(price-Delta*Point),"",MAGIC,0,Red);
      if(res<0)
        {
         Print("Ошибка: ",GetLastError());
         err++;
         Sleep(500);
         RefreshRates();
        }
      else
         Print("OK Order SELLSTOP");     
    }
   if (err>Try) return;  
  }
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del; 
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if (OrderType()==OP_BUYSTOP)  del=OrderDelete(OrderTicket()); 
         if (OrderType()==OP_SELLSTOP) del=OrderDelete(OrderTicket());       
        }
      }
    }     
  }
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
          count++;
        }
      }
    }
    return(count);
  }
//+------------------------------------------------------------------+
double fND(double d,int n=-1)
  {
   if(n<0) return(NormalizeDouble(d, Digits));
   return(NormalizeDouble(d, n));
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double Lot()
  {  
   if(OrdersHistoryTotal()==0)
    {
     lot=Lots;
    }             
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))      
     {                                       
      if(OrderProfit()>0)                     
       {
        lot=Lots;  
       }
      if(OrderProfit()<=0)
        {
         lot=OrderLots()*2;  
        }
     }
    if(lot>MaxLot)lot=MaxLot;            
   return(lot);
  } 
//+------------------------------------------------------------------+
void ClosePos()
  {
   tickvol=MarketInfo(Symbol(),MODE_TICKVALUE);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(tickvol>=TickVol)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(tickvol>=TickVol)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }  
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for trading
   if(IsTradeAllowed()==false)
      return;
     tickvol=MarketInfo(Symbol(),MODE_TICKVALUE);
     if(CountTrades()<1)PutOrder();
     if(CountTrades()>0)DelOrder();
     if(TickVol>0) ClosePos();
     Comment("\nTick Volume: ",tickvol);   
//---
  }
//+------------------------------------------------------------------+

avatar

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

  • 15 декабря 2014, 22:11
+
0
Все эти Ваши советники, индикаторы… от жадности и лукавого8-) : Ничего не хочется делать лично, а деньги при этом должны зарабатываться. Валюту сердцем чувствовать нужно, тогда и она ответит взаимностью*music* 
avatar

  7  valeriys Сообщений: 698

  • 16 декабря 2014, 08:11
+
0
так, я руками и делаю, ПРОСТО за 10 секунд трудно успеть посчитать на калькуляторе.выставить ордера и закрыть сделку, ради этого и прошу )
avatar

  16  Walerii Автор Сообщений: 456 - Валерий

  • 16 декабря 2014, 19:31

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