[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 233

 
hoz:

уже сколько раз пользовался автопунктом, но первый раз нефига не работает.

Вот Init()

 

В любом месте программы прописываю(в данном случае уже даже в старте для эксперимента):

 В журнал возвращается:

 Где логика? 

Мне тут VladislavVG подсказал: Потому, что на этапе выполнения функции init() Вам не гарантирована загрузка данных финансового инструмента.
 
GaNDarM:
Мне тут VladislavVG подсказал: Потому, что на этапе выполнения функции init() Вам не гарантирована загрузка данных финансового инструмента.

Так значение переменной Point без Init() должно возвращаться же..
 
hoz:
Откуда там будет чепуха, если функция возвращает имя объекта канкретно?
А ты уверен на все 100%, что эта функция всегда и везде отработает корректно, нигде и никогда не глюкнет, не подавится каким нибудь замысловатым именем объекта или ты сам ей ни с того ни с сего по своему недосмотру вдруг не подсунешь номер несуществующего объекта? Причем по результату возвращаемому из функции судить о том правильно она отработала или нет нет возможности. И в документации об этом так и сказано. Единственный правильный путь - это получить код ошибки и от него плясать. Так ты сам себя страхуешь на случай своих же (или чужих) ляпов.
 
hoz:

уже сколько раз пользовался автопунктом, но первый раз нефига не работает.


 Где логика? 

А ты попробуй сделать вот так:

int init()
{
   if (Digits == 2 || Digits == 4)
     pt = MarketInfo(Symbol(), MODE_POINT);
   if (Digits == 1 || Digits == 3 || Digits == 5)
     pt = MarketInfo(Symbol(), MODE_POINT) * 10;
 
  return (0);
}

Даже не так, а вот так:

int init()
{
   int MyDigits = MarketInfo(Symbol(), MODE_DIGITS)
   if (MyDigits == 2 || MyDigits == 4)
     pt = MarketInfo(Symbol(), MODE_POINT);
   if (MyDigits == 1 || MyDigits == 3 || MyDigits == 5)
     pt = MarketInfo(Symbol(), MODE_POINT) * 10;
 
  return (0);
}

Потому что Digits тоже внутрення переменная, как и Piont.

Так по идее должно работать :)



 
hoz:

Так значение переменной Point без Init() должно возвращаться же..

Не факт... Point - это внутренняя переменная процессора MQL и для ее обновления нужно какое-то время и какие-то действия по инициализации. Все это, как правило, происходит только перед вызовом процессором функции start(), а на этапе отработки init() значения внутренних переменных процессора могут быть не установлены.
 
GaNDarM:


"Плачусь" я об этом:

 а вот лог:

18:25:09 IndikatorZZ GBPJPY,Daily: СРАБОТАЛА Ф_ЦИЯ ИНИТ: DownL = 0 UpL = 0 


Переменные случайно не int?


Я пару раз так сам себя ловил

 
ilunga:

Переменные случайно не int?


Я пару раз так сам себя ловил


Нет, double. А что с int не так интересно?
 
Здравствуйте! На кануне произошла ситуация. 19.03.2013 около 17-00 по GMT мной был отдан приказ на отложенный ордер Sell stop. Цена открытия 1.2903, Stop loss 1.2913, трейлинг стоп 15 пунктов, М15, лот -0,5. Как показывает история счёта, в 17-49 позиция была открыта. Закрыта позиция была в 21-15 опять же по GMT с профитом "минус 90". Когда увидел историю, в голове родилась куча вопросов. Например, почему  позицию закрыли на вершине Шипа (см. рисунок). Почему не сработал трейлинг стоп, ведь если бы сработал, то профит был бы положительным, т.к.  движение цены было угадано верно. после трейлинг стопа, должен был сработать стоп лосс, потеря была бы не 90 USD. И повторюсь - почему позицию закрыли на вершине подъёма. Пункт в пункт. По этому вопросу в дилинговый центр не обращался. Скорей всего не ответят. Вспомнил про этот форум и надеюсь что профессионалы смогут доступным языком объяснить причину данной аномалии.  Торговать через МТ4 начал недавно. Можно сказать что ещё принюхиваюсь и присматриваюсь. 
 
Здравствуйте. Подскажите пожалуйста, если один советник прикреплен сразу к нескольким окнам валютных пар, то изменения в советнике в одном окне влияют на советника другого окна??? т.е. локальные переменные меняются или нет???
 

Господа!Подскажите пожалуйста!

Пытаюсь реализовать простую идею.Она изложена в комментариях к программе.

ПРОБЛЕМА.Программа в ТЕСТЕРЕ  открывает ордера по цене не совпадающей с указанной в коде условиями.

Например открывает ордер по цене 0.86084 при этом в массива самое близкое значение 0.85375

Т.е. разница - положительная.  Тогда как в коде указано что ордера открывать если разница < 0.00000 т.е. отрицательная.


Подскажите пожалуйста где ошибка.

Спасибо.

int start()
{
 double Price=iOpen (Symbol (),0,0);        
 double SL=NormalizeDouble (Price-3000*Point, Digits);         
 double TP=NormalizeDouble (Price+100*Point, Digits);    
 #include <MASSIV.mqh> //объявление массива типа double (неповторяющиеся значения цены с пятью знаками после точки)
 double value =  Bid ;//параметру value функции ArrayBsearch присваивается значение  цены последнего тика

 int S = ArrayBsearch(  massiv,  value, WHOLE_ARRAY,  0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика 
 if( (NormalizeDouble (Bid-massiv[S],Digits) <=0))//если разница между значением массива возвращенным на последнем тике и ценой последнего тика отрицательная или = 0.00000


{
                        
 OrderSend(Symbol(),OP_BUY,0.1,Ask,1,SL,TP,"jfh",123 );//ордер открыть
  }                                  

   }