Ответить
25.04.2014, 17:21
Аватар для NTuner
NTuner NTuner вне форума Интересующийся
Регистрация: 04.03.2013 / Адрес: Екатеринбург / Сообщений: 27
Поблагодарили 2 раз(а) / Репутация: 3
  • Отправить сообщение для NTuner с помощью Skype™
Вопрос: возможно ли в файл CSV записать трехмерный массив?
25.04.2014, 17:43
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,950 раз(а) / Репутация: 2027
Добрый вечер, я наверное не правильно выразился, возможно ли удалять из истории закрытые ордера, допустим при каких-то условиях история по данному символу стирается, если да, то как это прописать?
История ордеров хранится на сервере. Ордера из неё удалить нельзя.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
26.04.2014, 09:02
Регистрация: 23.11.2011 / Адрес: Львов / Сообщений: 1,402
Поблагодарили 2,258 раз(а) / Репутация: 2259
  • Отправить сообщение для volodymyr67 с помощью Skype™

По умолчанию Всем приет !

Подскажите пожалоста !
Что это за ерунда и как с ней боротса ?

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

[свернуть]

Работаю на 509
С уважением Владимир!
http://forexsystems.ru/poleznye-dlya...tml#post467397

ГДЕ ЕСТЬ ЗАКОН - ТАМ НЕТ СВОБОДЫ
26.04.2014, 10:24
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,950 раз(а) / Репутация: 2027
Вопрос: возможно ли в файл CSV записать трехмерный массив?
Нельзя в файл csv записать массив. Можно писать содержимое массива последовательно ячейку за ячейкой. А уже в каком порядке ячейки писать, зависит от того как потом удобнее будет читать.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
26.04.2014, 10:42
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,950 раз(а) / Репутация: 2027
Всем доброго дня ,подскажите как вернуть время открытия открытого ордера и время закрытия предыдущего ордера, а затем сравнить это время между собой?
Для начала надо выбрать открытый ордер, например по тикету. Если тикет неизвестен, перебрать в цикле все открытые и выбрать нужный.
Потом OrderOpenTime() вернёт время открытия ордера. Присвоить это значение datetime переменной.
Дальше в цикле перебрать все закрытые ордера присваивая datetime переменной время закрытия OrderCloseTime() и сравнивать их время закрытия. Самое большое время это время закрытия последнего ордера.

Потом останется сравнить переменную в которой время открытия с переменной в которой время закрытия.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
26.04.2014, 12:08
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,024
Поблагодарили 862 раз(а) / Репутация: 848
Вроде бы(я так понял) в TimeCurrent() время в секундах с 1970 года. Можно ли тупо вычесть 300 из TimeCurrent()? чтобы узнать, что было 5 минут назад?
Типа:
PHP код:
if(OrderOpenTime() > TimeCurrent()-300) ... 
26.04.2014, 14:07
Аватар для alexshell
alexshell alexshell на форуме Элитный участник
Регистрация: 29.10.2010 / Сообщений: 669
Поблагодарили 1,681 раз(а) / Репутация: 1683
Вроде бы(я так понял) в TimeCurrent() время в секундах с 1970 года. Можно ли тупо вычесть 300 из TimeCurrent()? чтобы узнать, что было 5 минут назад?
Типа:
PHP код:
if(OrderOpenTime() > TimeCurrent()-300) ... 
Вполне можно.
26.04.2014, 14:18
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,024
Поблагодарили 862 раз(а) / Репутация: 848
Вполне можно.
Вопрос связан с настойчивостью хелпа метаэдитора по поводу формата datetime. Вроде как число секунд - 32разрядное целое, зачем мозги парить этим datetime, когда и так все работает? У меня связанные переменные объявлены int и используются для хранения секунд, например, разность Time[0] и TimeCurrent() - мне вроде как по барабану этот datetime или там какая-то подлость спрятана?
26.04.2014, 14:38
Аватар для alexshell
alexshell alexshell на форуме Элитный участник
Регистрация: 29.10.2010 / Сообщений: 669
Поблагодарили 1,681 раз(а) / Репутация: 1683
Вопрос связан с настойчивостью хелпа метаэдитора по поводу формата datetime. Вроде как число секунд - 32разрядное целое, зачем мозги парить этим datetime, когда и так все работает? У меня связанные переменные объявлены int и используются для хранения секунд, например, разность Time[0] и TimeCurrent() - мне вроде как по барабану этот datetime или там какая-то подлость спрятана?
Я все таки стараюсь datetime использовать ,чтоб компилятор предупреждения не выдавал. А так то наверно без разницы. Все таки это целое число.
27.04.2014, 08:06
Аватар для sergey1989
sergey1989 sergey1989 вне форума Интересующийся
Регистрация: 16.02.2014 / Сообщений: 31
Поблагодарили 2 раз(а) / Репутация: 3
Для начала надо выбрать открытый ордер, например по тикету. Если тикет неизвестен, перебрать в цикле все открытые и выбрать нужный.
Потом OrderOpenTime() вернёт время открытия ордера. Присвоить это значение datetime переменной.
Дальше в цикле перебрать все закрытые ордера присваивая datetime переменной время закрытия OrderCloseTime() и сравнивать их время закрытия. Самое большое время это время закрытия последнего ордера.

Потом останется сравнить переменную в которой время открытия с переменной в которой время закрытия.
Добрый день, у меня такая же проблема, все делал именно так, как вы подсказали, вместо тикета использую магик:
PHP код:
start()
(
   if(
LastCloseTime()>LastOpenTime())
  {
Выполняемое действие}
return(
0);
)
//----------
datetime LastOpenTime() 
{
   
datetime time 0;int i=0;
   for( 
OrdersTotal()-1>= 0i--)          
   {
      if(
OrderSelect(iSELECT_BY_POSMODE_TRADES)) 
      {                                       
         if(
OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
         {
            if (
OrderType()==OP_BUY)
            {
               if (
OrderOpenTime()>0
               {
                  
time=OrderOpenTime();
               }
            }
         }
      }
   }
 return(
time);
}
//-----------
datetime LastCloseTime() 
{
   
datetime time 0;int i=0;
   for( 
OrdersTotal()-1>= 0i--)          
   {
      if(
OrderSelect(iSELECT_BY_POSMODE_HISTORY)) 
      {                                       
         if(
OrderSymbol()==Symbol() && OrderMagicNumber() == Magic1)
         {
            
               if (
OrderCloseTime()>0
               {
                  
time=OrderCloseTime();
                  
               }
            
         }
      }
   }
 return(
time);

Вот такой вариант почему-то не работает, подскажите пожалуйста в чем ошибка?

Последний раз редактировалось sergey1989; 27.04.2014 в 08:08.
27.04.2014, 09:06
Аватар для alexshell
alexshell alexshell на форуме Элитный участник
Регистрация: 29.10.2010 / Сообщений: 669
Поблагодарили 1,681 раз(а) / Репутация: 1683
Добрый день, у меня такая же проблема, все делал именно так, как вы подсказали, вместо тикета использую магик:

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


PHP код:
start()
(
   if(
LastCloseTime()>LastOpenTime())
  {
Выполняемое действие}
return(
0);
)
//----------
datetime LastOpenTime() 
{
   
datetime time 0;int i=0;
   for( 
OrdersTotal()-1>= 0i--)          
   {
      if(
OrderSelect(iSELECT_BY_POSMODE_TRADES)) 
      {                                       
         if(
OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
         {
            if (
OrderType()==OP_BUY)
            {
               if (
OrderOpenTime()>0
               {
                  
time=OrderOpenTime();
               }
            }
         }
      }
   }
 return(
time);
}
//-----------
datetime LastCloseTime() 
{
   
datetime time 0;int i=0;
   for( 
OrdersTotal()-1>= 0i--)          
   {
      if(
OrderSelect(iSELECT_BY_POSMODE_HISTORY)) 
      {                                       
         if(
OrderSymbol()==Symbol() && OrderMagicNumber() == Magic1)
         {
            
               if (
OrderCloseTime()>0
               {
                  
time=OrderCloseTime();
                  
               }
            
         }
      }
   }
 return(
time);

[свернуть]

Вот такой вариант почему-то не работает, подскажите пожалуйста в чем ошибка?
Ну во первых подсказали вам не так сделать. Вы сравниваете с нулем, что не имеет смысла. Надо так :
PHP код:
if (OrderOpenTime()>time
               {
                  
time=OrderOpenTime();
               } 
И в принципе непонятно критерий выбора открытого ордера. Какой вам нужен то ли последний открытый то ли первый по времени. Или он всего у вас один.
По истории аналогично.
Во вторых использовать разные магики для проверки открытых и закрытых ордеров то же абсурд. Ведь магик открытого ордера при закрытии не меняется. Магик нужен советнику для отличия своих ордеров от чужих. Оставьте так && OrderMagicNumber() == Magic и для цикла по открытым и для цикла по закрытым ордерам. И не забудьте установить магик при открытии ордеров в функции OrderSend() Иначе опять вся эта конструкция не будет иметь смысла.

Последний раз редактировалось alexshell; 27.04.2014 в 09:27.
27.04.2014, 09:40
Аватар для sergey1989
sergey1989 sergey1989 вне форума Интересующийся
Регистрация: 16.02.2014 / Сообщений: 31
Поблагодарили 2 раз(а) / Репутация: 3
Ну во первых подсказали вам не так сделать. Вы сравниваете с нулем, что не имеет смысла. Надо так :
PHP код:
if (OrderOpenTime()>time
               {
                  
time=OrderOpenTime();
               } 
И в принципе непонятно критерий выбора открытого ордера. Какой вам нужен то ли последний открытый то ли первый по времени. Или он всего у вас один.
По истории аналогично.
Во вторых использовать разные магики для проверки открытых и закрытых ордеров то же абсурд. Ведь магик открытого ордера при закрытии не меняется. Магик нужен советнику для отличия своих ордеров от чужих. Оставьте так && OrderMagicNumber() == Magic и для цикла по открытым и для цикла по закрытым ордерам. И не забудьте установить магик при открытии ордеров в функции OrderSend() Иначе опять вся эта конструкция не будет иметь смысла.
Спасибо, сравниваю с нулем, потому что уже прописывал то что вы мне посоветовали, но результат такой же... А насчет магика, то это разные ордера, я беру последний закрытый ордер из истории и сравниваю с временем открытого с другим магиком, он у меня кстати один с таким магиком, соответственно путаницы не должно быть, но это условие все равно не срабатывает(((
27.04.2014, 09:46
Аватар для alexshell
alexshell alexshell на форуме Элитный участник
Регистрация: 29.10.2010 / Сообщений: 669
Поблагодарили 1,681 раз(а) / Репутация: 1683
Спасибо, сравниваю с нулем, потому что уже прописывал то что вы мне посоветовали, но результат такой же... А насчет магика, то это разные ордера, я беру последний закрытый ордер из истории и сравниваю с временем открытого с другим магиком, он у меня кстати один с таким магиком, соответственно путаницы не должно быть, но это условие все равно не срабатывает(((
Ну тогда попробуйте разные переменные time сделать, типа time1 и time2. Возможно они у вас путаются так как одинаковые. А вообще трудновато подсказывать когда не видишь полный код.
27.04.2014, 10:59
Аватар для sergey1989
sergey1989 sergey1989 вне форума Интересующийся
Регистрация: 16.02.2014 / Сообщений: 31
Поблагодарили 2 раз(а) / Репутация: 3
Ну тогда попробуйте разные переменные time сделать, типа time1 и time2. Возможно они у вас путаются так как одинаковые. А вообще трудновато подсказывать когда не видишь полный код.
все работает, но вот именно это условие отказывается, вот часть которая срабатывает по этому условию:
PHP код:
start()
(
   if(
LastCloseTime()>LastOpenTime())
  {
    
datetime o;
  
double   l=-1,r=0;
  
int k=OrdersHistoryTotal(),t=-1;

  for (
int i=0i<ki++) 
  {
    if (
OrderSelect(iSELECT_BY_POSMODE_HISTORY)) 
    {
      if (
OrderSymbol()==Symbol()) 
      {
        if (
OrderType()==OP_BUY || OrderType()==OP_SELL
        {
           if (
o<OrderCloseTime())
           {
              
o=OrderCloseTime();
              
l=OrderLots();
              
t=OrderType();
              
r=OrderOpenPrice();
           }  
        }
      }
    }
  }
  
  
bool exists false;
  
i=0;
  for(
i=OrdersTotal()-1i>-1i--)
  if(
OrderSelect(iSELECT_BY_POS) && OrderMagicNumber() == Magic8)
  {
    if(
OrderType()>=0)
    {
      if(
NormalizeDouble(OrderOpenPrice(), Digits) == NormalizeDouble(rDigits))
      {
        
exists  true;
        break;
      }
    }
  }
  

  
  
  if(
t==OP_BUY && !exists)// CountOrder(Magic8,OP_BUYLIMIT)==0)
  
{
     
OrderSend(Symbol(), OP_BUYLIMITlNormalizeDouble(r,Digits), Slippage00"Покупка"Magic80Green);
  }
  if(
t==OP_SELL && !exists)//CountOrder(Magic8,OP_SELLLIMIT)==0)
  
{
     
OrderSend(Symbol(), OP_SELLLIMITlNormalizeDouble(r,Digits), Slippage00"Продажа"Magic80Green);
  }
  }
return(
0);
)
//----------
datetime LastOpenTime() 
{
   
datetime time1 0;int i=0;
   for( 
OrdersTotal()-1>= 0i--)          
   {
      if(
OrderSelect(iSELECT_BY_POSMODE_TRADES)) 
      {                                       
         if(
OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
         {
            if (
OrderType()==OP_BUY)
            {
               if (
OrderOpenTime()>time1
               {
                  
time1=OrderOpenTime();
               }
            }
         }
      }
   }
 return(
time1);
}
//-----------
datetime LastCloseTime() 
{
   
datetime time 0;int i=0;
   for( 
OrdersTotal()-1>= 0i--)          
   {
      if(
OrderSelect(iSELECT_BY_POSMODE_HISTORY)) 
      {                                       
         if(
OrderSymbol()==Symbol())
         {
            
               if (
OrderCloseTime()>time
               {
                  
time=OrderCloseTime();
                  
               }
            
         }
      }
   }
 return(
time);

Сама функция работает отлично, проверял, она возвращает параметры последнего закрытого ордера и выставляет на его месте точно такой же, но проблема в том, что когда ордера закрыты по общему профиту, то эта функция все равно вытаскивает ордер из истории, хочу ограничить, поэтому и сравниваю время закрытого ордера с временем открытого, уже разные варианты опробовал, но при таком сравнении показывает всегда ложь
27.04.2014, 11:18
Аватар для zverdj
zverdj zverdj вне форума Прохожий
Регистрация: 02.09.2012 / Сообщений: 2
Поблагодарили 0 раз(а) / Репутация: 1
Народ как сделать чтобы линейный индикатор показывал зеркально как "GRAALUn"
27.04.2014, 11:36
Аватар для sergey1989
sergey1989 sergey1989 вне форума Интересующийся
Регистрация: 16.02.2014 / Сообщений: 31
Поблагодарили 2 раз(а) / Репутация: 3
переписал функцию по возврату времени закрытия ордера, проблема исправлена, спасибо за желание помочь, профита вам
PHP код:
datetime LastCloseTime()
{
  
datetime time 0;int i=0;
  for( 
i=OrdersHistoryTotal()-1i>-1i--)
  {
    if(
OrderSelect(iSELECT_BY_POSMODE_HISTORY)
       && 
OrderType()<&& OrderSymbol()==Symbol())
    {
      
time MathMax(OrderCloseTime(), time);
    }
  }
  return (
time);


Последний раз редактировалось sergey1989; 27.04.2014 в 11:53.
27.04.2014, 14:20
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Я все таки стараюсь datetime использовать ,чтоб компилятор предупреждения не выдавал. А так то наверно без разницы. Все таки это целое число.
Через 25 лет 32-разрядный счетчик секунд переполнится, и кто не спрятался, окажется опять в 1970 году.
27.04.2014, 14:54
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,024
Поблагодарили 862 раз(а) / Репутация: 848
Через 25 лет 32-разрядный счетчик секунд переполнится, и кто не спрятался, окажется опять в 1970 году.
Не через 25, а несколько раньше
А вообще, представляю трейдера, сидящего на МТ4/х86 через 25 лет... Да, тут-то он все и сольет нафиг!
30.04.2014, 13:50
Аватар для kozim
kozim kozim вне форума Новичок форума
Регистрация: 19.07.2013 / Сообщений: 13
Поблагодарили 5 раз(а) / Репутация: 6
Помогите пожалуйста исправит код
от текущей цены пример (1.3000+0.0015=1.3015 ) пропускал другому блоку
if (Ask >= PRICE_OPEN + 0.0015)
{
~next~
}
30.04.2014, 15:56
Регистрация: 05.10.2010 / Адрес: Россия / Сообщений: 1,339
Поблагодарили 9,881 раз(а) / Репутация: 9881
Прикольную штуку обнаружил в новом МТ. Ну должно же быть в нем хоть что-то лучше, чем в старом )))
Если в начало кода индикатора добавить строчку
#property icon "\\Images\\любой_файл.ico";
то при вызове свойств индикатора эта иконка будет видна на первой вкладке.
Например, добавляем в код QQE_arr от младена строку:
#property icon "\\Images\\mladen.ico";
Саму иконку кладем в папку MQL4\Images, получаем:



При компиляции иконка "вписывается" в *.ex4 навечно ))
Конечно, едитор не понимает других файлов, кроме *.ico (кто бы сомневался))) Для моментального конвертирования файлов
рекомендую мелкую полезняшку, портированную с iOs:



_http://gfile.ru/a711t

Инсталяции не требуется, как пользоваться разберется и ребенок в 5 сек ))

Эту ветку сильно не изучал, может про эту фишку уже все знают кроме меня. Тогда с уважением, ваш кэп )))

Последний раз редактировалось bot14; 30.04.2014 в 16:52.
Ответить

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


Опции темы

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

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



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


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