Друзья, никак не пойму, что не правильно.
Нужно, чтобы робот в тестере записывал в файл после каждой сделки время ее открытия, тип ордера, цену открытия, цену закрытия, Сл, ТП, а также минимум и максимум цены со времени открытия сделки до ее закрытия. Все пишется верно, но минимум и максимум фиксируются не за время сделки, а с начала тестирования, если они обновляются за время сделки, а если нет - остаются прошлые мин и макс.
Попытка изменить ситуацию через флаг и условие (открыт ордер бай или сел && тикет ордера не равен сохраненному = новая сделка), но похоже, что флаг никогда не работает (видимо, условие не выполняется). Подскажите, почему, и что сделать, чтобы все-таки минимум и максимум считались за сделку, а не за всю историю тестирования.
Вы из торговой истории не найдёте мин и макс свечи на ктр.был выставлен ордер. Нужно смотреть когда был выставлен ордер и поэтому времени смотреть мин и Макс конкретной свечи. И у Вас пишется цена открытия ордера и закрытия ордера, а не свечи, так и должно быть?
У меня мин и макс пишется не по истории, а с момента открытия сделки. И нужно мин и макс не свечи, а локальный мин и макс со времени открытия сделки до ее закрытия. Проблема в том, что у меня переписывается этот мин и макс не по каждой сделке, а только если значения обновляются. Если не обновляются исторически - сохраняются предыдущие мин или макс. А мне надо сохранять и записывать данные по каждой сделке. Не знаю, может быть надо статические переменные минимума и максимума делать, а не глобальные. Попробую, может поможет. Но что-то я в это не верю.
У меня мин и макс пишется не по истории, а с момента открытия сделки. И нужно мин и макс не свечи, а локальный мин и макс со времени открытия сделки до ее закрытия. Проблема в том, что у меня переписывается этот мин и макс не по каждой сделке, а только если значения обновляются. Если не обновляются исторически - сохраняются предыдущие мин или макс. А мне надо сохранять и записывать данные по каждой сделке. Не знаю, может быть надо статические переменные минимума и максимума делать, а не глобальные. Попробую, может поможет. Но что-то я в это не верю.
Ну и в чём проблема? Всего-то по 2 функции для минимума и для максимума. CopyLow() и из полученного массива ArrayMinimum() Соответственно CopyHigh() и ArrayMaximum()
Для записи такого набора информации в файл лучше использовать структуру. На каждом баре писать новый High и новый Low в структуру, а когда ордер закрылся эту структуру писать в файл.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Друзья, никак не пойму, что не правильно.
Нужно, чтобы робот в тестере записывал в файл после каждой сделки время ее открытия, тип ордера, цену открытия, цену закрытия, Сл, ТП, а также минимум и максимум цены со времени открытия сделки до ее закрытия. Все пишется верно, но минимум и максимум фиксируются не за время сделки, а с начала тестирования, если они обновляются за время сделки, а если нет - остаются прошлые мин и макс.
Попытка изменить ситуацию через флаг и условие (открыт ордер бай или сел && тикет ордера не равен сохраненному = новая сделка), но похоже, что флаг никогда не работает (видимо, условие не выполняется). Подскажите, почему, и что сделать, чтобы все-таки минимум и максимум считались за сделку, а не за всю историю тестирования.
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; } }