Ответить
05.05.2012, 07:23
Аватар для vetallic
vetallic vetallic вне форума Местный знаток
Регистрация: 31.08.2010 / Сообщений: 352
Поблагодарили 509 раз(а) / Репутация: 511
почему мелочь, думаю перенести алгоритм открытия ордеров будет достаточно
05.05.2012, 08:36
Аватар для реношник
реношник реношник вне форума Почётный гражданин
Регистрация: 18.11.2008 / Адрес: Украина Днепропетровская обл. vufx@rambler.ru == r25v6@rambler.ru / Сообщений: 700
Поблагодарили 355 раз(а) / Репутация: 354
  • Отправить сообщение для реношник с помощью Skype™
почему мелочь, думаю перенести алгоритм открытия ордеров будет достаточно
Если алгоритм использует нейро сети тогда согласен, всё остальное это пустая трата времени.
11.05.2012, 06:08
Аватар для nilva
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.
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.
Причем, если есть ордера в рынке то он их бы закрывал по условию работы советника.
Заранее благодарен!
для этого нужно знать условия советника, или хотябы имя функции которая выполняет закрытие...

3.
Доброго времени суток!
Помогите, пожалуйста, подправить участок кода:
Чтобы советник начинал торговать в понедельник с 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); 
11.05.2012, 07:08
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
Доброго времени суток!
Помогите, пожалуйста, подправить участок кода:
Чтобы советник начинал торговать в понедельник с 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);
//+----------------------------------------------+ 
Вот так.
11.05.2012, 07:21
Аватар для реношник
реношник реношник вне форума Почётный гражданин
Регистрация: 18.11.2008 / Адрес: Украина Днепропетровская обл. vufx@rambler.ru == r25v6@rambler.ru / Сообщений: 700
Поблагодарили 355 раз(а) / Репутация: 354
  • Отправить сообщение для реношник с помощью Skype™
Уберите эту строчку !!!!!!!!!!!!!!!!!!!

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

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
Каким условием это можно проверить?
while (!IsTradeAllowed()) Sleep(5000);
nilva 
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 eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от: реношник
Нет !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
В начале функции Start проверку IsTradeAllowed() ставить НЕЛЬЗЯ !!!!!!!!!!!!!!
Почему?
11.05.2012, 11:51
Аватар для реношник
реношник реношник вне форума Почётный гражданин
Регистрация: 18.11.2008 / Адрес: Украина Днепропетровская обл. vufx@rambler.ru == r25v6@rambler.ru / Сообщений: 700
Поблагодарили 355 раз(а) / Репутация: 354
  • Отправить сообщение для реношник с помощью Skype™
Почему?
Пытаться торговать можно только в том случае, если функция 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);
  } 
26.05.2012, 18:05
Аватар для Dersu
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 век до н. э.)
26.05.2012, 18:11
Аватар для expforex
expforex expforex вне форума Программиров
Регистрация: 11.01.2009 / Сообщений: 2,136
Поблагодарили 2,101 раз(а) / Репутация: 2159
теоретически уже создан кустомный вариант но он не оригинален в том плане что все же не все индюки туда можно подставить, Легче сделать шаблон и под него уже вставлять индюки. Это не сложно сама последняя процедура.
Советники на заказ! admin@expforex.com
Говорим Спасибо
Dersu 
27.05.2012, 06:22
Аватар для nilva
nilva nilva вне форума Активный участник
Регистрация: 20.04.2011 / Сообщений: 87
Поблагодарили 57 раз(а) / Репутация: 58
Подскажите, пожалуйста, как получить в MQL номер ордера, после его открытия, для дальнейшего оперирования в коде.
В MarketInfo() - нет такой возможности.
Какие свойства ордера можно получить после его установки?
Где лучше всего хранить эту информацию в глобальных переменных или записывать в файл?
27.05.2012, 06:27
Аватар для expforex
expforex expforex вне форума Программиров
Регистрация: 11.01.2009 / Сообщений: 2,136
Поблагодарили 2,101 раз(а) / Репутация: 2159
Если Вам необходимо помнить номера тикетов - то лучше записывать их в глоб переменные.
Функция отправки ордера на сервер 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
Говорим Спасибо
nilva 
27.05.2012, 06:38
Аватар для nilva
nilva nilva вне форума Активный участник
Регистрация: 20.04.2011 / Сообщений: 87
Поблагодарили 57 раз(а) / Репутация: 58
Имеется 30 ордеров.
Какими свойствами я могу их друг от друга отличать, кроме магического номера и комментария?
Дело в том, что каждый номер мне нужно идентифицировать (индивидуальное свойство для каждого ордера), для дальнейших операций.
27.05.2012, 07:13
Аватар для expforex
expforex expforex вне форума Программиров
Регистрация: 11.01.2009 / Сообщений: 2,136
Поблагодарили 2,101 раз(а) / Репутация: 2159
Имеется 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
Говорим Спасибо
Ответить

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


Опции темы

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

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



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


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