Скачать MetaTrader 5

Советники: breakdown

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
189036
MetaQuotes Software Corp.  

breakdown:

Советник, основанный на прорыве максимума/минимума цены предыдущего дня.

Author: arist0

MQL4 Comments
16316
MQL4 Comments  
А можно сделать советник на прорыв азиатской сессии? т.е. за минуту до закрытия Азии выставляются два ордера BS/SS на заданном расстоянии и заданных TP/SL
arist0
4
arist0  
w_w_w:
А можно сделать советник на прорыв азиатской сессии? т.е. за минуту до закрытия Азии выставляются два ордера BS/SS на заданном расстоянии и заданных TP/SL


Конечно, в коде условие выставления ордеров по времени нужно сделать так:

if (Hour()==0 && Minute() == 59 && exposed == false){

lot = calc_lot(sym);

DeleteOrder();

OpenOrderBuy (sym, lot, DIF, SL, TP);

OpenOrderSell (sym, lot, DIF, SL, TP);

exposed = true;

}

if (Minute()==0) exposed = false;

Только часы задайте какие вам нужны. Всё остальное есть в настройках.

MQL4 Comments
16316
MQL4 Comments  

Я в программировании ни бум-бум.

Можно абзац целиком со строки " int start(){ " и далее до конца, чтобы только скопировать, а то я запутался в if.

arist0
4
arist0  
w_w_w:

Я в программировании ни бум-бум.

Можно абзац целиком со строки " int start(){ " и далее до конца, чтобы только скопировать, а то я запутался в if.


Замени:

   if (Hour()==0 && exposed == false){
     double lot = calc_lot(sym);
     DeleteOrder();
     OpenOrderBuy (sym, lot, DIF, SL, TP);
     OpenOrderSell (sym, lot, DIF, SL, TP);
     exposed = true;
   

if (Hour()==23) exposed = false;

на то что писал раньше, там где hour()==0 поставь нужное тебе время по Гринвичу. собственно условие первого if и обрабатывает во сколько устанавливать ордера.

во 2м if - Minute не должно совпадать с первым, а так - всё равно что туда поставишь

Andrey Gostev
962
Andrey Gostev  

Эта подпрограмма может работать с ошибками.

void DeleteOrder (){                   // Delete Open Stop Orders
   int _total=OrdersTotal();
   for(int _pos=0;_pos<_total;_pos++){
      OrderSelect(_pos, SELECT_BY_POS, MODE_TRADES);
      if (OrderType()>1 && OrderMagicNumber() == MagicNumber)
         OrderDelete(OrderTicket());          
   

for(int _pos=_total-1;_pos>=0;_pos--){

Так будет корректнее.

В процессе удаления ордеров на ходу меняется значение OrdersTotal(). Это полбеды. Но еще и нумерация оставшихся не удаленных ордеров тоже меняется. Как меняется - неизвестно.

Поэтому программа может обойти и не удалить какие-то ордера. Набивал себе шишки на этом. Теперь только по убыванию номеров пишу :)

Sergey Merkulov
188
Sergey Merkulov  
А что ты выложил? Он не работает !!!
Вячеслав
63
Вячеслав  
Оцениваю советник 10. У меня вопрос, стоит ли вставить предложенную строчку, это улучшит работу советника или нет?

for(int _pos=_total-1;_pos>=0;_pos--){

Взамен дам совет как улучшить работу советника на 20-30 процентов.

extern int x1 = 7;

extern int x2 = 6;

if (Hour()==x1 && exposed == false){

if (Hour()==x2) exposed = false;

Не надо морочить мозги с сессиями. Валюта на тестере сама подскажет когда входить в рынок.


Dmitry Fedorchenko
3138
Dmitry Fedorchenko  

Качество 99,9.

No_blame
14
No_blame  

В ту версию советника, которая скачивается уже внесли предложенные участниками форума поправки? 

 

Кто-нибудь торгует с этим советником сейчас?  Как результаты?

No_blame
14
No_blame  

При настройках, которые вы указали в заголовке за 2013 год у меня выходит совсем другие результаты

 

 

Ну и вот такое получилось; просто красиво :)

 

PS Очень бы хотелось, чтобы была добавлена функция установки фиксированного лота. 

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий