Ответить
06.04.2013, 12:27
Регистрация: 05.01.2012 / Сообщений: 1,149
Поблагодарили 7,800 раз(а) / Репутация: 7844
Приветствую.
Есть индикатор X, обновляется только при смене таймфрейма или при перезапуске терминала.
Подскажите, что нужно вставить, чтобы обновлялся (перестраивался) в необходимое время терминала, скажем 00:00?
То есть не каждый бар/тик, а только в назначенное время.
#include <WinUser32.mqh> в шапку индикатора

Попробуйте такую функцию пропишите после функции работы по времени.
PHP код:
  int hwnd =WindowHandle(Symbol(),Period());
     if(
hwnd != && (time==|| TimeCurrent()-time>10)) 
       { 
         
PostMessageA(hwndWM_COMMAND333240); 
         
time=TimeCurrent();
       } 
07.04.2013, 14:17
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Сообщение от: Алекc1234
Никто не ответил. Видать, слишком сложно написать такое...
Да. Это очень сложно понять, что ты хочешь спросить....
07.04.2013, 14:26
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
Сообщение от: Алекc1234
Начало и конец мне ясны if(OrderClose() > 0 && OrderProfit() > 0) вот тут нужно вписать - после этого - и дальше тоже понятно if(OrderClose() > 0 && OrderProfit() < 0)
Видимо это понятно только тебе. Почитай здесь.
_http://docs.mql4.com/ru/trading/OrderClose
_http://docs.mql4.com/ru/trading/OrderProfit
Может и тебе будет НЕпонятно.

Последний раз редактировалось NSerega; 07.04.2013 в 16:29.
07.04.2013, 19:28
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Видимо это понятно только тебе. Почитай здесь.
_http://docs.mql4.com/ru/trading/OrderClose
_http://docs.mql4.com/ru/trading/OrderProfit
Может и тебе будет НЕпонятно.
Ой-ой-ой я дико извиняюсь - не OrderClose(), а OrderCloseTime() > 0. Что-то я совсем туплю и ввожу в заблуждение. То есть if(OrderCloseTime() > 0 && OrderProfit() > 0) вот тут нужно вписать - после этого - и дальше if(OrderCloseTime() > 0 && OrderProfit() < 0)
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
07.04.2013, 20:04
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Напишу простыми словами. Ордер закрылся в плюсе - после него(следующий) ордер закрылся в минусе - и выполнение. Как сделать, чтобы обозначить этот следующий ордер?
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе

Последний раз редактировалось Алекc1234; 07.04.2013 в 20:08.
07.04.2013, 21:10
Аватар для alexshell
alexshell alexshell на форуме Элитный участник
Регистрация: 29.10.2010 / Сообщений: 681
Поблагодарили 1,686 раз(а) / Репутация: 1688
Сообщение от: Алекc1234
Напишу простыми словами. Ордер закрылся в плюсе - после него(следующий) ордер закрылся в минусе - и выполнение. Как сделать, чтобы обозначить этот следующий ордер?
Организуй цикл выбор по истор. ордерам выбираешь последний закрытый ордер. Если он в плюсе,то присваевай допустим переменной bool типа Условие=false.Если минусовой то =true. Пока ордера плюсовые оно равно false. Как только появиться минусовой дальше после цикла будет
If(Условие==true) выполнить то то. Определять булевую переменную нужно до старта. Короче не всё так однозначно словами писать запарился. Завтра вечером с работы прийду если у тебя ничего не получится напишу этот цикл.
07.04.2013, 21:13
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Организуй цикл выбор по истор. ордерам выбираешь последний закрытый ордер. Если он в плюсе,то присваевай допустим переменной bool типа Условие=false.Если минусовой то =true. Пока ордера плюсовые оно равно false. Как только появиться минусовой дальше после цикла будет
If(Условие==true) выполнить то то. Определять булевую переменную нужно до старта. Короче не всё так однозначно словами писать запарился. Завтра вечером с работы прийду если у тебя ничего не получится напишу этот цикл.
Спасибо, я точно сам не смогу написать, так что буду ждать тебя.
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
08.04.2013, 09:24
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Сообщение от: Алекc1234
Спасибо, я точно сам не смогу написать, так что буду ждать тебя.
Как я понял, тебе нужно открывать позу, если последняя поза закрылась с убытком?

Тогда вот я накидал на скорую руки:
PHP код:
//+-------------------------------------------------------------------------------------+
//| Определяем тип последней закрытой позы                                              |
//+-------------------------------------------------------------------------------------+
bool IsItProfitPos()
{
   
int total OrdersTotal()-1;
   
double lastCloseProfit;
   
   for (
int i totali>=0i--)
   {
      if (
OrderSelect(iSELECT_BY_POS,MODE_HISTORY))
      {
         
lastCloseProfit OrderProfit();
         
         if (
lastCloseProfit OrderProfit())
             
lastCloseProfit OrderProfit();
      }
   }

   if (
lastCloseProfit 0)
       return(
true);


Чтоб открыть позу, проверяем тип позы, если поза в лосе, значит открываем новую позу:
PHP код:
if (!IsItProfitPos())
    
ОТКРЫВАЕМ ПОЗУ.... 
08.04.2013, 09:35
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Как я понял, тебе нужно открывать позу, если последняя поза закрылась с убытком?

Тогда вот я накидал на скорую руки:
PHP код:
//+-------------------------------------------------------------------------------------+
//| Определяем тип последней закрытой позы                                              |
//+-------------------------------------------------------------------------------------+
bool IsItProfitPos()
{
   
int total OrdersTotal()-1;
   
double lastCloseProfit;
   
   for (
int i totali>=0i--)
   {
      if (
OrderSelect(iSELECT_BY_POS,MODE_HISTORY))
      {
         
lastCloseProfit OrderProfit();
         
         if (
lastCloseProfit OrderProfit())
             
lastCloseProfit OrderProfit();
      }
   }

   if (
lastCloseProfit 0)
       return(
true);


Чтоб открыть позу, проверяем тип позы, если поза в лосе, значит открываем новую позу:
PHP код:
if (!IsItProfitPos())
    
ОТКРЫВАЕМ ПОЗУ.... 
Спасибо большое, только мне надо, чтобы если поза закрылась с прибылью и после этого следующая поза закрылась с убытком, то ....(здесь уже моё выполнение)
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
08.04.2013, 09:57
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Прошлое сообщение когда я писал, думал не о том. Вот так правильно:
PHP код:
//+-------------------------------------------------------------------------------------+
//| Определяем тип последней закрытой позы                                              |
//+-------------------------------------------------------------------------------------+
bool IsItProfitPos()
{
   
int total OrdersTotal()-1;
   
double lastCloseProfit;
   
datetime lastClosePosTime;
   
   for (
int i totali>=0i--)
   {
      if (
OrderSelect(iSELECT_BY_POS,MODE_HISTORY))
      {
         
lastCloseProfit OrderCloseTime();

         if (
lastClosePosTime OrderCloseTime())
         {
             
lastClosePosTime OrderCloseTime();
             
lastCloseProfit OrderProfit();
         }
      }
   }

   if (
lastCloseProfit 0)
       return(
true);


Последний раз редактировалось hoz; 08.04.2013 в 09:59.
08.04.2013, 09:58
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Сообщение от: Алекc1234
Спасибо большое, только мне надо, чтобы если поза закрылась с прибылью и после этого следующая поза закрылась с убытком, то ....(здесь уже моё выполнение)
Как я понимаю, тут всё так же. Находит профит для заданного ордера через выборку.

PHP код:
if (OrderSelect(iSELECT_BY_POS,MODE_HISTORY)) 

Тут если ордер предпоследний то:
PHP код:
OrdersTotal()-2

А если последний то:

PHP код:
OrdersTotal()-1

Последний раз редактировалось hoz; 08.04.2013 в 10:07.
08.04.2013, 10:39
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 697
Поблагодарили 276 раз(а) / Репутация: 276
Прошлое сообщение когда я писал, думал не о том. Вот так правильно:

Скрытый текст

PHP код:
//+-------------------------------------------------------------------------------------+
//| Определяем тип последней закрытой позы                                              |
//+-------------------------------------------------------------------------------------+
bool IsItProfitPos()
{
   
int total OrdersTotal()-1;
   
double lastCloseProfit;
   
datetime lastClosePosTime;
   
   for (
int i totali>=0i--)
   {
      if (
OrderSelect(iSELECT_BY_POS,MODE_HISTORY))
      {
         
lastCloseProfit OrderCloseTime();

         if (
lastClosePosTime OrderCloseTime())
         {
             
lastClosePosTime OrderCloseTime();
             
lastCloseProfit OrderProfit();
         }
      }
   }

   if (
lastCloseProfit 0)
       return(
true);

[свернуть]
А разве правильно, что lastCloseProfit = OrderCloseTime(); и тут же lastCloseProfit = OrderProfit(); ?
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе

Последний раз редактировалось NSerega; 09.04.2013 в 00:11.
08.04.2013, 17:17
Аватар для alexshell
alexshell alexshell на форуме Элитный участник
Регистрация: 29.10.2010 / Сообщений: 681
Поблагодарили 1,686 раз(а) / Репутация: 1688
Сообщение от: Алекc1234
Спасибо, я точно сам не смогу написать, так что буду ждать тебя.
Ну как то так.

Скрытый текст

PHP код:
 //========================================================================   
 
bool Uslovie=false// Вынести за старт
 
bool Uslovie1=false// Вынести за старт
 
 
    
int  Times=0;double profit;
    for( 
int y=0;y<OrdersHistoryTotal();y++) //   
   

     if(
OrderSelect(y,SELECT_BY_POS,MODE_HISTORY)) 
       if(
OrderSymbol()==Symbol()&&OrderMagicNumber( ) ==magik )
         if (
OrderType()<2&&OrderCloseTime( ) > Times)
         { 
          
Times==OrderCloseTime( );
          
profitOrderProfit( )+OrderSwap()+OrderCommission( ) ;
         } 
   } 
   if (
profit>0)Uslovie1=true;
   
    if (
Uslovie1==true&&profit<0)
    {
    
Uslovie=true;
    
Uslovie1=false;
    }
    
      if (
Uslovie==true)
      {
     
// нужное действие;
      
Print("команда");
      
Uslovie=false;
      }
      
   
//======================================================================== 
[свернуть]

Print после отладки можно убрать.
09.04.2013, 23:37
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Сообщение от: Алекc1234
А разве правильно, что lastCloseProfit = OrderCloseTime(); и тут же lastCloseProfit = OrderProfit(); ?

Нет. Вот так:

PHP код:
lastClosePosTime OrderCloseTime(); 

Мы же ордера по времени отбираем. У самого просто своих головняков много, вот и..
09.04.2013, 23:53
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
alexshell, зачем ты ордера по типу отбираешь в строке?

PHP код:
 if (OrderType()<2&&OrderCloseTime( ) > Times

Это лишняя операция. Отложенник в истории же не будет иметь профит или лося никак. Значит нет нужды фильтровать..
И со временем так же. Если мы перебираем ордера в истории, то время закрытия будет точно больше нуля. Значит и это выражение в выше указанной строке лишнее:

PHP код:
OrderCloseTime( ) > Times 

Я не утверждаю, но можно обсудить этот момент. Так как бросился в глаза сразу...

Последний раз редактировалось hoz; 09.04.2013 в 23:56.
10.04.2013, 08:40
Аватар для alexshell
alexshell alexshell на форуме Элитный участник
Регистрация: 29.10.2010 / Сообщений: 681
Поблагодарили 1,686 раз(а) / Репутация: 1688
alexshell, зачем ты ордера по типу отбираешь в строке?

PHP код:
 if (OrderType()<2&&OrderCloseTime( ) > Times

Это лишняя операция. Отложенник в истории же не будет иметь профит или лося никак. Значит нет нужды фильтровать..
И со временем так же. Если мы перебираем ордера в истории, то время закрытия будет точно больше нуля. Значит и это выражение в выше указанной строке лишнее:

PHP код:
OrderCloseTime( ) > Times 

Я не утверждаю, но можно обсудить этот момент. Так как бросился в глаза сразу...
Отложка естественно не будет иметь лося или профит. Поэтому и задано в условиях что отложки пропускаем и не делаем лишних вычислений.Со временем там мы сравниваем с нулём только один раз на первом ордере.Потом время меняется на время ордера и уже следующий ордер сравнивается с этим временем.Вообще можно Times=0; тоже вынести за старт. Тогда у нас в программе всегда будет присутсвовать время последнего закрытого ордера. И в цикле будем сравнивать с этим временем.Соответственно вычислений будет меньше.
10.04.2013, 08:58
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,032 раз(а) / Репутация: 9032
  • Отправить сообщение для eevviill с помощью Skype™
Отложка естественно не будет иметь лося или профит. Поэтому и задано в условиях что отложки пропускаем и не делаем лишних вычислений.Со временем там мы сравниваем с нулём только один раз на первом ордере.Потом время меняется на время ордера и уже следующий ордер сравнивается с этим временем.Вообще можно Times=0; тоже вынести за старт. Тогда у нас в программе всегда будет присутсвовать время последнего закрытого ордера. И в цикле будем сравнивать с этим временем.Соответственно вычислений будет меньше.
А ещё проще задом на перёд перебрать. Я уже говорил номер в переборе соответсвует времени открытия(порядку).
10.04.2013, 09:01
Аватар для expforex
expforex expforex вне форума Программиров
Регистрация: 11.01.2009 / Сообщений: 2,136
Поблагодарили 2,103 раз(а) / Репутация: 2161
А ещё проще задом на перёд перебрать. Я уже говорил номер в переборе соответсвует времени открытия(порядку).
к сожалению нет,
смотря как список выстроен в мт, по какому полю сортировка, сталкивался с этим года два назад, попался на этом, тоже так думал, с тех пор если надо найти последний ордер делаю функцией перебора и проблем нет.

Может быть МТ что-то уже нахимичили переправили. Но года два назад - номер не соответствует последней сделке.

Советники на заказ! admin@expforex.com
Говорим Спасибо
10.04.2013, 09:11
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,032 раз(а) / Репутация: 9032
  • Отправить сообщение для eevviill с помощью Skype™
к сожалению нет,
смотря как список выстроен в мт, по какому полю сортировка, сталкивался с этим года два назад, попался на этом, тоже так думал, с тех пор если надо найти последний ордер делаю функцией перебора и проблем нет.

Может быть МТ что-то уже нахимичили переправили. Но года два назад - номер не соответствует последней сделке.

PHP код:
for(int i=OrdersTotal()-1i>=0i--)
 {
 if(
OrderSelect(iSELECT_BY_POS))
 {
 break;
 }   
 }
Alert(OrderType()); 
Скрипт выдаёт последний открытый ордер при любой сортировке ордеров.

Последний раз редактировалось eevviill; 10.04.2013 в 09:17.
10.04.2013, 09:16
Аватар для expforex
expforex expforex вне форума Программиров
Регистрация: 11.01.2009 / Сообщений: 2,136
Поблагодарили 2,103 раз(а) / Репутация: 2161
хм. ну я ж говорю раньше так нельзя было выбирать , я по старинке, свои функции использую последние года 3.
Советники на заказ! admin@expforex.com
Говорим Спасибо
Ответить

Метки
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