Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Все статьи доступны из MetaTrader 5. Поделись и ты своей!
jhon
186
jhon 2011.07.20 20:49 

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

Пишу советник... И вот застрял на учете ордеров.

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

Вот код советника...

Ах да... Проблема в том что старый ордер почему-то не удаляться!

Что не так ведь я пишу что OrderDelete();

//+------------------------------------------------------------------+
//|                                                       Lolita.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
  
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   bool b,s;   
   double maTrend = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,0);
   double maCorrektion = iMA(NULL,0,8,5,MODE_SMMA,PRICE_MEDIAN,0);
   double fUp = iFractals(NULL, 0, MODE_UPPER, 3);
   double fLow = iFractals(NULL, 0, MODE_LOWER,3);
   
   if(Bars<100)
   {
      Alert("Недостаточно баров");
      return;
   }
   
   
   
   if(Low[1] < maCorrektion)
   {
      b = true;
   }
   if(High[1] > maCorrektion)
   {
      s = true;
   }
   
   
   if(maTrend < fUp)
   {
      if(b == true)
      {
         OrderDelete(777);
         OrderSend(Symbol(), OP_BUYSTOP, 1, fUp, Ask, fUp-300*Point,fUp+900*Point,NULL,777,0,Green);
         b = false;
      }
   }
   
   if(maTrend > fLow)
   {
      if(s == true)
      {
         OrderDelete(13);         
         OrderSend(Symbol(), OP_SELLSTOP, 1, fLow, Bid, fLow+300*Point,fLow-900*Point,NULL,13,0,Red);
         s = false;
      }
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
Vladimir Paukas
4099
Vladimir Paukas 2011.07.20 20:56  
jhon:

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

Пишу советник... И вот застрял на учете ордеров.

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

Вот код советника...

Ах да... Проблема в том что старый ордер почему-то не удаляться!

Что не так ведь я пишу что OrderDelete();

В OrderDelete надо тикет указывать, а вы в него маджикнумбер пихаете.
jhon
186
jhon 2011.07.20 21:02  
paukas:
В OrderDelete надо тикет указывать, а вы в него маджикнумбер пихаете.

Спасибо! Понял! :)
jhon
186
jhon 2011.07.20 21:24  

Хм....

А теперь что не так?

Следуя логике жолжно же быть не более 2х ордеров. А у меня их, ух сколько...

//+------------------------------------------------------------------+
//|                                                       Lolita.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
  
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   bool b,s;   
   double maTrend = iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,0);
   double maCorrektion = iMA(NULL,0,8,5,MODE_SMMA,PRICE_MEDIAN,0);
   double fUp = iFractals(NULL, 0, MODE_UPPER, 3);
   double fLow = iFractals(NULL, 0, MODE_LOWER,3);
   int DellB, DellS;
   
   if(Bars<100)
   {
      Alert("Недостаточно баров");
      return;
   }
   
   
   
   if(Low[1] < maCorrektion)
   {
      b = true;
   }
   if(High[1] > maCorrektion)
   {
      s = true;
   }
      
   if(maTrend < fUp)
   {
      if(b == true)
      {
         
         OrderDelete(DellB);
         DellB = OrderSend(Symbol(), OP_BUYSTOP, 1, fUp, Ask, fUp-300*Point,fUp+900*Point,NULL,777,0,Green);
         b = false;
      }
   }
   
   
   if(maTrend > fLow)
   {
      if(s == true)
      {
         
         OrderDelete(DellS);     
         DellS = OrderSend(Symbol(), OP_SELLSTOP, 1, fLow, Bid, fLow+300*Point,fLow-900*Point,NULL,13,0,Red);         
         s = false;
      }
   }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
PapaYozh
3768
PapaYozh 2011.07.20 21:27  
jhon:

Хм....

А теперь что не так?

Следуя логике жолжно же быть не более 2х ордеров. А у меня их, ух сколько...

Вынесите из функции start()
int DellB, DellS;
jhon
186
jhon 2011.07.21 00:00  

Да помогло. Огромное Вам спасибо.

И ещё такой вопрос... Последний...

Какой функцией взять последнее значение фрактала а то iFractals(NULL, 0, MODE_LOWER,3); берет его некорректно. То есть в тестере некоторые фракталы просто пропускает, иногда берет значение где вообще фрактала нет и т.д.

Заранее Благодарен.

o_O
Модератор
23274
o_O 2011.07.21 07:06  

jhon:

То есть в тестере некоторые фракталы просто пропускает, иногда берет значение где вообще фрактала нет и т.д.

это очень серъезное и громкое обвинение. если у вас есть доказательство, то обязательно сообщите разработчикам терминала про этот глюк.

а то получается все кроме вас пользуются функцией без проблем а вы смогли за 5 минут отыскать этот баг. удивительно.

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