Помогите найти баг, пожалуйста

 

Друзья, никак не пойму, что не правильно.

 

Нужно, чтобы робот в тестере записывал в файл после каждой сделки время ее открытия, тип ордера, цену открытия, цену закрытия, Сл, ТП, а также минимум и максимум цены со времени открытия сделки до ее закрытия. Все пишется верно, но минимум и максимум фиксируются не за время сделки, а с начала тестирования, если они обновляются за время сделки, а если нет - остаются прошлые мин и макс. 

Попытка изменить ситуацию через флаг и условие (открыт ордер бай или сел && тикет ордера не равен сохраненному = новая сделка), но похоже, что флаг никогда не работает (видимо, условие не выполняется). Подскажите, почему, и что сделать, чтобы все-таки минимум и максимум считались за сделку, а не за всю историю тестирования.

double            price, Op_price, Cl_price, SL, TP;
   

bool              New_Deal=false;
int               tiket; 
int               Handle;
int               Type;

double            Minimum=1.6,                          
                  Maximum=0.6;
                                    
                        
string            File_Name="excel.csv";
{


//--------------------Блок записи статистики в файл ------------------------------------------------
   for ( int z = OrdersTotal()-1; z >= 0; z -- )
        {
        
           if (!OrderSelect( z, SELECT_BY_POS, MODE_TRADES )) continue;
     {
                if ((OrderType() == OP_BUY || OrderType() == OP_SELL )&& tiket != OrderTicket())
                {
         New_Deal=true;
         Minimum=1.6;                          
         Maximum=0.6;
                }
          }
   }
        Op_price=0.0; Cl_price=0.0; SL=0.0; TP=0.0;
        
        
  
  for ( int z = OrdersTotal()-1; z >= 0; z -- )
        {
        
           if (!OrderSelect( z, SELECT_BY_POS, MODE_TRADES )) continue;
     {
                if ( OrderType() == OP_BUY || OrderType() == OP_SELL )
                {
                        
          		if (Low[0]< Minimum)                      // Если < известного
            		Minimum = Low[0];                      // то оно и будет мин
         		if (High[0]> Maximum)                     // Если > известного
            		Maximum = High[0];                     // то оно и будет макс
            
            		tiket = OrderTicket();
             
       }     
      }
    }
     
     for ( int z = OrdersHistoryTotal()-1; z >= 0; z -- ) 
          
      if (OrderSelect(z, SELECT_BY_POS, MODE_HISTORY ))
            {
            if (New_Deal==false) continue;  
            if (tiket != OrderTicket()) continue;  
            datetime time=OrderOpenTime();
            Type=OrderType();
            Op_price=OrderOpenPrice();
            Cl_price=OrderClosePrice();
            SL=OrderStopLoss();
            TP=OrderTakeProfit();
          
         
         Handle=FileOpen("excel.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t');  // Открытие файла
         if(Handle>0)                                                   
       
                        {
                        
                           FileSeek(Handle,0,SEEK_END);
                           FileWrite(Handle, time, Type, Op_price, Cl_price, SL, TP, Minimum, Maximum);                       //Запись в файл
            		   FileClose(Handle);
            		   New_Deal=false;
         }           
    } 
 
Andrey Pototskiy:

Друзья, никак не пойму, что не правильно.

 

Нужно, чтобы робот в тестере записывал в файл после каждой сделки время ее открытия, тип ордера, цену открытия, цену закрытия, Сл, ТП, а также минимум и максимум цены со времени открытия сделки до ее закрытия. Все пишется верно, но минимум и максимум фиксируются не за время сделки, а с начала тестирования, если они обновляются за время сделки, а если нет - остаются прошлые мин и макс. 

Попытка изменить ситуацию через флаг и условие (открыт ордер бай или сел && тикет ордера не равен сохраненному = новая сделка), но похоже, что флаг никогда не работает (видимо, условие не выполняется). Подскажите, почему, и что сделать, чтобы все-таки минимум и максимум считались за сделку, а не за всю историю тестирования.

Вы из торговой истории не найдёте мин и макс свечи на ктр.был выставлен ордер. Нужно смотреть когда был выставлен ордер и поэтому времени смотреть мин и Макс конкретной свечи. И у Вас пишется цена открытия ордера и закрытия ордера, а не свечи, так и должно быть?
 
Eugeny Kotovschikov:
Вы из торговой истории не найдёте мин и макс свечи на ктр.был выставлен ордер. Нужно смотреть когда был выставлен ордер и поэтому времени смотреть мин и Макс конкретной свечи. И у Вас пишется цена открытия ордера и закрытия ордера, а не свечи, так и должно быть?

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

 
Andrey Pototskiy:

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

Ну и в чём проблема? Всего-то по 2 функции для минимума и для максимума. CopyLow() и из полученного массива ArrayMinimum() Соответственно CopyHigh() и ArrayMaximum()

Для записи такого набора информации в файл лучше использовать структуру. На каждом баре писать новый High и новый Low в структуру, а когда ордер закрылся эту структуру писать в файл.

Причина обращения: