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

griz

Активный участник
Может закачать историю с другого брокера и попытаться заменить? А в чем проблема в плане отсутствия свечей? Может как-то код нужно подрехтовать и не заморачиваться?
У одного брокера все свечи, а у другого не хватает свечей. Стало интересно, можно ли в mt4 восстановить недостающие свечи.
 

Elkino

Прохожий
Здравствуйте! Подскажите, пожалуйста, как можно прикрутить функциональные кнопки (например, закрытие ордера) к уровню открытой позиции на графике.
Screenshot_2.png
 

AlexeNP

Гуру форума

Вложения

  • Elkino.mq4
    2,8 КБ · Просмотры: 32

Elkino

Прохожий
AlexeNP - Спасибо большое. Но мне надо работать над точностью формулировок.
Как я видел реализацию: на графике открытый ордер и на линии/уровне этой открытой позиции присутствует кнопка закрытия этого ордера
Когда-то писал для своих нужд на vba, сейчас уже подзабыл. Вот понадобилось и понял, что слабо въезжаю в mql.
Хотелось бы понять логику построения
 

AlexeNP

Гуру форума
AlexeNP - Спасибо большое. Но мне надо работать над точностью формулировок.
Как я видел реализацию: на графике открытый ордер и на линии/уровне этой открытой позиции присутствует кнопка закрытия этого ордера
Когда-то писал для своих нужд на vba, сейчас уже подзабыл. Вот понадобилось и понял, что слабо въезжаю в mql.
Хотелось бы понять логику построения
ну, тогда наверное лучше сделать так - на каждом тике проверяем список ордеров, если появился новый, то создаем кнопку с именем, кажем тикет ордера, размещаем ее где нужно ...
если кнопка нажимается, то ищем по ее имени соответствующий ордер и закрываем его
 

Elkino

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

"если появился новый" - т.е. кнопки для каждого ордера создаются один раз, а на тиках ищем новый ордер?
"размещаем ее где нужно " - это по координатам цены ордера или есть другие варианты
 

griz

Активный участник
Здравствуйте! Подскажите, пожалуйста, как можно прикрутить функциональные кнопки (например, закрытие ордера) к уровню открытой позиции на графике.
Посмотреть вложение 426714
А как такой вариант? Правда, код нубский, но вроде работает

П.с. Нужно на чарт кликнуть чтобы кнопки создались или переместились, если лимитки перемещаете.
 

Вложения

  • 123.mq4
    21,3 КБ · Просмотры: 24
Последнее редактирование:

AlexeNP

Гуру форума
"если появился новый" - т.е. кнопки для каждого ордера создаются один раз, а на тиках ищем новый ордер?
"размещаем ее где нужно " - это по координатам цены ордера или есть другие варианты
ну да... пёс его знает, когда ордер появится, а кнопочка нужна всегда)
 

griz

Активный участник
А как такой вариант? Правда, код нубский, но вроде работает

П.с. Нужно на чарт кликнуть чтобы кнопки создались или переместились, если лимитки перемещаете.
Обновил файл, добавил создание кнопок по тику
 
Последнее редактирование:

Elkino

Прохожий
А как такой вариант? Правда, код нубский, но вроде работает

П.с. Нужно на чарт кликнуть чтобы кнопки создались или переместились, если лимитки перемещаете.
О! Незнаю, что в нём нубского, но по мне - отличный вариант, то что надо! Благодарю!
Будем вникать
 
Последнее редактирование:

1_Lexa

Активный участник
Здравствуйте уважаемые программисты! Не могли бы вы помочь изменить шаг открытия лота с тика на бар и починить тейк профит
За любой ответ заранее благодарен
 

Вложения

  • Locomotive v1.01 (7).mq4
    47,9 КБ · Просмотры: 13

Dobryj

Почетный гражданин
Dobrogo vremeni !
po4emu order ne otkrywaetsia pri dostizenii linii ?


ObjectCreate("1", OBJ_VLINE, 0, Time[0]+2400, 0, 0);
datetime t1 = (datetime) ObjectGet("1", OBJPROP_TIME1);;
datetime New_Time=0;
if(New_Time==t1 )
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-30*Point,Bid+30*Point);


S uwayeniem Aleksandr
 

Dobryj

Почетный гражданин
spasibo ispravil ! no ordera vse ravno ne otkrywajutsia ... 4to mozet byt ?
#property strict

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
datetime New_Time=Time[0];

int OnInit()
{
//---


ObjectCreate("1", OBJ_VLINE, 0, Time[0]+2400, 0, 0);
datetime t1 = (datetime) ObjectGet("1", OBJPROP_TIME1);;

if(New_Time==t1 )
OrderSend(Symbol(),OP_BUY,0.1,0,0,Bid-30*Point,Bid+30*Point);

//---
return(0);
}
 

mobidik

-----
Зачем перенесли переменную New_Time глобально?
Объявите её перед условием проверки, так как было сперва.

1) Условие лучше задавать на больше/меньше, т.е.: if(New_Time>=t1 )
2) Все ценовые параметры должны быть нормализованы, иначе можно получить ошибку установки позиции.
 

Dobryj

Почетный гражданин
#property strict

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+


int OnInit()
{
//---


datetime New_Time=Time[0];
datetime t1 = (datetime) ObjectGet("1", OBJPROP_TIME1);

if(New_Time>=t1 && Open[1]>Close[1] )int sell = OrderSend(Symbol(),OP_BUY,0.1,0,0,0,0);
if(New_Time>=t1 && Open[1]<Close[1] )int buy = OrderSend(Symbol(),OP_SELL,0.1,0,0,0,0);


Print(New_Time,t1);



return(0);
}



sdelka ne otkrywaetsia esli kod w bloke (int OnInit)
a esli pomestit ego w blok (void OnTick) sdelka otkrywaetsia kazdyj tik . KAK BYT W TAKOJ SITUACII ?
 

mobidik

-----
Как вариант: установилась позиция - тут же удалили линию, она уже отработала...
 

Dobryj

Почетный гражданин
Как вариант: установилась позиция - тут же удалили линию, она уже отработала...
Dobrogo vremeni ! vot 4to polu4ilos .


//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{


if(OrdersTotal()<1)
{
datetime New_Time=Time[0];
datetime t1 = (datetime) ObjectGet("1", OBJPROP_TIME1);
if(New_Time==t1 && Open[1]>Close[1] )int sell = OrderSend(Symbol(),OP_BUY,0.1,0,0,Open[0]-3,Open[0]+3);
if(New_Time==t1 && Open[1]<Close[1] )int buy = OrderSend(Symbol(),OP_SELL,0.1,0,0,Open[0]+3,Open[0]-3);
if(OrdersTotal()==1) ObjectDelete("1");

}
}

po teh zadaniju na grafike budet ot 1 do 20 linij . S odnoj liniej wsie rabotaet . Ja skopirowal kod i pomenial imena linij no eto ne rabotaet ...
datetime New_Time=Time[0];
datetime t1 = (datetime) ObjectGet("1", OBJPROP_TIME1);
if(New_Time==t1 && Open[1]>Close[1] )int sell = OrderSend(Symbol(),OP_BUY,0.1,0,0,Open[0]-3,Open[0]+3);
if(New_Time==t1 && Open[1]<Close[1] )int buy = OrderSend(Symbol(),OP_SELL,0.1,0,0,Open[0]+3,Open[0]-3);
if(OrdersTotal()==1) ObjectDelete("1");


New_Time=Time[0];
datetime t2 = (datetime) ObjectGet("2", OBJPROP_TIME1);
if(New_Time==t1 && Open[1]>Close[1] )int sell = OrderSend(Symbol(),OP_BUY,0.1,0,0,Open[0]-3,Open[0]+3);
if(New_Time==t1 && Open[1]<Close[1] )int buy = OrderSend(Symbol(),OP_SELL,0.1,0,0,Open[0]+3,Open[0]-3);
if(OrdersTotal()==1) ObjectDelete("2");

kak eto po4enit ?




S uwageniem Aleksandr
 

mobidik

-----
Dobrogo vremeni ! vot 4to polu4ilos .




po teh zadaniju na grafike budet ot 1 do 20 linij . S odnoj liniej wsie rabotaet . Ja skopirowal kod i pomenial imena linij no eto ne rabotaet ...


kak eto po4enit ?




S uwageniem Aleksandr
Вам следует изменить логику работы с линиями. В коде Вы прописываете имя конкретной линии, т.е., линии с именем "1" - установить на графике более двух линий с одинаковым именем не получится - легко проверяется в терминале. Вам следует к имени линии прибавить префикс, т.е., имя будет состоять из двух частей. В цикле следует перебирать все линии с заданным префиксом по времени. Как только текущие время совпадет с временем линии - ставите позицию, и именно эту линию, после установки позиции - удалить. У оставшихся линий время будет больше текущего - ничего не установится.
 
Верх