Ответ
 
Опции темы
Старый 05.05.2012, 07:23   #241 (permalink)
Местный знаток
 
Аватар для vetallic
 
Регистрация: 31.08.2010
Сообщений: 352
Репутация: 511
vetallic - vetallic - vetallic - vetallic - vetallic - vetallic -
Сказал(а) спасибо: 87
Поблагодарили 509 раз(а) в 104 сообщениях
Поинты: 96
почему мелочь, думаю перенести алгоритм открытия ордеров будет достаточно
vetallic вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.05.2012, 08:36   #242 (permalink)
Почётный гражданин
 
Аватар для реношник
 
Регистрация: 18.11.2008
Адрес: Украина Днепропетровская обл. vufx@rambler.ru == r25v6@rambler.ru
Сообщений: 700
Репутация: 354
реношник - реношник - реношник - реношник -
Сказал(а) спасибо: 26
Поблагодарили 355 раз(а) в 209 сообщениях
Поинты: 2
Отправить сообщение для реношник с помощью Skype™
Сообщение от vetallic Посмотреть сообщение
почему мелочь, думаю перенести алгоритм открытия ордеров будет достаточно
Если алгоритм использует нейро сети тогда согласен, всё остальное это пустая трата времени.
реношник вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.05.2012, 06:08   #243 (permalink)
Активный участник
 
Аватар для nilva
 
Регистрация: 20.04.2011
Сообщений: 87
Репутация: 58
nilva
Сказал(а) спасибо: 197
Поблагодарили 57 раз(а) в 34 сообщениях
Поинты: 0
Доброго времени суток!
Помогите, пожалуйста, подправить участок кода:
Чтобы советник начинал торговать в понедельник с 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   #244 (permalink)
Почётный гражданин
 
Аватар для реношник
 
Регистрация: 18.11.2008
Адрес: Украина Днепропетровская обл. vufx@rambler.ru == r25v6@rambler.ru
Сообщений: 700
Репутация: 354
реношник - реношник - реношник - реношник -
Сказал(а) спасибо: 26
Поблагодарили 355 раз(а) в 209 сообщениях
Поинты: 2
Отправить сообщение для реношник с помощью 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   #245 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для 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   #246 (permalink)
Почётный гражданин
 
Аватар для реношник
 
Регистрация: 18.11.2008
Адрес: Украина Днепропетровская обл. vufx@rambler.ru == r25v6@rambler.ru
Сообщений: 700
Репутация: 354
реношник - реношник - реношник - реношник -
Сказал(а) спасибо: 26
Поблагодарили 355 раз(а) в 209 сообщениях
Поинты: 2
Отправить сообщение для реношник с помощью Skype™
Уберите эту строчку !!!!!!!!!!!!!!!!!!!

PHP код:
//+----------------------------------------------+
//| Проверка на разрешение торговать
//+----------------------------------------------+   
   
if (!IsTradeAllowed()) return (0); 
реношник вне форума   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (11.05.2012), nilva (11.05.2012)
Старый 11.05.2012, 07:52   #247 (permalink)
Активный участник
 
Аватар для nilva
 
Регистрация: 20.04.2011
Сообщений: 87
Репутация: 58
nilva
Сказал(а) спасибо: 197
Поблагодарили 57 раз(а) в 34 сообщениях
Поинты: 0
Сообщение от реношник Посмотреть сообщение
Уберите эту строчку !!!!!!!!!!!!!!!!!!!
PHP код:
int start() {
//+----------------------------------------------+
//| Проверка на разрешение торговать
//+----------------------------------------------+   
   
if (!IsTradeAllowed()) return (0); 
Каким условием это можно проверить?
nilva вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.05.2012, 08:01   #248 (permalink)
Активный участник
 
Аватар для nilva
 
Регистрация: 20.04.2011
Сообщений: 87
Репутация: 58
nilva
Сказал(а) спасибо: 197
Поблагодарили 57 раз(а) в 34 сообщениях
Поинты: 0
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   #249 (permalink)
Почётный гражданин
 
Аватар для реношник
 
Регистрация: 18.11.2008
Адрес: Украина Днепропетровская обл. vufx@rambler.ru == r25v6@rambler.ru
Сообщений: 700
Репутация: 354
реношник - реношник - реношник - реношник -
Сказал(а) спасибо: 26
Поблагодарили 355 раз(а) в 209 сообщениях
Поинты: 2
Отправить сообщение для реношник с помощью Skype™
Сообщение от nilva Посмотреть сообщение
Каким условием это можно проверить?
Просто тут этой проверке НЕ место !!!! Это может только ухудшить работу программы....
реношник вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (11.05.2012)
Старый 11.05.2012, 08:46   #250 (permalink)
Почётный гражданин
 
Аватар для реношник
 
Регистрация: 18.11.2008
Адрес: Украина Днепропетровская обл. vufx@rambler.ru == r25v6@rambler.ru
Сообщений: 700
Репутация: 354
реношник - реношник - реношник - реношник -
Сказал(а) спасибо: 26
Поблагодарили 355 раз(а) в 209 сообщениях
Поинты: 2
Отправить сообщение для реношник с помощью 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   #251 (permalink)
Заблокирован
За второе место в конкурсе 

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

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от реношник Посмотреть сообщение
Нет !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
В начале функции Start проверку IsTradeAllowed() ставить НЕЛЬЗЯ !!!!!!!!!!!!!!
Почему?
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.05.2012, 11:51   #254 (permalink)
Почётный гражданин
 
Аватар для реношник
 
Регистрация: 18.11.2008
Адрес: Украина Днепропетровская обл. vufx@rambler.ru == r25v6@rambler.ru
Сообщений: 700
Репутация: 354
реношник - реношник - реношник - реношник -
Сказал(а) спасибо: 26
Поблагодарили 355 раз(а) в 209 сообщениях
Поинты: 2
Отправить сообщение для реношник с помощью 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   #255 (permalink)
Почётный гражданин
 
Аватар для Dersu
 
Регистрация: 08.11.2010
Сообщений: 279
Репутация: 445
Dersu - Dersu - Dersu - Dersu - Dersu -
Сказал(а) спасибо: 71
Поблагодарили 443 раз(а) в 94 сообщениях
Поинты: 54
Отправить сообщение для 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   #256 (permalink)
Программиров
 
Аватар для expforex
 
Регистрация: 11.01.2009
Сообщений: 2,134
Репутация: 2147
expforex expforex expforex expforex expforex expforex expforex expforex expforex expforex expforex
Сказал(а) спасибо: 136
Поблагодарили 2,089 раз(а) в 733 сообщениях
Поинты: 267
теоретически уже создан кустомный вариант но он не оригинален в том плане что все же не все индюки туда можно подставить, Легче сделать шаблон и под него уже вставлять индюки. Это не сложно сама последняя процедура.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Советники на заказ! admin@expforex.com
Говорим Спасибо
expforex вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Dersu (26.05.2012)
Старый 27.05.2012, 06:22   #257 (permalink)
Активный участник
 
Аватар для nilva
 
Регистрация: 20.04.2011
Сообщений: 87
Репутация: 58
nilva
Сказал(а) спасибо: 197
Поблагодарили 57 раз(а) в 34 сообщениях
Поинты: 0
Подскажите, пожалуйста, как получить в MQL номер ордера, после его открытия, для дальнейшего оперирования в коде.
В MarketInfo() - нет такой возможности.
Какие свойства ордера можно получить после его установки?
Где лучше всего хранить эту информацию в глобальных переменных или записывать в файл?
nilva вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 27.05.2012, 06:27   #258 (permalink)
Программиров
 
Аватар для expforex
 
Регистрация: 11.01.2009
Сообщений: 2,134
Репутация: 2147
expforex expforex expforex expforex expforex expforex expforex expforex expforex expforex expforex
Сказал(а) спасибо: 136
Поблагодарили 2,089 раз(а) в 733 сообщениях
Поинты: 267
Если Вам необходимо помнить номера тикетов - то лучше записывать их в глоб переменные.
Функция отправки ордера на сервер 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   #259 (permalink)
Активный участник
 
Аватар для nilva
 
Регистрация: 20.04.2011
Сообщений: 87
Репутация: 58
nilva
Сказал(а) спасибо: 197
Поблагодарили 57 раз(а) в 34 сообщениях
Поинты: 0
Имеется 30 ордеров.
Какими свойствами я могу их друг от друга отличать, кроме магического номера и комментария?
Дело в том, что каждый номер мне нужно идентифицировать (индивидуальное свойство для каждого ордера), для дальнейших операций.
nilva вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 27.05.2012, 07:13   #260 (permalink)
Программиров
 
Аватар для expforex
 
Регистрация: 11.01.2009
Сообщений: 2,134
Репутация: 2147
expforex expforex expforex expforex expforex expforex expforex expforex expforex expforex expforex
Сказал(а) спасибо: 136
Поблагодарили 2,089 раз(а) в 733 сообщениях
Поинты: 267
Сообщение от 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 Выкл.



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


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