Ваши вопросы по языку MQL4

_SERG_

Активный участник
Здравствуйте ув. форумчане. Помогите разобраться.

PHP:
void OnTick()  {//---      double Pr=Bid;    if (OrdersTotal()<1)   {         double TP=Bid-TPr*Point;     double SL=Bid+SLr*Point;     int ticc=OrderSend(Symbol(),OP_SELL,0.01,Pr,3,SL,TP,"",0,0,CLR_NONE);     if(ticc<0) Print("Ошибка открытия ордера: ",GetLastError());                  }     bool o=OrderSelect(ticc,SELECT_BY_TICKET);      if ((OrderStopLoss()-Bid)>120*Point && OrdersTotal() )     {     double TP1=Bid-TPr*Point;     double SL1=Bid+100*Point;     bool res=OrderModify(OrderTicket(),OrderOpenPrice(),SL1,TP1,0,Blue);               if(!res)               Print("Ошибка модификации ордера. Код ошибки=",GetLastError());               else               Print("Цена Stop Loss ордера успешно модифицирована.");             }       }
вот простой код для открытия ордера и его модифицирования в последущем. т.е как только цена уходит от стоплосса более чем на 120 пунктов , стоп перемещается на 100 пунктов вниз.
все это только начал писать, да по сути..почти с каждым тиком будет перемещать стоп, да и вообще это так..только начало...но это все потом доделаю. сейчас вопрос вот в чем...
выдает ошибку 'ticc' - undeclared identifier;
Но ведь она объявлена!!
Пробовал объявить переменную ticc в самом начале void OnTick(). ошибка исчезает.НО. программа срабатывает один раз! выставляет ордер , тут же его меняет и все...при следующем тике ticc уже равна 0 и бполее ордер не модифицируется. Почему так? Почему ticc превращается в 0!?

Попробуй так: static int ticc...., тогда на следующей котировке ticc будет иметь значение с предыдущего цикла расчёта, и про очистку ticc позаботься.
 

paylesss

Интересующийся
спасибо! уже , в принципе, решил проблему, путем использования глобальной переменной.
 

paylesss

Интересующийся
еще вопросик...по функции copyopen. нет ни у кого ссылочки на пример ее использования. а то у меня в массив какае-то фигня залетает. некоторые элементы массива 0, вы где нибудь видели бар с ценой открытия 0? или такое значение как 3.0587348578348457859- это цена открытия бара индекса ртс)). вот например
double Openprice[30];
copyiopen(Symbol(),PERIOD_M15,0,30,Openprice)
массив с переменными типа дабл. я правильно понимаю, что цены туда сами должны загнаться(в массив) или надо цикл создавать и заполнять массив?
это написано в mql 5 но и в 4-ке она есть. поэтому тут и спрашиваю.
 

_SERG_

Активный участник
еще вопросик...по функции copyopen. нет ни у кого ссылочки на пример ее использования. а то у меня в массив какае-то фигня залетает. некоторые элементы массива 0, вы где нибудь видели бар с ценой открытия 0? или такое значение как 3.0587348578348457859- это цена открытия бара индекса ртс)). вот например
double Openprice[30];
copyiopen(Symbol(),PERIOD_M15,0,30,Openprice)
массив с переменными типа дабл. я правильно понимаю, что цены туда сами должны загнаться(в массив) или надо цикл создавать и заполнять массив?
это написано в mql 5 но и в 4-ке она есть. поэтому тут и спрашиваю.

Свой массив, перед загрузкой в него данных, обнули, скопируй в него цены открытия, как хотел, но не забудь нормализовать.
РАСПЕЧАТАЙ то что получилось, и прими решение, но кой оно тебе надо? Если, это не то, что тебе надо. :laugh:
 

kostik83

Новичок форума
Здравствуйте, проверите пожалуйста где ошибка? необходимо определить low последних 10 баров
PHP:
int bar=10;
   double min=0.0;
   
   for(int i=0;i<bar;i++){
      if(iLow(NULL,0,i)<min)min=Low[i];
      }
      Alert("min " , min);
 

_SERG_

Активный участник
Здравствуйте, проверите пожалуйста где ошибка? необходимо определить low последних 10 баров
PHP:
int bar=10;   double min=0.0;      for(int i=0;i<bar;i++){      if(iLow(NULL,0,i)<min)min=Low[i];      }      Alert("min " , min);

Условие ни разу не выполняется. вставь принты или запусти в дебагере.
min у тебя 0, а цена как не крути больше.
Поэтому целесообразно искать среди цен значений интервала.
Извини глубоко не вникал.
 
Последнее редактирование:

DomovenokBrest

♔♕♖♗♘♙
Здравствуйте, проверите пожалуйста где ошибка? необходимо определить low последних 10 баров
PHP:
int bar=10;
   double min=0.0;
   
   for(int i=0;i<bar;i++){
      if(iLow(NULL,0,i)<min)min=Low[i];
      }
      Alert("min " , min);

как то так...

PHP:
int bar=10;
   int index_min=0;
   double min=10000000.0;
   
   for(int i=0;i<=bar;i++)
      {
      if(min>Low[i]) 
       {
       min=Low[i];
       index_min=i;
       }
      }
      Alert(min+""+"на"+" "+index_min+" "+"баре");
 

aleksergy

Местный житель
Здравствуйте!Подскажите пожалуйста. Если поставить советник например на тф м1 а затем переключить на тф м15 он на каком тф будет работать? Спасибо.
 

ansol

Местный знаток
Господа! В чем смысл следующего выражёвывания?

PHP:
 if (iMA(NULL, PERIOD_H4, 13, 8, MODE_SMMA, PRICE_MEDIAN, 0) < Close[0] && Close[2] > Close[1] && 1)
Это декомпил.
Декомпилятор такую фигню выдает или автор что-то вумное имел в виду?

(кто не въехал с ходу - "&& 1" - вот это)
 

AlexeyVik

Программист mql4 mql5
Здравствуйте!Подскажите пожалуйста. Если поставить советник например на тф м1 а затем переключить на тф м15 он на каком тф будет работать? Спасибо.
Зависит от того как написан советник.
 

iii237

Активный участник
Здравствуйте, проверите пожалуйста где ошибка? необходимо определить low последних 10 баров
PHP:
int bar=10;
   double min=0.0;
   
   for(int i=0;i<bar;i++){
      if(iLow(NULL,0,i)<min)min=Low[i];
      }
      Alert("min " , min);

Самый простой вариант взять мин заведомо больше цены, например мин = 100000;
 

iii237

Активный участник
Здравствуйте!Подскажите пожалуйста. Если поставить советник например на тф м1 а затем переключить на тф м15 он на каком тф будет работать? Спасибо.

Будет работать на том ТФ, на котором в данный момент находится.
Однако здесь много вариантов:
1. Сов может работать независимо от ТФ,
2. Сов может быть рассчитан на конкретный ТФ,
3. Может ваще не работать на конкретном ТФ.

Короче, истина в сове. :dont-know:
 

vlad_123

Местный знаток
Самый простой вариант взять мин заведомо больше цены, например мин = 100000;
:laugh:
Хватит уже изобретать велосипед!
Я же уже давал ссылку на функцию iLowest, которая делает именно то что нужно.
 

Def Leppard

Активный участник
Всем привет!
Большая просьба, кто знает как вставить советник, индикатор, скрипт в мобильную версию MT-4 на Андроиде? За большое спасибо.
 

iii237

Активный участник
:laugh:
Хватит уже изобретать велосипед!
Я же уже давал ссылку на функцию iLowest, которая делает именно то что нужно.

Да, конечно, Ваш вариант будет работать так же, как и мой. Но в моем меньше переделок. Хотя это конечно мелочи в данном случае.

А ваще, что Вам не понравилось? Чем больше вариантов, тем прекрасней. И велосипеды разные бывают...
 

iii237

Активный участник
Господа! В чем смысл следующего выражёвывания?

PHP:
 if (iMA(NULL, PERIOD_H4, 13, 8, MODE_SMMA, PRICE_MEDIAN, 0) < Close[0] && Close[2] > Close[1] && 1)
Это декомпил.
Декомпилятор такую фигню выдает или автор что-то вумное имел в виду?

(кто не въехал с ходу - "&& 1" - вот это)

Это автор, скорее всего непричесаный вариант. Можете просто выкинуть "&& 1", на коде не отразится.
 

ansol

Местный знаток
Это автор, скорее всего непричесаный вариант. Можете просто выкинуть "&& 1", на коде не отразится.

То, что это можно выкинуть, я почти догадался ;)
Но вот зачем такое вставлять/оставлять никак не пойму. Автор сам-то не додумался просто удалить? В смысле, там что-то было, условие какое-то, потом оно не понадобилось и вместо него автор воткнул единицу?
Чужая душа - потёмки! :D
 

vlad_123

Местный знаток
Но в моем меньше переделок.
:facepalm:
Меньше переделок - это по сравнению со стандартной функцией MQL4?
Ну-ну ;)
__________________________________________________
Паходу - я тут раздумывал, как можно побольше пипсов насобирать, закрывая одни и те же позиции...
Сподвигло меня на это изменение требований MyFxBook'а к AutoTrade провайдерам, а именно - если раньше они требовали >10пипов на профитную сделку, то теперь Avg пипов на трейд - не менее 3. И если раньше мой сов подходил, то теперь нет.
Ну, в общем-то, и решение - закрывать убыточные сделки по возможности меньшим количеством операция (я раньше закрывал по 0.01 лота), а вот профитные - наоборот, закрывать по возможности наименьшими лотами.
Ну, и как результат - сегодня +6400 пипов :D
 
Последнее редактирование:
Верх