FileWrite - помогите разобраться. - страница 2

 
Sergey Kolemanov:

1. чему равна TicKetBuy_11 ? если значение постоянное(не меняется) то проблема в этом.

2. зачем 2 раза закрывать файл ?  На результат влиять не будет.


P.S. И проверка на появление нового бара - её правильнее делать перед работой всего цикла.

TicketBuy = OrderSend.... отложке. По закрытий проверяет магик и тикет если равны, то получаю именно его данные... 
FileClose - видимо я не увидел, потому что все брал из документации... Так как работаю впервые с файлами.. 
TimeStarmp сейчас работает, и пишет тока 1 значение, но иногда бывает сбои и он может записать по 2-3 раза одно данное) Я что то не могу понять почему, хочу сделать стабильным. Закрылся ордер и записал его данные и всё... И ждать нового ордера... 
P.S если после if поставить алерт без TimeStarmp, то получается алерт в каждом тике.. 
 

Aibek Mugiynov:

for(int i=0; i<OrdersHistoryTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicB)
        {
         int      nOrderType     = OrderType();
         int      nOrderTicket   = OrderTicket();
         datetime   OrderCloseT=OrderCloseTime();
         if((nOrderType==OP_BUY && TicketBuy_11==OrderTicket()) && (OrderOpenTime()<OrderCloseT))
           {
            if(TimeStamp_b11!=Time[0]){
               double Price = OrderOpenPrice();
               int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);
               if(file_handle!=INVALID_HANDLE)
                 {
                  FileSeek(file_handle,0,SEEK_END);
                  FileWrite(file_handle,Price);
                  FileClose(file_handle);
                 }
                 
               FileClose(file_handle);
               int AlertCount=1;
               TimeStamp_b11=Time[0];
              }}}

Если тупо пройти по алгоритму, то видим такую последовательность:

Начали цикл

  1. Присвоили переменным значения свойств ордера
  2. Условие, тип ордера понятно. А дальше? Что за переменная TicketBuy_11 и зачем сравнивать время закрытия ордера с временем открытия??? Разве бывает что ордер сначала закрылся, потом открылся???
  3. Проверили время бара...
  4. Открыли файл и записали в него данные первого ордера.
  5. Закрыли файл, аж дважды, но это не страшно...
  6. Запомнили время текущего бара

Новая итерация цикла, естественно не дожидаясь нового бара и даже нового тика...



  1. Проверили время бара, а оно совпадает с только-что записанным в переменную...

И так до конца...

Новый бар и всё повторяется.

Всё это надо уметь делать самому... Тупо записывать действия компьютера построчно.

 
Alexey Viktorov:

Если тупо пройти по алгоритму, то видим такую последовательность:

Начали цикл

  1. Присвоили переменным значения свойств ордера
  2. Условие, тип ордера понятно. А дальше? Что за переменная TicketBuy_11 и зачем сравнивать время закрытия ордера с временем открытия??? Разве бывает что ордер сначала закрылся, потом открылся???
  3. Проверили время бара...
  4. Открыли файл и записали в него данные первого ордера.
  5. Закрыли файл, аж дважды, но это не страшно...
  6. Запомнили время текущего бара

Новая итерация цикла, естественно не дожидаясь нового бара и даже нового тика...



  1. Проверили время бара, а оно совпадает с только-что записанным в переменную...

И так до конца...

Новый бар и всё повторяется.

Всё это надо уметь делать самому... Тупо записывать действия компьютера построчно.


мне до этого не приходилось выполнять такую функцию... Знаю что тупо... но поэтому прошу помочь разобраться)) Скиньте пример с новой интеграцией цикла, буду благодарен!

 
Aibek Mugiynov:

мне до этого не приходилось выполнять такую функцию... Знаю что тупо... но поэтому прошу помочь разобраться)) Скиньте пример с новой интеграцией цикла, буду благодарен!

Я потратил время на то то, чтобы помочь разобраться в проблеме. А теперь ещё потратить время на написание и проверку кода? Не слишком-ли? Вам не кажется, что таким образом вы никогда не научитесь программировать или это не входит в планы на будущее?

Если будут вопросы по моим объяснениям, я здесь и готов перефразировать сказанное или уточнить что-то непонятное. И не более того. Помочь, не значит сделать за вас.

 

Тупо записывать, не значит что записывать должен тупой и ещё тупее. Значит, что записывать надо построчно только то, что выполняет конкретная строка забыв о том, что заложено в алгоритм.

 
Alexey Viktorov:

Я потратил время на то то, чтобы помочь разобраться в проблеме. А теперь ещё потратить время на написание и проверку кода? Не слишком-ли? Вам не кажется, что таким образом вы никогда не научитесь программировать или это не входит в планы на будущее?

Если будут вопросы по моим объяснениям, я здесь и готов перефразировать сказанное или уточнить что-то непонятное. И не более того. Помочь, не значит сделать за вас.


Я лишь попросил... если не хотите тратить своё ЦЕННОЕ ВРЕМЯ могли бы и не отвечать! Спасибо!!!

 
Aibek Mugiynov:
1. TicketBuy = OrderSend.... отложке. По закрытий проверяет магик и тикет если равны, то получаю именно его данные... 
2. FileClose - видимо я не увидел, потому что все брал из документации... Так как работаю впервые с файлами.. 
3. TimeStarmp сейчас работает, и пишет тока 1 значение, но иногда бывает сбои и он может записать по 2-3 раза одно данное) Я что то не могу понять почему, хочу сделать стабильным.

1. судя по вашему коду TicketBuy сравнивается с OrderTicket(), а не OrderSend, но опять же неизвестно где и как вы присваиваете значение TicketBuy. Присваивать и Сравнивать - разные вещи...

2. нигде в документации вы не найдёте таких рекомендаций, как закрывать файл два раза...

3. ЕЩЁ РАЗ : правильнее будет проверять открытие нового бара перед исполнением цикла один раз, а не как у вас сейчас идет проверка на каждой интеграции цикла.

4. Вам правильно указали что проверка OrderOpenTime() < OrderCloseTime() здесь не нужна т.к. её условие ВСЕГДА выполняется.

добавлено:

TicketBuy = OrderSend.... отложке.

Как же отложке, если в коде вы ищите закрытую Buy позицию ?

if((nOrderType==OP_BUY && TicketBuy_11==OrderTicket()) && (OrderOpenTime()<OrderCloseT))
 
Sergey Kolemanov:

1. судя по вашему коду TicketBuy сравнивается с OrderTicket(), а не OrderSend, но опять же неизвестно где и как вы присваиваете значение TicketBuy. Присваивать и Сравнивать - разные вещи...

2. нигде в документации вы не найдёте таких рекомендаций, как закрывать файл два раза...

3. ЕЩЁ РАЗ : правильнее будет проверять открытие нового бара перед исполнением цикла один раз, а не как у вас сейчас идет проверка на каждой интеграции цикла.

4. Вам правильно указали что проверка OrderOpenTime() < OrderCloseTime() здесь не нужна т.к. её условие ВСЕГДА выполняется.


Ticket всё там правильно работает, я тикет использую чтобы filewrite не записал другой ордер... пока я так нашел выход. Два раза закрывать файл этого я не увидел до этого, брал шаблоны и вставлял, видимо тогда пропустил его заметить.. 

Спасибо большое, будем исправлять) 

 

Друзья помогите разобраться с этими ошибками?

и правильно я сделал сигнал бар на открытие бара?

За рани я, большое спасибо!  

Файлы:
43.png  150 kb
Причина обращения: