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

MrGreen86

Гуру форума
странно как он влияет на число открытых ордеров, сигнал то на открытие не изменился,по истории сделок тоже видно ,что с тралом он "тянет" только sell ордера,buy -почти нет,лишь 2 штуки..:please:

все зависит от вашего советника, какой он. и от того как он написан, все ли в порядке в коде
если это сетка то да может и уменьшится количество ордеров
если нормальный советник то наоборот даже увеличится (если стоит запрет на более чем 1 ордер в рынке).

сбросьте ваш код, посмотрим.
 

vladradon

Программист
зависит от причины почему не проходит, т.е. от кода ошибки.
в каких то ситуация нужно вообще советнику самому себе запретить торговые операции на какое то время (например если рынок закрыт). в каких то обновить цену, в каких то можно долбить дальше если брокер шлет реквоты.
Такие проверки нужно делать до запуска трала, а не после того, как он выдал ошибку. На АТС2012 больше 3000 сов зарубили именно потому, что при первоначальном тесте они выдали хоть одну ошибку или даже просто предупреждение (типа не хватает маржи).
 

Milord

Местный знаток
все зависит от вашего советника, какой он. и от того как он написан, все ли в порядке в коде
если это сетка то да может и уменьшится количество ордеров
если нормальный советник то наоборот даже увеличится (если стоит запрет на более чем 1 ордер в рынке).

сбросьте ваш код, посмотрим.

держите, может проверите на ошибки простенький советник
PHP:
extern int       TP=10;
extern int       SL=20;
extern int       Per=10;
extern double    Lots=0.1;       
extern int       MaxOrders=3;
int       slippage=3;
int       Magic=123;

int D;
int init()
  {
  D=1;
  if(Digits==5 || Digits==3)D=10;
  return(0);
  }

int deinit(){
   return(0);
  }
//-----------------
int start()
{
RefreshRates();
double Poin=D*Point;
double ma=iMA(Symbol(),0,Per,0,3,0,0);
//------------------------------------
if(OrdersTotal()<MaxOrders)
 {
//-----------------
  if(Open[1] > ma )
   {
   OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,Bid-SL*Poin,Ask+TP*Poin,"",Magic,0,Aqua);
   }
//--------
  if(Open[1] < ma )
   {
   OrderSend(Symbol(),OP_SELL,Lots,Bid,slippage,Ask+SL*Poin,Bid-TP*Poin,"",Magic,0,Magenta);
   }
 }     
//----
   return(0);
}
 

sergeysv

Активный участник
Приветствую--
При открытом ордере на чарте рисует его описание и кнопку.
Вопрос-- возможно сделать чтоб при нажатии на кнопку именно этот ордер закрывался по рыночной цене?
 

Вложения

  • 8.mq4
    10,8 КБ · Просмотры: 22

MrGreen86

Гуру форума
Такие проверки нужно делать до запуска трала, а не после того, как он выдал ошибку. На АТС2012 больше 3000 сов зарубили именно потому, что при первоначальном тесте они выдали хоть одну ошибку или даже просто предупреждение (типа не хватает маржи).

вам ли не знать что при реальной работе нередко бывает так что все проверки пройдены но ошибка все равно есть. часто не очень честные на руку брокеры (почти все) маскируют реквоты другими ошибками, это как пример. нередко сталкиваешься с кривизной рук тех кто настраивал сервер у брокера. т.е. параметры инструмента одни а на самом деле другие.
 
Последнее редактирование:

MrGreen86

Гуру форума
Приветствую--
При открытом ордере на чарте рисует его описание и кнопку.
Вопрос-- возможно сделать чтоб при нажатии на кнопку именно этот ордер закрывался по рыночной цене?

можно, вот только индикаторы не могут выполнять торговые приказы. переделал в советник и доделал закрытие.
Посмотреть вложение 8 exp.mq4
 

vladradon

Программист
вам ли не знать что при реальной работе нередко бывает так что все проверки пройдены но ошибка все равно есть. часто не очень честные на руку брокеры (почти все) маскируют реквоты другими ошибками, это как пример. нередко сталкиваешься с кривизной рук тех кто настраивал сервер у брокера. т.е. параметры инструмента одни а на самом деле другие.
Да уж... У одного брокера (Открытие) на фьючерсах так цена резко летала, что намного перескакивала стандартные ТП и СЛ и сервер начинал выдавать ошибку, не закрывая ордер. Пришлось все дублировать командами. А в тех поддержке ответили, что, наверное, сервер не полностью настроен... - типа сами выкручивайтесь. А еще у Альпари тоже на реале один раз цена не спеша перешла через ТП, погуляла в почти двойном плюсе, вернулась к цене открытия ордера и только тогда ордер закрылся в практически ноль. Сообщений от сервера в журнале не было.:D
 

eevviill2

Местный знаток
Так как этот ордер вычислить?))) Какой алгоритм?
PHP:
...
int ticket_start=1;
int TICKET=ticke_search_f(ticket_start);
if(TICKET==-1) Alert("No order in market.");
...
////////////////////////////////////////////////////////////////////////
int ticke_search_f(int ticke)
{
//no order
if(!OrderSelect(ticke,SELECT_BY_TICKET)) return(-1);

//if order opened
if(OrderCloseTime()==0) return(OrderTicket());

//if order closed
int str_sta=StringFind(OrderComment(),"to #");
while(str_sta!=-1)
{
if(!OrderSelect(int(StringSubstr(OrderComment(),str_sta+4)),SELECT_BY_TICKET)) break;
}

//if all parts of order closed
if(OrderCloseTime()>0) return(-1);


//return ticket of last opened part
return(OrderTicket());
}
 
Последнее редактирование:

vladradon

Программист
Сообщение от: vladradon
Так как этот ордер вычислить?))) Какой алгоритм?
PHP код:
...
int ticket_start=1;
int TICKET=ticke_search_f(ticket_start);
if(TICKET==-1) Alert("No order in market.");
...
////////////////////////////////////////////////////////////////////////
int ticke_search_f(int ticke)
{
//no order
if(!OrderSelect(ticke,SELECT_BY_TICKET)) return(-1);

//if order opened
if(OrderCloseTime()==0) return(OrderTicket());

//if order closed
int str_sta=StringFind(OrderComment(),"to #");
while(str_sta!=-1)
{
if(!OrderSelect(int(StringSubstr(OrderComment(),str_sta+4)),SELECT_BY_TICKET)) break;
}

//if all parts of order closed
if(OrderCloseTime()>0) return(-1);


//return ticket of last opened part
return(OrderTicket());
}
Я даже не помню эти мои слова и что мне было нужно... Если по поводу трала, то я его еще пару месяцев назад дописал. Что-то ты подтормаживаешь!;):D
https://forexsystemsru.com/poleznye-utility/86121-mnogourovnevyi-virtual%60nyi-treiling.html#post1302251
 

_SERG_

Активный участник
нередко сталкиваешься с кривизной рук тех кто настраивал сервер у брокера. т.е. параметры инструмента одни а на самом деле другие.

А по подробней, какие именно параметры, и на каких типах счетов?
 

eevviill2

Местный знаток
А вот посложнее задача была.
Есть открытый(е) ордер, который частично закрытый.
Нужно найти родительский(самый первый) ордер и колчество кусков закрытия.

PHP:
int cou;

///////////////////////////////////////////
void OnStart()
{
ticket_search_start_f();

}

///////////////////////////////////////////
void ticket_search_start_f()
{
int tick_start;
int tick_curr;
int str_start;


 for (int i=OrdersTotal()-1; i>=0; i--)
 {
   if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
   
   str_start=StringFind(OrderComment(),"from #");
   if(str_start!=-1) 
   {
   tick_curr=OrderTicket();
   tick_start=ticke_search_f(int(StringSubstr(OrderComment(),str_start+6)));
   Alert("Ticket:"+string(tick_curr)," Start ticket:"+string(tick_start)," Parts:",cou);
   }  
 }
}

////////////////////////////////////////////////////////////////////////
int ticke_search_f(int ticke)
{
//no order
if(!OrderSelect(ticke,SELECT_BY_TICKET)) return(-1);

//parts
int tick=ticke;
int tick_fin=ticke;
cou=1;
while(tick!=-1)
{
tick=comme_search_f(tick); 
if(tick!=-1) 
{
tick_fin=tick;
cou++;
}
}

//return ticket of first closed part
return(tick_fin);
}  


////////////////////////////////////////////////////////
int comme_search_f(int tick_s)
{
int tick=-1;


 for (int i=OrdersHistoryTotal()-1; i>=0; i--)
 {
   if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
   
   if(StringFind(OrderComment(),string(tick_s))!=-1 && StringFind(OrderComment(),"from")==-1) 
   {
   tick=OrderTicket();
   break;
   }
         
 }

return(tick);
}
 

vladradon

Программист
А вот посложнее задача была.
Есть открытый(е) ордер, который частично закрытый.
Нужно найти родительский(самый первый) ордер и колчество кусков закрытия.
Я так в итоге и понял и эта задача мной уже решена пару месяцев назад - там вопрос стоял по поводу расчета безубытка с учетом всех закрытых кусков начального ордера в трале. И, как мне бы не хотелось с тобой поругаться, СПАСИБО! за внимание)))
Об этом меня попросил знакомый и в итоге какого-то эффекта я не увидел. Может при определенных настройках он и будет, но... пока эта опция тупо есть.
 
Последнее редактирование:

sergeysv

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

Вложения

  • 8 exp.mq4
    13,8 КБ · Просмотры: 13

Pammexpert

Местный житель
Я так в итоге и понял и эта задача мной уже решена пару месяцев назад - там вопрос стоял по поводу расчета безубытка с учетом всех закрытых кусков начального ордера в трале. И, как мне бы не хотелось с тобой поругаться, СПАСИБО! за внимание)))
Об этом меня попросил знакомый и в итоге какого-то эффекта я не увидел. Может при определенных настройках он и будет, но... пока эта опция тупо есть.

Частичное закрытие позиций применяется давно и с пользой.
Существует несколько методов такого применения:
- частичное закрытие в % отношении по лоту в зависимости от пройденных ценой пунктов (в нашем направлении).
- частичное закрытие равными частями по лоту в зависимости от пройденных ценой пунктов (в нашем направлении).
- частичное закрытие в сочетании с БезУбытком ( то же несколько вариантов)
- и т.д.

----- И вершиной этого метода является некий симбиоз частичного закрытия (ЧЗ) с трейлингом. Его называют по разному, но суть от этого не меняется. И вот здесь важно правильно закодировать и настроить его к использованной стратегии.

Немного истории - один трейдер применял этот метод в сочетании со своей стратегией (брокера не называю - рекламой не занимаюсь, но скажу так - брокер известный и с евро-регуляцией). На старте на счету было 11 миллиардов вечно-зелёных денег. Были и просадки и профит. Через 2 недели он достиг уровня в 17 МЛРД. $.
(не спрашивайте - откуда у него столько денег? Нужно просто уметь найти инвестора).
Так вот, ТС с правильным применением ЧЗ в сочетании с трейлингом дает хорошие результаты. Есть реальные подтверждения.
 

Milord

Местный знаток
Народ- подскажите как настраивать эту панель в терминале МТ4?

и зачем она вапще нужна, что дает функционально?(жмите на картинку,она увеличится!)
 

Вложения

  • Screenshot - 28_05111.jpg
    Screenshot - 28_05111.jpg
    38,4 КБ · Просмотры: 26
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
и зачем она вапще нужна, что дает функционально?(жмите на картинку,она увеличится!)
Это настройки пуш-уведомлений. В языке mql есть возможность отправлять такие уведомления при определённых событиях. Например открылся ордер, ты на телефон получаешь уведомление. В общем это замена отправки СМС через майл. Плюс к этому, если на сайте mql5 кто-то обращается именно к тебе и при обращении пишет @Milord то в этом случае тоже получаешь уведомление о том, что кто-то хочет с тобой пообщаться.
Но это лишь теория. Я не сторонник этой хрени и подробные тексты не видел. Из советника приходит то что написано в коде, а вот с сайта не знаю.


Точней не просто на телефон, а на МТ установленный на телефоне\смартфоне.

SendNotification
Посылает уведомление на мобильные терминалы, чьи MetaQuotes ID указаны в окне настроек на закладке "Уведомления".
Код:
bool  SendNotification(
   string  text          // текст сообщения
   );
 
Последнее редактирование:

vladradon

Программист
Rep Report
Сообщение от: vladradon
Дружище, ты где пропал? Ужо столько сов назад последний раз с тобой общались....
Да много рутины.

Сегодня, 17:16
#6537 (permalink)

Pammexpert
Местный житель
Регистрация: 14.08.2011 / Сообщений: 143
Поблагодарили 190 раз(а) / Репутация: 191
Rep Report
Сообщение от: vladradon
Я так в итоге и понял и эта задача мной уже решена пару месяцев назад - там вопрос стоял по поводу расчета безубытка с учетом всех закрытых кусков начального ордера в трале. И, как мне бы не хотелось с тобой поругаться, СПАСИБО! за внимание)))
Об этом меня попросил знакомый и в итоге какого-то эффекта я не увидел. Может при определенных настройках он и будет, но... пока эта опция тупо есть.
Частичное закрытие позиций применяется давно и с пользой.
Существует несколько методов такого применения:
- частичное закрытие в % отношении по лоту в зависимости от пройденных ценой пунктов (в нашем направлении).
- частичное закрытие равными частями по лоту в зависимости от пройденных ценой пунктов (в нашем направлении).
- частичное закрытие в сочетании с БезУбытком ( то же несколько вариантов)
- и т.д.

----- И вершиной этого метода является некий симбиоз частичного закрытия (ЧЗ) с трейлингом. Его называют по разному, но суть от этого не меняется. И вот здесь важно правильно закодировать и настроить его к использованной стратегии.

Немного истории - один трейдер применял этот метод в сочетании со своей стратегией (брокера не называю - рекламой не занимаюсь, но скажу так - брокер известный и с евро-регуляцией). На старте на счету было 11 миллиардов вечно-зелёных денег. Были и просадки и профит. Через 2 недели он достиг уровня в 17 МЛРД. $.
(не спрашивайте - откуда у него столько денег? Нужно просто уметь найти инвестора).
Так вот, ТС с правильным применением ЧЗ в сочетании с трейлингом дает хорошие результаты. Есть реальные подтверждения.
Вы бы для начала проработали матчасть, прежде чем что-то "умное" (по-вашему) писать...
 
Верх