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

AlexeyVik

Программист mql4 mql5
Тоже попробовал, работает. А я столько лет инкременты и декременты для массивов пишу по деревенски gh2[type]=gh2[type]+1;. Это столько букаф лишних наклацал.
Теперь пусть сами клацаются. Так сказать возвращают авансом натыканные…
Ну хоть так писал-бы
Код:
Expand Collapse Copy
gh2[type] += 1;
 

ZNV

Активный участник
Скажите, в mql4 есть генераторы случайных чисел?
 

Milord

Местный знаток
Всем привет,помогите понять...
возник вопрос,точнее даже два:
- чем отличается написание советника для обычного типа счета и для счета типа ECN?
- если в терминале МТ4 в ручную или советником открыть ордер,а потом выключить советник и на ордер поставить встроенный тралл из терминала,то будет ли этот тралл работать при выключенном компьютере или только при включенном?
ЗАРАНЕЕ СПАСИБО ЗА ОТВЕТ!
 

angel999

Гуру форума
тралл обычно работает при включенном терминале. У тебя же в алгоритме каждый тик этот тралл пересчитывает. Включи логику. Выключишь терминал если у тебя не будет тикать. if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)==true) // цикл переборки
 

AlexeyVik

Программист mql4 mql5
тралл обычно работает при включенном терминале. У тебя же в алгоритме каждый тик этот тралл пересчитывает. Включи логику. Выключишь терминал если у тебя не будет тикать. if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)==true) // цикл переборки
Вопрос об этом трале
00.png
 

angel999

Гуру форума
да, я именно про этот тралл и написал. Он не будет работать при выключенном компьютере. Не верите? проверьте на демо счете )))
 

MakarFX

Элитный участник
да,вопрос был именно про этот тралл и про отличие кода советника для счета ECN!
При выключенном терминале или при отсутствии связи ничего не будет работать ни трал, ни сов, ни индюк.
По поводу отличия кода, то сначала разберитесь чем отличаются эти типы счетов, особенно по части открытия и закрытия ордеров, возможно тогда и вопросов не будет)
 

vladradon

Программист
чем отличается написание советника для обычного типа счета и для счета типа ECN?
ECN счет может не дать выставить сразу стандартные тейкпрофит и стоплосс - сначала получаем от команды OrderSend тикет>0 и только потом модификацией выставляем (если нужно) ТП и СЛ. Но, кстати, у меня мои ECN счета обычно на этот счет не капризничали... Но я и пользуюсь в основном только виртуальными закрывашками.
 

vladradon

Программист
тралл обычно работает при включенном терминале. У тебя же в алгоритме каждый тик этот тралл пересчитывает. Включи логику. Выключишь терминал если у тебя не будет тикать. if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)==true) // цикл переборки
Ни один трал без терминала работать не будет!;) А вот менять в 4-ке стоплосс или тейкпрофит можно по таймеру без тиков, как и выставлять ордера.
 

vladradon

Программист
так тож по таймеру, а не по цене.
Ордер выставляется по старой цене для маркет ордеров не дожидаясь прихода тика (обновления цены). Таймер просто отрабатывает запуск команд кода. Можно по OnTick() работать и можно по OnTimer() - по таймеру будет работать когда нужно (особенно это приятно, когда вручную кнопочками управляешь ордерами!). Если основной код работает по таймеру, то в тестере работать не будет - нужно в функцию OnTick() прописать запуск функции OnTimer() - вполне можно в таком варианте тестировать и оптимизировать на 4-ке. На 5-ке таймер и в тестере работает.
 

nelenaby

Новичок форума
Подскажите, пожалуйста, что не так?
Я пытаюсь открыть ордер в определенное время и закрыть его через n количество дней. Но первый ордер открывается и закрывается правильно, а потом открывается второй и сразу закрывается, третий нормально. И так далее.

Код:
Expand Collapse Copy
void OnTick()
  { 
  HourClose = days*24*3600;//  в секундах
   datetime tecTime =TimeCurrent();

      if(CountOrder() == 0 ) { //если в рынке нет открытых ордеров
       if (Hour()== HourStart){
       OpenPosition(Symbol(),OP_BUY,Lot,StopLoss,TakeProfit,MagicNumber);
      
       dayTimeOP=OrderOpenTime();
       ticketOP = OrderTicket();
       Comment(ticketOP,"\n",dayTimeOP);
       }
       }              
     if(CountOrder() > 0) { //если в рынке есть открытый ордер      
       if (tecTime - dayTimeOP >= HourClose){
       ClosePositions(Symbol(),OP_BUY,MagicNumber);     
       dayTimeCl = OrderCloseTime();
       }
 }
 

Вложения

AlexeyVik

Программист mql4 mql5
Подскажите, пожалуйста, что не так?
Я пытаюсь открыть ордер в определенное время и закрыть его через n количество дней. Но первый ордер открывается и закрывается правильно, а потом открывается второй и сразу закрывается, третий нормально. И так далее.

Код:
Expand Collapse Copy
void OnTick()
  {
  HourClose = days*24*3600;//  в секундах
   datetime tecTime =TimeCurrent();

      if(CountOrder() == 0 ) { //если в рынке нет открытых ордеров
       if (Hour()== HourStart){
       OpenPosition(Symbol(),OP_BUY,Lot,StopLoss,TakeProfit,MagicNumber);
     
       dayTimeOP=OrderOpenTime();
       ticketOP = OrderTicket();
       Comment(ticketOP,"\n",dayTimeOP);
       }
       }             
     if(CountOrder() > 0) { //если в рынке есть открытый ордер     
       if (tecTime - dayTimeOP >= HourClose){
       ClosePositions(Symbol(),OP_BUY,MagicNumber);    
       dayTimeCl = OrderCloseTime();
       }
 }
Открытие ордера не выбирает его для получения свойств ордера.
Перед строкой
Код:
Expand Collapse Copy
       dayTimeOP=OrderOpenTime();
сделай выбор только-что открытого ордера
 
Верх