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

 

Всем доброго дня.

Я изучаю массивы.

Подскажите пожалуйста как удаляется из массива нужное мне значение.

Как я понимаю, после удаления значения, размер массива уменьшится  и наверное

новое значение размера массива так же нужно будет указать.

Функции, удаляющей значение массива, в Справочнике я не нашел. Покажите пожалуйста как выглядит вся процедура. удаления значения массива,

так что бы после удаления массив функционировал и дальше.

Спасибо.

Вот конкретный пример того что мне нужно.

int start()                                             
{

double mass[3]=
{
1.2414,
1.2438,
1.2874
};

double value =  Bid ;
int S = ArrayBsearch(mass,  value,  WHOLE_ARRAY,  0, MODE_ASCEND);

if ( Bid == mass[S]) //Bid = 1.2874
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
}
// после того как открылся ордер по цене элемента массива с индексом 2 (1.2874)
// КАК УДАЛИТЬ ИЗ МАССИВА ЗНАЧЕНИЕ 1.2874 так что бы массив продолжил функционировать дальше.
 
ANDREY:

Всем доброго дня.

Я изучаю массивы.

Подскажите пожалуйста как удаляется из массива нужное мне значение.

Как я понимаю, после удаления значения, размер массива уменьшится  и наверное

новое значение размера массива так же нужно будет указать.

Функции, удаляющей значение массива, в Справочнике я не нашел. Покажите пожалуйста как выглядит вся процедура. удаления значения массива,

так что бы после удаления массив функционировал и дальше.

Спасибо.

Вот конкретный пример того что мне нужно.

Можно массив скопировать "сам в себя" и потом изменить размер массива уменьшив на 1. Пример с удалением нулевого индекса массива и заполнением последнего, но копирование можно делать с любого индекса любое количество элементов.

Второй вариант, перезаписать последнее значение на "освободившееся" место и так-же сократить размер массива.

Подскажите про массивы
Подскажите про массивы
  • 2017.12.03
  • www.mql5.com
Я только учусь и на массивах попал в засаду: пытаюсь написать скрипт в котором массив данных будет перезаписываться...
 
Alexey Viktorov:

Можно массив скопировать "сам в себя" и потом изменить размер массива уменьшив на 1. Пример с удалением нулевого индекса массива и заполнением последнего, но копирование можно делать с любого индекса любое количество элементов.

Второй вариант, перезаписать последнее значение на "освободившееся" место и так-же сократить размер массива.

Спасибо большое за подсказку.
 

Доброго здравия!!! Объясните мне хоть и не новичку но ужастно задолбаному одной единственной проблемой. Вызываю индикатор из индикатора. При появлении нового бара одни значения, при перекомпиляции тут же, получаю совершенно другие значения. Задержка в расчёте индикатора по времени никчему ни приводит. В итоге получить автомат совсем не получается. Вопрос. ПОЧЕМУ???? Я уже запарился настолько что сил нет. Что за глюк неимоверный... Задрал в конец...

 

Здравствуйте! Ни как не могу решить проблему по перемещению сигнальных уровней при условии выхода цены за них. На моменте компиляции все хорошо, но в тестере когда наступает "подходящее" условие ни чего не меняется. Подскажите пожалуйста , что не так с условием выхода цены за сигнальные уровни?

//-------------------------выход цены за пределы сигнальных уровней-----------------------------------------------------------------------------------------------
 price=iHigh(Symbol(),PERIOD_M15,0);                                                               //Сигнальный уровень О(Сердцевина)
 ObjectCreate("UrO",OBJ_HLINE,0,0,price);
 ObjectSet("UrO",OBJPROP_COLOR,clrYellowGreen);                               
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 priceA=price+30*Point;                                                                            //Сигнальный уровень А(Максимум)
 ObjectCreate("UrA",OBJ_HLINE,0,0,priceA);
 ObjectSet("UrA",OBJPROP_COLOR,clrDarkSlateBlue); 
//---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 priceB=price-30*Point;                                                                            //Сигнальный уровень B(Минимум)
 ObjectCreate("UrB",OBJ_HLINE,0,0,priceB); 
 ObjectSet("UrB",OBJPROP_COLOR,clrOrangeRed); 
//--------------------------------------------------------------------------
if((Bid>=priceA) ||(Bid<=priceB)){                                                                 //если цена вышла за одну из ГРАНИЦ, сдвинуть уровни
  ObjectSet("UrO",OBJPROP_PRICE1,iHigh(Symbol(),PERIOD_M15,0));  
                                                                                             

По идее если цена выходит за "UrA" или "UrB", уровень "UrO" должен сместится в максим последней свечи на м15, но этого не происходит. Кто-нибудь знает почему?

 
vikzip:

Здравствуйте! Ни как не могу решить проблему по перемещению сигнальных уровней при условии выхода цены за них. На моменте компиляции все хорошо, но в тестере когда наступает "подходящее" условие ни чего не меняется. Подскажите пожалуйста , что не так с условием выхода цены за сигнальные уровни?

По идее если цена выходит за "UrA" или "UrB", уровень "UrO" должен сместится в максим последней свечи на м15, но этого не происходит. Кто-нибудь знает почему?


А ObjectMove() чем не устраивает?

 
Vitalie Postolache:

А ObjectMove() чем не устраивает?


Спасибо!!!)

 
Vitalie Postolache:

А ObjectMove() чем не устраивает?


Функция отличная! Вот только почему то условие не выполняется! Может кто знает причину???

  double price;                                                                                    //цена сердцевины
  double priceA;                                                                                   //цена верхнего сигнального уровня
  double priceB;                                                                                   //цена нижнего сигнального уровня
//+------------------------------------------------------------------------------------------------------------------------------------------------------------
int start(){
//-------------------------выход цены за пределы сигнальных уровней-----------------------------------------------------------------------------------------------

price=iHigh(Symbol(),PERIOD_M15,0);                                                               //Сигнальный уровень О(Сердцевина)
ObjectCreate("UrO",OBJ_HLINE,0,0,price);
ObjectSet("UrO",OBJPROP_COLOR,clrYellowGreen);                                                                                                                               
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 priceA=price+30*Point;                                                                            //Сигнальный уровень А(Максимум)
ObjectCreate("UrA",OBJ_HLINE,0,0,priceA);
ObjectSet("UrA",OBJPROP_COLOR,clrDarkSlateBlue); 
//---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 priceB=price-30*Point;                                                                            //Сигнальный уровень B(Минимум)
ObjectCreate("UrB",OBJ_HLINE,0,0,priceB); 
ObjectSet("UrB",OBJPROP_COLOR,clrOrangeRed); 
 //---------------------------------------------------------------------------------------------------------------------------------------------------------------
if((Bid<=priceB)||(Bid>=priceA)){                                                                 //если цена вышла за одну из ГРАНИЦ
  ObjectsDeleteAll();                                                                             //для примера удаляю все объекты, но этого не происходит!
  }                                                                                               //Почему ведь очевидно на тестере цена выходит за пределы, но ни чего не происходит???
return(0);
}
Кто-нибудь может объяснить в чем ошибка, пожалуйста?
 

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

Только начинаю изучать MQL4. Не могу разобраться, почему скрипт игнорит кнопку "Разрешить автоматическую торговлю" в MT4 (ver. 4.0 build 1090)

Вот такую конструкцию не угомонить:

int start()
{

     Alert("Привет!");

return;
}

 

Жмешь не жмешь на кнопку, все равно фигачит окно с алертом. Когда ставлю установку ордеров в скрит, то он их фигачит на каждом тике без остановки, вне зависимости оттого нажата кнопка автоторговли или отжата.


Попробовал такую конструкцию:


int start()
{

 while(!IsStopped())
    {
    
      Alert("Привет!");

     if(!IsExpertEnabled()) break;
    }


return;
}

Сначала вроде работало, но в ходе усложнения скрипта тоже перестало работать...

И вообще я пока не знаю может быть так и должно быть, но не чувствуется четкости в работе советников: после смены советника, старый почему то продолжает работать, как будто в фоне, но это может я ещё не разобрался видимо.

 
Dimitry-1983:

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

Только начинаю изучать MQL4. Не могу разобраться, почему скрипт игнорит кнопку "Разрешить автоматическую торговлю" в MT4 (ver. 4.0 build 1090)

Вот такую конструкцию не угомонить:

 

Жмешь не жмешь на кнопку, все равно фигачит окно с алертом. Когда ставлю установку ордеров в скрит, то он их фигачит на каждом тике без остановки, вне зависимости оттого нажата кнопка автоторговли или отжата.


Попробовал такую конструкцию:


Сначала вроде работало, но в ходе усложнения скрипта тоже перестало работать...

И вообще я пока не знаю может быть так и должно быть, но не чувствуется четкости в работе советников: после смены советника, старый почему то продолжает работать, как будто в фоне, но это может я ещё не разобрался видимо.

Эта кнопка влияет только на торговые функции. Всё остальное остаётся работать как и положено.
Причина обращения: