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

hoz

Активный участник
Я вот призадумался. Как реализовать задачу, чтоб если что-то произошло, то следующая операция может происходить только через несколько дней? Желательно, не прибавлять N-секунд, а как-то красивее..)
Типа, щяс( в понедельник ) установили ордер, а через пару дней( в среду в 15.30 ) нужно продолжить торговлю. Т.е. интересует именно функция, которая будет рассчитывать этот отрезок времени.
Имею ввиду, чтоб можно было задать типа через N-дней... а не просто день недели.
 
Последнее редактирование:

iii237

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

iii237

Активный участник
Я вот призадумался. Как реализовать задачу, чтоб если что-то произошло, то следующая операция может происходить только через несколько дней? Желательно, не прибавлять N-секунд, а как-то красивее..)
Типа, щяс( в понедельник ) установили ордер, а через пару дней( в среду в 15.30 ) нужно продолжить торговлю. Т.е. интересует именно функция, которая будет рассчитывать этот отрезок времени.
Имею ввиду, чтоб можно было задать типа через N-дней... а не просто день недели.

Вам в любом случае придется определять момент, от которого нужно плясать. Либо Вы будете хранить его в какой-то переменной, что рискованно: в случае сбоя эти данные могут пропасть.
Надежней определять момент каждый раз по истории, либо по закрытым ордерам, либо по индикаторам, либо просто по свечкам. А потом прибавлять к нему секунды, никуда не деться от этого.
Если Вы так не любите секунды, то можете задать часы и умножить на 3600 например.
 

vlad_123

Местный знаток
Пипсовка всегда была одним из самых выгодных вариантов. Именно этим занимаются взрослые дяди со стаканАми у взрослых брокеров. Именно поэтому она всегда была просто-напросто запрещена на всех кухнях. Сегодня кухни потихоньку сдают свои позиции, уж больно им хочется походить на взрослых. Вы просто молодец, что смогли этим воспользоваться. Поздравляю.
Вдумчиво вчитайтесь в мое сообщение - где там идет речь про пипсовку??? Если верить Myfxbook, то Avg. Trade Length: 1d.

Речь шла про то, чтобы закрывать профитную позицию, например, в 0.1 лота, используя 10 раз частичное закрытие по 0.01 лота.
В этом случае каждая закрываемая позиция в 0.01 лота будет приносить то же самое количество пипов :) Т.е. в итоге получаем в 10 раз больше пипсов.
 

hoz

Активный участник
Вам в любом случае придется определять момент, от которого нужно плясать. Либо Вы будете хранить его в какой-то переменной, что рискованно: в случае сбоя эти данные могут пропасть.
Надежней определять момент каждый раз по истории, либо по закрытым ордерам, либо по индикаторам, либо просто по свечкам. А потом прибавлять к нему секунды, никуда не деться от этого.
Если Вы так не любите секунды, то можете задать часы и умножить на 3600 например.

То что нужно учесть рестарт терминала - очевидно. Я спрашивал вариант максимально компактной реализации. У меня есс-но есть свои варианты. Но не такие краткие возможно, как могли быть. Хотя... может я чересчур придирчив в качеству кода.
 

iii237

Активный участник
Вдумчиво вчитайтесь в мое сообщение - где там идет речь про пипсовку??? Если верить Myfxbook, то Avg. Trade Length: 1d.

Речь шла про то, чтобы закрывать профитную позицию, например, в 0.1 лота, используя 10 раз частичное закрытие по 0.01 лота.
В этом случае каждая закрываемая позиция в 0.01 лота будет приносить то же самое количество пипов :) Т.е. в итоге получаем в 10 раз больше пипсов.

:D Прошу прощения, не понял сразу. Просто обычно речь о минимальном пробеге цены до закрытия как раз о пипсовке. Однако у Вас любопытный вариант, надо будет подумать.:facepalm:
 

AlexeyVik

Программист mql4 mql5
Я вот призадумался. Как реализовать задачу, чтоб если что-то произошло, то следующая операция может происходить только через несколько дней? Желательно, не прибавлять N-секунд, а как-то красивее..)
Типа, щяс( в понедельник ) установили ордер, а через пару дней( в среду в 15.30 ) нужно продолжить торговлю. Т.е. интересует именно функция, которая будет рассчитывать этот отрезок времени.
Имею ввиду, чтоб можно было задать типа через N-дней... а не просто день недели.
Через N-дней от чего? От открытия ордера в понедельник? Так что может быть проще и красивей арифметического действия с PeriodSeconds(PERIOD_D1)?
 

hoz

Активный участник
Через N-дней от чего? От открытия ордера в понедельник? Так что может быть проще и красивей арифметического действия с PeriodSeconds(PERIOD_D1)?

По сути да. Но я эту функцию вообще первый раз вижу, если честно. В разделе "Дата и время" её нет. Зато запихали в "Общие"...:facepalm:
 

AlexeyVik

Программист mql4 mql5
По сути да. Но я эту функцию вообще первый раз вижу, если честно. В разделе "Дата и время" её нет. Зато запихали в "Общие"...:facepalm:
Ты не смотришь что предлагает МЕ когда набираешь что-то??? Ведь если начать набирать Period() то когда наберёшь Per то появляются подсказки... Я увидел что-то новое, открыл документацию и прочёл. А ты как узнаёшь нововведения?
 

hoz

Активный участник
Ты не смотришь что предлагает МЕ когда набираешь что-то??? Ведь если начать набирать Period() то когда наберёшь Per то появляются подсказки... Я увидел что-то новое, открыл документацию и прочёл. А ты как узнаёшь нововведения?

Либо как Вы, либо просто захожу в интересуемый меня раздел. Если это время... то "Дата и в время", если позиции, тогда ищу раздел, связанный с работой с позициями и тд.
Но PeriodSeconds() я не встречал. Хотя встретил вчера пару функций TimeToStruct и MqlDateTime. Собирался уже с их помощью городить метод. И уже даже написал! Но что-то вышло длинновато :facepalm:. Затёр! А вот PeriodSeconds() то что нужно! Можно всё разрулить на порядок проще и гибче без тех громоздких вариантов.
 
Последнее редактирование:

gush

бродяга
всем привет, подскажите в целях изучения mql, мне чайнику...
пробую написать свой собственный простой скрипт открытия сетки..
логика проста, сначала открываются бай селл противоположные..
а потом хочу, лимитки и стоповые вкрутить...
но хочется сделать так, чтобы выставлялись байстопы и байлимитки от цены открытия баевого ордера, а селлстопы и селлимиты выставлялись от цены открытого селлового ордера..
вот что я накодил пока... тока не смейтесь:
PHP:
int start()
  {
//----
int ticket1=-1;
  while(ticket1<0)
    {
    ticket1=OrderSend(Symbol(),OP_BUY,lot_b,Ask,10,0,0,NULL,Magic,0,CLR_NONE);
    ticket1=OrderSend(Symbol(),OP_SELL,lot_s,Bid,10,0,0,NULL,Magic,0,CLR_NONE);    
    if(ticket1<0)Print("Ошибка при открытии позиции (",ErrorDescription(GetLastError()),")");
    }
//----
   return(0);
  }
хочется минимум кода сделать, также, как с открытыми ордерами, строчками продолжать кодить лимитки и стоповые.. подскажите.. )))
 

eevviill

Заблокирован
всем привет, подскажите в целях изучения mql, мне чайнику...
пробую написать свой собственный простой скрипт открытия сетки..
логика проста, сначала открываются бай селл противоположные..
а потом хочу, лимитки и стоповые вкрутить...
но хочется сделать так, чтобы выставлялись байстопы и байлимитки от цены открытия баевого ордера, а селлстопы и селлимиты выставлялись от цены открытого селлового ордера..
вот что я накодил пока... тока не смейтесь:
PHP:
int start()
  {
//----
int ticket1=-1;
  while(ticket1<0)
    {
    ticket1=OrderSend(Symbol(),OP_BUY,lot_b,Ask,10,0,0,NULL,Magic,0,CLR_NONE);
    ticket1=OrderSend(Symbol(),OP_SELL,lot_s,Bid,10,0,0,NULL,Magic,0,CLR_NONE);    
    if(ticket1<0)Print("Ошибка при открытии позиции (",ErrorDescription(GetLastError()),")");
    }
//----
   return(0);
  }
хочется минимум кода сделать, также, как с открытыми ордерами, строчками продолжать кодить лимитки и стоповые.. подскажите.. )))
Тгода проще в одну сторону, апотом вдругую.
PHP:
int start()
  {
//----
int ticket1=-1;
  while(ticket1<0)
    {
    ticket1=OrderSend(Symbol(),OP_BUY,lot_b,Ask,10,0,0,NULL,Magic,0,CLR_NONE);
       
    if(ticket1<0)Print("Ошибка при открытии позиции (",ErrorDescription(GetLastError()),")");
else 
if(OrderSelect(ticket1,SELECT_BY_TICKET))
{
price=OrderOpenPrice()+Step*Point;

for(int i=0;i<OrderPend;i++)
{
if(OrderSend(...,OP_BUYSTOP,...,price,...))
price+=Step*Point;
}
}
    }
//----
   return(0);
  }
 
  • Like
Реакции: gush

gush

бродяга
Тгода проще в одну сторону, апотом вдругую.
PHP:
int start()
  {
//----
int ticket1=-1;
  while(ticket1<0)
    {
    ticket1=OrderSend(Symbol(),OP_BUY,lot_b,Ask,10,0,0,NULL,Magic,0,CLR_NONE);
       
    if(ticket1<0)Print("Ошибка при открытии позиции (",ErrorDescription(GetLastError()),")");
else 
if(OrderSelect(ticket1,SELECT_BY_TICKET))
{
price=OrderOpenPrice()+Step*Point;

for(int i=0;i<OrderPend;i++)
{
if(OrderSend(...,OP_BUYSTOP,...,price,...))
price+=Step*Point;
}
}
    }
//----
   return(0);
  }

*hi* а спред как то можно сюда еще воткнуть? Сминусовать его так, чтобы.. допустим открыт бай с тейком 20п. для установки байстопа степ тоже 20п., хотелось бы одновременное событие создать, бай закрывается - байстоп открывается.. :please:
 

eevviill

Заблокирован
*hi* а спред как то можно сюда еще воткнуть? Сминусовать его так, чтобы.. допустим открыт бай с тейком 20п. для установки байстопа степ тоже 20п., хотелось бы одновременное событие создать, бай закрывается - байстоп открывается.. :please:
Ну прибавляй или отнимай скольк надо
price=OrderOpenPrice()+Step*Point+MarketInfo(Symbol(),MODE_SPREAD)*Point;
 
  • Like
Реакции: gush

Gruler

Новичок форума
Уважаемые программисты, можете скинуть наглядный код того как узнать значение 2го хая, вершины ZigZag. Не второго экстремума, а 2й вершины?!
 

Вложения

  • ScreenShot.png
    ScreenShot.png
    16,2 КБ · Просмотры: 25

vaxa54

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

AlexeyVik

Программист mql4 mql5
здравствуйте, можно ли добавить в советник возможность открывать сделки по всем сигналам?? Сейчас открывается только одна сделка и до ее закрытия другие сигналы игнорируются
А как ты считаешь все сигналы?
Вот появился сигнал, потом пропал и только после этого считается следующий сигнал? Или как-то по-другому?
 

vaxa54

Новичок форума
А как ты считаешь все сигналы?
Вот появился сигнал, потом пропал и только после этого считается следующий сигнал? Или как-то по-другому?
ну сигналы появляются не чаще одного раза в час (по свечным формациям) и пока открыта сделка (целый день к примеру) другие сделки не открываются хотя сигналы есть
 
Верх