Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1472

 
ANDREY:
Pr - это переменная для того что бы через 30 пп  открывался только 1 ордер. А без этой переменной открываются на каждом тике
if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0))
{LoU=Bid;}

Так тебе не нужна эта переменная...и уже нагрузка меньше)

 
MakarFX:
Даже хуже...еще надо знать кол-во баров


Я подправил ...попробуй

Попробывал. Все тоже самое .
Твой код 

double LoU,Pr;
int OnInit()
  {
   LoU=Low[0];
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if(Low[1]<LoU) {LoU=Low[1];}
   if ((Bid-30*Point)>=LoU)
     {
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Low[0];
     }
  }


 
MakarFX:

Так тебе не нужна эта переменная...и уже нагрузка меньше)

Возможно и не нужна. Но борюсь я не с ней.....

 
ANDREY:

Возможно и не нужна. Но борюсь я не с ней.....

1) Если ты борешься со скоростью работы, то любая оптимизация кода это плюс.

2) Разница в результатах из-за того, что у тебя нет инициализации LoU- при старте ничему не равна... EMPTY

 
MakarFX:
Даже хуже...еще надо знать кол-во баров


Я подправил ...попробуй

Как вариант если Вid - Low[ ? ] >= 30 п. открыть ордер. Но как узнать номер этой  Low[ ? ] после того как Вid  поднимется выше этой  Low[ ? ] на 30 пп ?
 
ANDREY:
Как вариант если Вid - Low[ ? ] >= 30 п. открыть ордер. Но как узнать номер этой  Low[ ? ] после того как Вid  поднимется выше этой  Low[ ? ] на 30 пп ?

А если опустится Вid  вниз, значить новый минимум...и от какого минимума надо вести расчет?

 
MakarFX:

1) Если ты борешься со скоростью работы, то любая оптимизация кода это плюс.

2) Разница в результатах из-за того, что у тебя нет инициализации LoU- при старте ничему не равна... EMPTY

То есть если я присвою значение  LoU при ее объявлении то код будет работать намного быстрее?

Я присвоил ей цену открытия первого бара от 04.01.2010.

double LoU = 1.6121,Pr;
void OnTick()//531
{
if (Bid<LoU)
LoU=Bid;
//**************************************************************||TimeCurrent()==1262568096
if (Bid-LoU>=0.0030&&Pr!=LoU)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
Pr=LoU;
LoU=Bid;

}
}
 
MakarFX:

А если опустится Вid  вниз, значить новый минимум...и от какого минимума надо вести расчет?

Пусть опускается, главное что откроется ордер через 30 пп. А после его открытия пусть цена опускается что бы найти новый минимум. Ты представь- есть текущий  Вid и он отстоит от  Low[ 50 ] как раз на 30 п. и можно открыть ордер. if ( Вid -  Low[ 50 ] > 30 п  ) - открыть ордер.  Но как узнать что это лоу именно пятидесятой свечи. То есть в этом случае нужно проверять не то что было до появления локального минимума, а то что было после его появления А это намного меньше проверок.
И в этом случае будет вообще не важно насколько цена опустится после открытия ордера. 

 
ANDREY:

Мне кажется что индикатор фракталов мне не  подходит. Многие ордера он будет пропускать.

Голубым выделен ордер открытый мои кодом с проверкой цены на каждом тике. Как мне кажется фрактал ни о чем нужном для меня  в данном случает не говорит.

Я фрактал привёл как пример. А как вы определяете минимум(в вашем случае) это видать военная тайна… или абсолютное непонимание о чём спрашивают.

 
ANDREY:

Пусть опускается, главное что откроется ордер через 30 пп. А после его открытия пусть цена опускается что бы найти новый минимум. Ты представь- есть текущий  Вid и он отстоит от  Low[ 50 ] как раз на 30 п. и можно открыть ордер. if ( Вid -  Low[ 50 ] > 30 п  ) - открыть ордер.  Но как узнать что это лоу именно пятидесятой свечи. То есть в этом случае нужно проверять не то что было до появления локального минимума, а то что было после его появления А это намного меньше проверок.

тебе не надо считать бары

после открытия ордера присваиваешь переменной значение Low[0](минимум текущего бара), потом после закрытия бара если значение Low[1] меньше переменной, присваиваешь новое значение,

если нет, остается старое т.е. минимум.

Причина обращения: