Ответить
18.02.2013, 20:18
Аватар для AlexeyVik
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.
18.02.2013, 20:21
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Ещё вопрос. Этот цикл в пользовательской функции или в теле кода?
В пользовательской функции - сначала идёт void бла-бла-бла, потом цикл
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
18.02.2013, 20:29
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от: Алекc1234
В пользовательской функции - сначала идёт void бла-бла-бла, потом цикл
Тогда ищи причину в том, что вызываешь функцию не своевременно.
Раздели переменные профита по направлениям и вызывай функцию непосредственно перед условием закрытия ордеров.
18.02.2013, 20:32
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Тогда ищи причину в том, что вызываешь функцию не своевременно.
Раздели переменные профита по направлениям и вызывай функцию непосредственно перед условием закрытия ордеров.
Если можно, изобрази, пожалуйста, хотя бы примерно, как это выглядит в коде...
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
18.02.2013, 20:37
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Ты не знаешь как объявляются переменные на глобальном уровне? Просто вне всех функций, можно сразу под параметрами extern
А вызов функции можно поставить в самом начале функции старт. После объявления локальных переменных.
19.02.2013, 13:47
Аватар для Pivovarachkin
Pivovarachkin Pivovarachkin вне форума Новичок форума
Регистрация: 09.01.2013 / Сообщений: 3
Поблагодарили 20 раз(а) / Репутация: 21
Всем привет! Друзья кто поможет сделать робота, на основе одного индикатора с 2-мя периодами? я совсем ни бум бум в програмировании..
19.02.2013, 15:10
Аватар для cfifcfif
cfifcfif cfifcfif вне форума Элитный участник
Регистрация: 22.07.2011 / Адрес: краснодар / Сообщений: 1,403
Поблагодарили 1,425 раз(а) / Репутация: 1427
  • Отправить сообщение для cfifcfif с помощью Skype™
Ребят доброго вам здравия , у меня вопрос если заказать сову и хочетса что-бы ордера открывались быстренко как вы думайте быстрей ордера открыватса будут от тика или о начало 1 минуты ну или 5 вообщем надеюсь поняли очём я ?
19.02.2013, 16:41
Регистрация: 13.03.2009 / Сообщений: 2,325
Поблагодарили 1,945 раз(а) / Репутация: 2018
Ребят доброго вам здравия , у меня вопрос если заказать сову и хочетса что-бы ордера открывались быстренко как вы думайте быстрей ордера открыватса будут от тика или о начало 1 минуты ну или 5 вообщем надеюсь поняли очём я ?
Основной код советника выполняется с приходом тика. Даже если задать условие открыть с начала минуты. Условие сработает на первом тике от начала минуты.

Есть ещё такое мнение. Существует много систем которые работают по открытию бара. Получается что на сервер постоянно сыпятся приказы от трейдеров, скриптов и советников, а в первые тики от открытия бара к ним добавляются приказы советников работающих по открытию бара. От сюда, чисто теоретически, очередь приказов на сервере в начале бара больше чем в остальное время. Но это теория, а на практике лучше делать так как лучше для системы.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 19.02.2013 в 16:52.
19.02.2013, 16:41
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Тогда ищи причину в том, что вызываешь функцию не своевременно.
Раздели переменные профита по направлениям и вызывай функцию непосредственно перед условием закрытия ордеров.
Прошу прощения, есть ещё одно, что возможно важно - когда открывается рыночный ордер, то в рынке остаются ещё две стоповые отложки - байстоп и селлстоп. И тогда то расчёт на селл и производится неправильно. А вот стоило мне убрать их, как вроде всё правильно считается...
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
19.02.2013, 17:29
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от: Алекc1234
Прошу прощения, есть ещё одно, что возможно важно - когда открывается рыночный ордер, то в рынке остаются ещё две стоповые отложки - байстоп и селлстоп. И тогда то расчёт на селл и производится неправильно. А вот стоило мне убрать их, как вроде всё правильно считается...
Да-уж. Столько времени ты упирался в то что не работает код... а оказалось, что не работает алгоритм...
Что касается нескольких рыночных и отложенных ордеров так это такое поле для фантазий, что я даже боюсь начинать этот диалог.
Ну ты пойми, что тебе самому надо научиться ставить задачу и находить формулу её решения. Это не арифметика, где можно по подобию что-то решить.
Представь себе, у меня тоже нет однозначного решения любой задачи. Я каждый советник или индикатор пишу как новый. Обязательно что-то да будет не так как в предыдущих.
22.02.2013, 14:15
Аватар для vetallic
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();}
22.02.2013, 14:29
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
всем прет - чет не работает расчет от открытия дня...
подскажите в чем ошибка?

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

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

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

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

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

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

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


Опции темы

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

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



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


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