Ответ
 
Опции темы
18.02.2013, 20:18
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от Алекc1234 Посмотреть сообщение
Такое у меня бывает, но редко, а я это не учитываю - вижу только тогда ошибку когда открыто одно направление - или только бай или только селл...Вернее, на бай ошибки то и нету, только на селл...
Вот моя функция опрелделения профита
Код:
void ProfitOrders()
{
      int Total = OrdersTotal();
      ProfitBuy = 0; ProfitSel = 0;//Объявлены не глобальном уровне
      for(int i = 0; i < Total; i++)
       {
        if(OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         {
          if(OrderType() == OP_BUY) ProfitBuy = ProfitBuy+OrderProfit()+OrderSwap()+OrderCommission();
          if(OrderType() == OP_SELL) ProfitSel = ProfitSel+OrderProfit()+OrderSwap()+OrderCommission();
         }
       }
}//******************************************************************|
Всё работает без ошибок. Отличается от твоей только тем, что профит считается в валюте депозита и по всем ордерам одного направления вместе.

Последний раз редактировалось AlexeyVik; 18.02.2013 в 20:24.
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (19.02.2013), Алекc1234 (19.02.2013)
18.02.2013, 20:21
Аватар для Алекc1234
Алекc1234 Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Сообщение от AlexeyVik Посмотреть сообщение
Ещё вопрос. Этот цикл в пользовательской функции или в теле кода?
В пользовательской функции - сначала идёт void бла-бла-бла, потом цикл

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
Алекc1234 на форуме Ответить с цитированиемОтветить с цитированием  
18.02.2013, 20:29
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от Алекc1234 Посмотреть сообщение
В пользовательской функции - сначала идёт void бла-бла-бла, потом цикл
Тогда ищи причину в том, что вызываешь функцию не своевременно.
Раздели переменные профита по направлениям и вызывай функцию непосредственно перед условием закрытия ордеров.
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (19.02.2013), Алекc1234 (18.02.2013)
18.02.2013, 20:32
Аватар для Алекc1234
Алекc1234 Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Сообщение от AlexeyVik Посмотреть сообщение
Тогда ищи причину в том, что вызываешь функцию не своевременно.
Раздели переменные профита по направлениям и вызывай функцию непосредственно перед условием закрытия ордеров.
Если можно, изобрази, пожалуйста, хотя бы примерно, как это выглядит в коде...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
Алекc1234 на форуме Ответить с цитированиемОтветить с цитированием  
18.02.2013, 20:37
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Ты не знаешь как объявляются переменные на глобальном уровне? Просто вне всех функций, можно сразу под параметрами extern
А вызов функции можно поставить в самом начале функции старт. После объявления локальных переменных.
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (19.02.2013), Алекc1234 (18.02.2013)
19.02.2013, 13:47
Аватар для Pivovarachkin
Pivovarachkin Новичок форума
Регистрация: 09.01.2013 / Сообщений: 3
Поблагодарили 20 раз(а) / Репутация: 21
Всем привет! Друзья кто поможет сделать робота, на основе одного индикатора с 2-мя периодами? я совсем ни бум бум в програмировании..
Pivovarachkin вне форума Ответить с цитированиемОтветить с цитированием  
19.02.2013, 15:10
Аватар для cfifcfif
cfifcfif Элитный участник
Регистрация: 22.07.2011 / Адрес: краснодар / Сообщений: 1,403
Поблагодарили 1,423 раз(а) / Репутация: 1425
  • Отправить сообщение для cfifcfif с помощью Skype™
Ребят доброго вам здравия , у меня вопрос если заказать сову и хочетса что-бы ордера открывались быстренко как вы думайте быстрей ордера открыватса будут от тика или о начало 1 минуты ну или 5 вообщем надеюсь поняли очём я ?

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
cfifcfif вне форума Ответить с цитированиемОтветить с цитированием  
19.02.2013, 16:41
Регистрация: 13.03.2009 / Сообщений: 2,324
Поблагодарили 1,945 раз(а) / Репутация: 2018
Сообщение от cfifcfif Посмотреть сообщение
Ребят доброго вам здравия , у меня вопрос если заказать сову и хочетса что-бы ордера открывались быстренко как вы думайте быстрей ордера открыватса будут от тика или о начало 1 минуты ну или 5 вообщем надеюсь поняли очём я ?
Основной код советника выполняется с приходом тика. Даже если задать условие открыть с начала минуты. Условие сработает на первом тике от начала минуты.

Есть ещё такое мнение. Существует много систем которые работают по открытию бара. Получается что на сервер постоянно сыпятся приказы от трейдеров, скриптов и советников, а в первые тики от открытия бара к ним добавляются приказы советников работающих по открытию бара. От сюда, чисто теоретически, очередь приказов на сервере в начале бара больше чем в остальное время. Но это теория, а на практике лучше делать так как лучше для системы.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 19.02.2013 в 16:52.
Ugar на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
cfifcfif (19.02.2013)
19.02.2013, 16:41
Аватар для Алекc1234
Алекc1234 Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Сообщение от AlexeyVik Посмотреть сообщение
Тогда ищи причину в том, что вызываешь функцию не своевременно.
Раздели переменные профита по направлениям и вызывай функцию непосредственно перед условием закрытия ордеров.
Прошу прощения, есть ещё одно, что возможно важно - когда открывается рыночный ордер, то в рынке остаются ещё две стоповые отложки - байстоп и селлстоп. И тогда то расчёт на селл и производится неправильно. А вот стоило мне убрать их, как вроде всё правильно считается...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
Алекc1234 на форуме Ответить с цитированиемОтветить с цитированием  
19.02.2013, 17:29
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от Алекc1234 Посмотреть сообщение
Прошу прощения, есть ещё одно, что возможно важно - когда открывается рыночный ордер, то в рынке остаются ещё две стоповые отложки - байстоп и селлстоп. И тогда то расчёт на селл и производится неправильно. А вот стоило мне убрать их, как вроде всё правильно считается...
Да-уж. Столько времени ты упирался в то что не работает код... а оказалось, что не работает алгоритм...
Что касается нескольких рыночных и отложенных ордеров так это такое поле для фантазий, что я даже боюсь начинать этот диалог.
Ну ты пойми, что тебе самому надо научиться ставить задачу и находить формулу её решения. Это не арифметика, где можно по подобию что-то решить.
Представь себе, у меня тоже нет однозначного решения любой задачи. Я каждый советник или индикатор пишу как новый. Обязательно что-то да будет не так как в предыдущих.
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Алекc1234 (19.02.2013)
22.02.2013, 14:15
Аватар для vetallic
vetallic Местный знаток
Регистрация: 31.08.2010 / Сообщений: 352
Поблагодарили 509 раз(а) / Репутация: 511
всем прет - чет не работает расчет от открытия дня...
подскажите в чем ошибка?

double priceOpen = iOpen(Symbol(),1440,0);
double price1 = NormalizeDouble(priceOpen+30*Point,Digits);
double price2 = NormalizeDouble(priceOpen-30*Point,Digits);

if (Bid > price1) {BuyOrder();}
vetallic вне форума Ответить с цитированиемОтветить с цитированием  
22.02.2013, 14:29
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от vetallic Посмотреть сообщение
всем прет - чет не работает расчет от открытия дня...
подскажите в чем ошибка?

double priceOpen = iOpen(Symbol(),1440,0);
double price1 = NormalizeDouble(priceOpen+30*Point,Digits);
double price2 = NormalizeDouble(priceOpen-30*Point,Digits);

if (Bid > price1) {BuyOrder();}
Я так полагаю, что это пользовательская функция...
А не в ней-ли проблема???
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
22.02.2013, 14:33
Аватар для vetallic
vetallic Местный знаток
Регистрация: 31.08.2010 / Сообщений: 352
Поблагодарили 509 раз(а) / Репутация: 511
все разобрался, тупанул маленько, в другом месте лишний код был...
vetallic вне форума Ответить с цитированиемОтветить с цитированием  
23.02.2013, 16:48
Аватар для aufx
aufx Интересующийся
Регистрация: 16.11.2012 / Сообщений: 26
Поблагодарили 2 раз(а) / Репутация: 3
Коллеги! Вот этот системный дескриптор окна какая нибудь функция использует?
Или он сам для себя существует.

int WindowHandle( string symbol, int timeframe)
Возвращает системный дескриптор окна (window handle), содержащего указанный график. Если график с symbol и timeframe на момент вызова функции не открыт, то возвращается 0.
aufx вне форума Ответить с цитированиемОтветить с цитированием  
23.02.2013, 17:31
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от aufx Посмотреть сообщение
Коллеги! Вот этот системный дескриптор окна какая нибудь функция использует?
Или он сам для себя существует.

int WindowHandle( string symbol, int timeframe)
Возвращает системный дескриптор окна (window handle), содержащего указанный график. Если график с symbol и timeframe на момент вызова функции не открыт, то возвращается 0.
А WindowExpertName() ты где-нибудь используешь?
Так-же и WindowHandle() можно использовать для проверки.
И ещё используется в не документированных функциях. Таких как изменить ТФ графика, удалить с графика советник... Даже есть возможность закрыть окно графика и кажется весь терминал.
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
23.02.2013, 17:34
Регистрация: 13.03.2009 / Сообщений: 2,324
Поблагодарили 1,945 раз(а) / Репутация: 2018
Сообщение от aufx Посмотреть сообщение
Коллеги! Вот этот системный дескриптор окна какая нибудь функция использует?
Или он сам для себя существует.

int WindowHandle( string symbol, int timeframe)
Возвращает системный дескриптор окна (window handle), содержащего указанный график. Если график с symbol и timeframe на момент вызова функции не открыт, то возвращается 0.
Странный вопрос. Все функции могут использоваться в пользовательской или специальной функции, в том числе и эта.
Если пока не доходит как её использовать, то можно не использовать. Но в один прекрасный момент, может всплыть задача, в решении которой эта функция окажется самой подходящей.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Sergey Kovalyov (23.02.2013)
23.02.2013, 18:00
Аватар для aufx
aufx Интересующийся
Регистрация: 16.11.2012 / Сообщений: 26
Поблагодарили 2 раз(а) / Репутация: 3
Сообщение от AlexeyVik Посмотреть сообщение
А WindowExpertName() ты где-нибудь используешь?
Так-же и WindowHandle() можно использовать для проверки.
И ещё используется в не документированных функциях. Таких как изменить ТФ графика, удалить с графика советник... Даже есть возможность закрыть окно графика и кажется весь терминал.
"Не документируемые функции" ? Можно поподробнее?
aufx вне форума Ответить с цитированиемОтветить с цитированием  
23.02.2013, 18:18
Аватар для aufx
aufx Интересующийся
Регистрация: 16.11.2012 / Сообщений: 26
Поблагодарили 2 раз(а) / Репутация: 3
Сообщение от Ugar Посмотреть сообщение
Странный вопрос. Все функции могут использоваться в пользовательской или специальной функции, в том числе и эта.
Если пока не доходит как её использовать, то можно не использовать. Но в один прекрасный момент, может всплыть задача, в решении которой эта функция окажется самой подходящей.
Наверное я не корректно задал вопрос.
Извиняюсь за наивность, но спрошу по другому.
Кроме как для определения открыто ли окно инструмента,для чего еще нужен этот "системный дескриптор"? Для чего-то он определяется.
aufx вне форума Ответить с цитированиемОтветить с цитированием  
23.02.2013, 18:29
Аватар для qqmber
qqmber Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Сообщение от aufx Посмотреть сообщение
Наверное я не корректно задал вопрос.
Извиняюсь за наивность, но спрошу по другому.
Кроме как для определения открыто ли окно инструмента,для чего еще нужен этот "системный дескриптор"? Для чего-то он определяется.
Посмотрите файл include\WinUser32.mqh Там описаны функции вызова WinAPI из user32.dll, и почти все из них принимают дескриптор как аргумент.
qqmber вне форума Ответить с цитированиемОтветить с цитированием  
23.02.2013, 18:40
Регистрация: 13.03.2009 / Сообщений: 2,324
Поблагодарили 1,945 раз(а) / Репутация: 2018
Сообщение от aufx Посмотреть сообщение
Наверное я не корректно задал вопрос.
Извиняюсь за наивность, но спрошу по другому.
Кроме как для определения открыто ли окно инструмента,для чего еще нужен этот "системный дескриптор"? Для чего-то он определяется.
1 Пример:
Допустим нужно что бы советник отличал свои ордера от чужих. Для этого используют Magic. А если нужно что бы после перезапуска терминала советник забыл свои старые ордера. В качестве magic можно использовать дескриптор окна. Маджики у все советников будут разными потому что дескрипторы разные. И при перезапуске советники забудут свои старые ордера, так как после перезапуска дескрипторы будут другими.
2 пример:
Допустим советник, при запуске терминала сильно тормозит. Или по другой причине, нужно что бы советники запускались не одновременно.
На первом тике после запуска ставим Sleep. Время задержки задаём рандомом. Но рандом генерит псевдо случайность. По этому у всех советников будут одинаковые значения. А вот если предварительно рандом генераторы инициализировать дескриптором окна, то в результате у всех советников будет выдержана разная пауза.
Если подумать можно придумать много примеров. Только зачем? Лучше действовать наоборот. Для решения задач искать подходящий инструментарий, вместо того что бы искать задачи по инструментарий.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 23.02.2013 в 18:52.
Ugar на форуме Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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