Ответ
 
Опции темы
05.05.2012, 07:23
Аватар для vetallic
vetallic Местный знаток
Регистрация: 31.08.2010 / Сообщений: 352
Поблагодарили 509 раз(а) / Репутация: 511
почему мелочь, думаю перенести алгоритм открытия ордеров будет достаточно
vetallic вне форума Ответить с цитированиемОтветить с цитированием  
05.05.2012, 08:36
Аватар для реношник
реношник Почётный гражданин
Регистрация: 18.11.2008 / Адрес: Украина Днепропетровская обл. vufx@rambler.ru == r25v6@rambler.ru / Сообщений: 700
Поблагодарили 355 раз(а) / Репутация: 354
  • Отправить сообщение для реношник с помощью Skype™
Сообщение от vetallic Посмотреть сообщение
почему мелочь, думаю перенести алгоритм открытия ордеров будет достаточно
Если алгоритм использует нейро сети тогда согласен, всё остальное это пустая трата времени.
реношник вне форума Ответить с цитированиемОтветить с цитированием  
11.05.2012, 06:08
Аватар для nilva
nilva Активный участник
Регистрация: 20.04.2011 / Сообщений: 87
Поблагодарили 57 раз(а) / Репутация: 58
Доброго времени суток!
Помогите, пожалуйста, подправить участок кода:
Чтобы советник начинал торговать в понедельник с 2:00 и не выставлял новых ордеров в пятницу после в 15:00.
Причем, если есть ордера в рынке то он их бы закрывал по условию работы советника.
Заранее благодарен!
PHP код:
extern int DayStop 0// 0-воскресенье. В этот день сов. выставляет ордера только в разрешенное время.
extern int TimeStart 0;      // С какого времени разрешено выставлять ордера
extern int TimeEnd 24;      // По какое время разрешено выставлять ордера

int start() {
//+----------------------------------------------+
//| Проверка на разрешение торговать
//+----------------------------------------------+   
   
if (!IsTradeAllowed()) return (0);
//+----------------------------------------------+
//| Проверка на разрешенное время
//+----------------------------------------------+   
   
bool TimeTrade;
   
int hour Hour();
   if (
TimeStart TimeEnd && hour >= TimeStart && hour TimeEndTimeTrade TRUE;
   else {
      if (
TimeStart TimeEnd && hour >= TimeStart || hour TimeEndTimeTrade TRUE;
      else 
TimeTrade FALSE;
   }
   if(
DayOfWeek() == DayStop && !TimeTrade) return(0);
//+----------------------------------------------+ 

Последний раз редактировалось nilva; 11.05.2012 в 06:17.
nilva вне форума Ответить с цитированиемОтветить с цитированием  
11.05.2012, 06:56
Аватар для реношник
реношник Почётный гражданин
Регистрация: 18.11.2008 / Адрес: Украина Днепропетровская обл. vufx@rambler.ru == r25v6@rambler.ru / Сообщений: 700
Поблагодарили 355 раз(а) / Репутация: 354
  • Отправить сообщение для реношник с помощью Skype™
1. такая проверка бесполезна...
PHP код:
int start() {
//+----------------------------------------------+
//| Проверка на разрешение торговать
//+----------------------------------------------+   
   
if (!IsTradeAllowed()) return (0); 
2.
Сообщение от nilva Посмотреть сообщение
Причем, если есть ордера в рынке то он их бы закрывал по условию работы советника.
Заранее благодарен!
для этого нужно знать условия советника, или хотябы имя функции которая выполняет закрытие...

3.
Сообщение от nilva Посмотреть сообщение
Доброго времени суток!
Помогите, пожалуйста, подправить участок кода:
Чтобы советник начинал торговать в понедельник с 2:00 и не выставлял новых ордеров в пятницу после в 15:00.
Ниже, конструкция которая задаёт участок работы советника. Немножко переделать и будет то, что тебе нужно...

PHP код:
extern string start_day "2012.01.02 00:00"
extern string stop_day "2012.02.11 00:00"
//------- Глобальные переменные советника -----+
string day;

int start() { 
RefreshRates();
//+------------------------------+
//| определение текущего времени |
//+------------------------------+    
day TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES);
if (
day start_day) return(0);
if (
day stop_day) return(0); 
реношник вне форума Ответить с цитированиемОтветить с цитированием  
3 пользователя(ей) сказали cпасибо:
eevviill (11.05.2012), nilva (11.05.2012), tommy27 (11.05.2012)
11.05.2012, 07:08
Аватар для eevviill
eevviill Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,027 раз(а) / Репутация: 9027
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от nilva Посмотреть сообщение
Доброго времени суток!
Помогите, пожалуйста, подправить участок кода:
Чтобы советник начинал торговать в понедельник с 2:00 и не выставлял новых ордеров в пятницу после в 15:00.
Причем, если есть ордера в рынке то он их бы закрывал по условию работы советника.
Заранее благодарен!
PHP код:
extern int DayStart 1;
extern int DayStop 5// 0-воскресенье. В этот день сов. выставляет ордера только в разрешенное время.
extern int TimeStart 2;      // С какого времени разрешено выставлять ордера
extern int TimeEnd 15;      // По какое время разрешено выставлять ордера
 
int start() {
//+----------------------------------------------+
//| Проверка на разрешение торговать
//+----------------------------------------------+   
   
if (!IsTradeAllowed()) return (0);
//+----------------------------------------------+
//| Проверка на разрешенное время
//+----------------------------------------------+   
   
bool TimeTrade;
   
int hour Hour();
   if (
TimeStart TimeEnd && hour >= TimeStart && hour TimeEndTimeTrade TRUE;
   else {
      if (
TimeStart TimeEnd && hour >= TimeStart || hour TimeEndTimeTrade TRUE;
      else 
TimeTrade FALSE;
   }
   if((
DayOfWeek() < DayStart || DayOfWeek() > DayStop ) && !TimeTrade) return(0);
//+----------------------------------------------+ 
Вот так.
eevviill вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
nilva (11.05.2012), реношник (11.05.2012)
11.05.2012, 07:21
Аватар для реношник
реношник Почётный гражданин
Регистрация: 18.11.2008 / Адрес: Украина Днепропетровская обл. vufx@rambler.ru == r25v6@rambler.ru / Сообщений: 700
Поблагодарили 355 раз(а) / Репутация: 354
  • Отправить сообщение для реношник с помощью Skype™
Уберите эту строчку !!!!!!!!!!!!!!!!!!!

PHP код:
//+----------------------------------------------+
//| Проверка на разрешение торговать
//+----------------------------------------------+   
   
if (!IsTradeAllowed()) return (0); 
реношник вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (11.05.2012), nilva (11.05.2012)
11.05.2012, 07:52
Аватар для nilva
nilva Активный участник
Регистрация: 20.04.2011 / Сообщений: 87
Поблагодарили 57 раз(а) / Репутация: 58
Сообщение от реношник Посмотреть сообщение
Уберите эту строчку !!!!!!!!!!!!!!!!!!!
PHP код:
int start() {
//+----------------------------------------------+
//| Проверка на разрешение торговать
//+----------------------------------------------+   
   
if (!IsTradeAllowed()) return (0); 
Каким условием это можно проверить?
nilva вне форума Ответить с цитированиемОтветить с цитированием  
11.05.2012, 08:01
Аватар для nilva
nilva Активный участник
Регистрация: 20.04.2011 / Сообщений: 87
Поблагодарили 57 раз(а) / Репутация: 58
2) Получается каждую неделю нужно выставлять это условие?
PHP код:
extern string start_day "2012.01.02 00:00"
extern string stop_day "012.02.11 00:00"
nilva вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (11.05.2012)
11.05.2012, 08:45
Аватар для реношник
реношник Почётный гражданин
Регистрация: 18.11.2008 / Адрес: Украина Днепропетровская обл. vufx@rambler.ru == r25v6@rambler.ru / Сообщений: 700
Поблагодарили 355 раз(а) / Репутация: 354
  • Отправить сообщение для реношник с помощью Skype™
Сообщение от nilva Посмотреть сообщение
Каким условием это можно проверить?
Просто тут этой проверке НЕ место !!!! Это может только ухудшить работу программы....
реношник вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (11.05.2012)
11.05.2012, 08:46
Аватар для реношник
реношник Почётный гражданин
Регистрация: 18.11.2008 / Адрес: Украина Днепропетровская обл. vufx@rambler.ru == r25v6@rambler.ru / Сообщений: 700
Поблагодарили 355 раз(а) / Репутация: 354
  • Отправить сообщение для реношник с помощью Skype™
Сообщение от nilva Посмотреть сообщение
2) Получается каждую неделю нужно выставлять это условие?
PHP код:
extern string start_day "2012.01.02 00:00"
extern string stop_day "012.02.11 00:00"
В этом случае ДА.
Но ведь eevviill уже дал исправленный код...
реношник вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (11.05.2012), nilva (11.05.2012)
11.05.2012, 09:27
Аватар для eevviill
eevviill Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,027 раз(а) / Репутация: 9027
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от nilva Посмотреть сообщение
Каким условием это можно проверить?
while (!IsTradeAllowed()) Sleep(5000);
eevviill вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
nilva (11.05.2012)
11.05.2012, 09:55
Аватар для реношник
реношник Почётный гражданин
Регистрация: 18.11.2008 / Адрес: Украина Днепропетровская обл. vufx@rambler.ru == r25v6@rambler.ru / Сообщений: 700
Поблагодарили 355 раз(а) / Репутация: 354
  • Отправить сообщение для реношник с помощью Skype™
Нет !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
В начале функции Start проверку IsTradeAllowed() ставить НЕЛЬЗЯ !!!!!!!!!!!!!!
реношник вне форума Ответить с цитированиемОтветить с цитированием  
11.05.2012, 10:02
Аватар для eevviill
eevviill Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,027 раз(а) / Репутация: 9027
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от реношник Посмотреть сообщение
Нет !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
В начале функции Start проверку IsTradeAllowed() ставить НЕЛЬЗЯ !!!!!!!!!!!!!!
Почему?
eevviill вне форума Ответить с цитированиемОтветить с цитированием  
11.05.2012, 11:51
Аватар для реношник
реношник Почётный гражданин
Регистрация: 18.11.2008 / Адрес: Украина Днепропетровская обл. vufx@rambler.ru == r25v6@rambler.ru / Сообщений: 700
Поблагодарили 355 раз(а) / Репутация: 354
  • Отправить сообщение для реношник с помощью Skype™
Сообщение от eevviill Посмотреть сообщение
Почему?
Пытаться торговать можно только в том случае, если функция IsTradeAllowed() возвращает TRUE.
Проверку надо делать непосредственно перед торговой операцией.

Пример неправильного использования функции:
PHP код:
int start()
  {
    
// проверяем, свободен ли торговый поток
    
if(!IsTradeAllowed())
      {
        
// если функция IsTradeAllowed() вернула FALSE, сообщаем об этом пользователю,
        
Print("Торговый поток занят! Эксперт не может открыть позицию!");
        
// и прекращаем работу эксперта. Она будет возобновлена с приходом следующего 
        // тика
        
return(-1);
      }
    else
      {
        
// если функция IsTradeAllowed() вернула TRUE, сообщаем об этом пользователю 
        // и продолжаем работу
        
Print("Торговый поток свободен! Продолжаем работу...");
      }
    
// определяем необходимость входа в рынок
    
...
    
// рассчитываем уровни Стоп Лосс, Тейк Профит и размер лота
    
...
    
// открываем позицию
    
if(OrderSend(...) < 0
        
Alert("Ошибка открытия позиции № "GetLastError());
    return(
0);
  } 
В этом примере проверка состояния торгового потока происходит в самом начале функции start(). Это ошибочное решение - за время, потраченное экспертом на расчёты (необходимость входа в рынок, уровни Стоп Лосс, Тейк Профит, размер лота и т.п.), торговый поток может быть занят другим экспертом. В этом случае попытка открыть позицию не увенчается успехом.


Пример правильного использования функции:
PHP код:
int start()
  {
    
// определяем необходимость входа в рынок
    
...
    
// рассчитываем уровни Стоп Лосс, Тейк Профит и размер лота
    
...
    
// и только теперь проверяем, свободен ли торговый поток
    
if(!IsTradeAllowed())
      {
        Print(
"Торговый поток занят! Эксперт не может открыть позицию!");
        return(-
1);
      }
    else
        Print(
"Торговый поток свободен! Пытаемся открыть позицию...");
    
// если проверка прошла успешно, открываем позицию
    
if(OrderSend(...) < 0
        
Alert("Ошибка открытия позиции № "GetLastError());
    return(
0);
  } 
реношник вне форума Ответить с цитированиемОтветить с цитированием  
3 пользователя(ей) сказали cпасибо:
eevviill (11.05.2012), nilva (11.05.2012), strannik-ps (26.05.2012)
26.05.2012, 18:05
Аватар для Dersu
Dersu Почётный гражданин
Регистрация: 08.11.2010 / Сообщений: 279
Поблагодарили 443 раз(а) / Репутация: 445
  • Отправить сообщение для Dersu с помощью Skype™
Вопрос к знатокам, поскольку сам нуб в программировании.
Есть интересная для меня (очень возможно и не только) тема:
_http://codebase.mql4.com/ru/7430
_http://forum.mql4.com/ru/33954/page2
_http://ruforum.mt5.com/threads/5898-indikatori-dlya-vizualnogo-podbora-parametrov?p=553753
Там и ссылки на статьи есть.
Возможно создать кустомский вариант?
Или под каждый индюк нужно код переписывать?

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Люди делятся на три категории: живые, мёртвые и плавающие по морям. (Анахарсис, III век до н. э.)
Dersu вне форума Ответить с цитированиемОтветить с цитированием  
26.05.2012, 18:11
Аватар для expforex
expforex Программиров
Регистрация: 11.01.2009 / Сообщений: 2,134
Поблагодарили 2,093 раз(а) / Репутация: 2151
теоретически уже создан кустомный вариант но он не оригинален в том плане что все же не все индюки туда можно подставить, Легче сделать шаблон и под него уже вставлять индюки. Это не сложно сама последняя процедура.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Советники на заказ! admin@expforex.com
Говорим Спасибо
expforex вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Dersu (26.05.2012)
27.05.2012, 06:22
Аватар для nilva
nilva Активный участник
Регистрация: 20.04.2011 / Сообщений: 87
Поблагодарили 57 раз(а) / Репутация: 58
Подскажите, пожалуйста, как получить в MQL номер ордера, после его открытия, для дальнейшего оперирования в коде.
В MarketInfo() - нет такой возможности.
Какие свойства ордера можно получить после его установки?
Где лучше всего хранить эту информацию в глобальных переменных или записывать в файл?
nilva вне форума Ответить с цитированиемОтветить с цитированием  
27.05.2012, 06:27
Аватар для expforex
expforex Программиров
Регистрация: 11.01.2009 / Сообщений: 2,134
Поблагодарили 2,093 раз(а) / Репутация: 2151
Если Вам необходимо помнить номера тикетов - то лучше записывать их в глоб переменные.
Функция отправки ордера на сервер OrderSend на выходе дает номер тикета, который был открыт.

Цитата:
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Основная функция, используемая для открытия позиции или установки отложенного ордера.
Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError().
Замечания.
Если Вы хотите искать среди открытых сделок свой ордер. то узнать его номер можно командой OrderTicket()

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Советники на заказ! admin@expforex.com
Говорим Спасибо
expforex вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
nilva (27.05.2012)
27.05.2012, 06:38
Аватар для nilva
nilva Активный участник
Регистрация: 20.04.2011 / Сообщений: 87
Поблагодарили 57 раз(а) / Репутация: 58
Имеется 30 ордеров.
Какими свойствами я могу их друг от друга отличать, кроме магического номера и комментария?
Дело в том, что каждый номер мне нужно идентифицировать (индивидуальное свойство для каждого ордера), для дальнейших операций.
nilva вне форума Ответить с цитированиемОтветить с цитированием  
27.05.2012, 07:13
Аватар для expforex
expforex Программиров
Регистрация: 11.01.2009 / Сообщений: 2,134
Поблагодарили 2,093 раз(а) / Репутация: 2151
Сообщение от nilva Посмотреть сообщение
Имеется 30 ордеров.
Какими свойствами я могу их друг от друга отличать, кроме магического номера и комментария?
Дело в том, что каждый номер мне нужно идентифицировать (индивидуальное свойство для каждого ордера), для дальнейших операций.
ну во первых перебираем все ордера:

например так:

Цитата:
void Перебор()
{
int i,k=OrdersTotal();
for(i=0;i<k;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{

OrderTicket() ; // - В данном случае здесь будет показывать тикет каждой позиции
Print(OrderTicket()) ; // -А здесь будет принтоваться в журнал

}
}
return(False);
}

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Советники на заказ! admin@expforex.com
Говорим Спасибо
expforex вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (27.05.2012), nilva (27.05.2012)
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 00:59. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO