[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 525

 
Извините, представляете, в журнал не пишется паследнее дополнение
//----
   for ( i=OrdersHistoryTotal();i>0;i--){
    OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY  );
    if( OrderMagicNumber( )==2000 
    &&OrderSymbol()==Symbol()&&
    OrderTakeProfit( )==OrderClosePrice(        )&&wremjapomnim<OrderCloseTime( ) ||
   OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()
   &&OrderTakeProfit( )==OrderClosePrice(       )&&wremjapomnim<OrderCloseTime( )){
   Alert ("нашли MODE_HISTORY");
 for ( i=OrdersTotal();i>0;i--)  {
 Alert ("паследний цикл",i);
  OrderSelect(i-1,SELECT_BY_POS );
  if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
  || OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol())  { 
  Alert ("OrderTicket( )",OrderTicket( )); 
  OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse",  GetLastError( ) ); 
   OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
   Alert ("OrderClose-vse",  GetLastError( ) ); C=0; }}}}                              
   

А имено, строка Alert ("OrderTicket( )",OrderTicket( )); Что может гаварить, что паследний цикл таки ни совершаеца!!

Вот журнал Ранее, яж коды часто переписываю, я часто всречал ошибки по-моему4108 и 4050, теперь-же и ошибок нет!! Ну да,по-любому не выполняецца!

 

Ну да, стало, тут собака порылась

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

Так верно же се.. Чеж я в строке намудрил?


 
Ей-богу, низнаю, условие как условие.
 
Dimka-novitsek:

Ну да, стало, тут собака порылась

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

Так верно же се.. Чеж я в строке намудрил?


сначала выполняется ||, потом &&
 
ilunga:
только к этому моменту это может быть удаленный отложенный ордер и результат будет необычен ;)

Не понял, я ж тут не удаленые отбираю, не моде хистори. Ладно, ненадо, это патом.
 

-ААА!! Так я щас обе стороны в скобки возьму!! СПАСИБО!!!!!

Фух!!

Так, я пока в душ пашол.Жарень..

 
Dimka-novitsek:

Не понял, я ж тут не удаленые отбираю, не моде хистори. Ладно, ненадо, это патом.

Представим, что у нас есть 1 отложенный ордер, который надо удалить и мы дошли до строки (для удобства чтения разбил по операторам)

OrderDelete(OrderTicket( ));
Alert ("OrderDelete-vse",  GetLastError( ) );
OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
Alert ("OrderClose-vse",  GetLastError( ) );
 C=0;

итак, мы этот ордер:

1) удаляем, при этом:

а) нам повезло и он удалился

б) он может не удалиться, потому что цена слишком близко/сервер перегружен/просто упал инет/ и т. д. Но мы все равно продолжаем

2) если что напишем, что все плохо

3) закрываем ордер (отложенный!! который мы в первом пункте удалили!!!)

результат... я предсказывать на 100% не берусь, но видимо еще одна ошибка

4) выводим об этом сообщение

 
Dimka-novitsek:

Ну да, стало, тут собака порылась

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

Так верно же се.. Чеж я в строке намудрил?

Давайте так... Чтобы никто не застрелился и вас не заказали... :))

Начнём по порядку. Сначала найдём последнюю закрытую позицию и проверим чтобы она была закрыта по тейку:

   int j=-1;
   datetime t;
   // Поищем в цикле последнюю закрытую позицию, которая закрылась по TakeProfit
   for (int i=0; i<OrdersHistoryTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderSymbol()!=Symbol())     continue;
         if (OrderType()>1)               continue;
         if (OrderMagicNumber()==1000 || OrderMagicNumber()==2000) {
            if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
               }
            }
         }
      }
   if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
      if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point) {
         Alert("Позиция с тикетом #",OrderTicket()," закрыта по TakeProfit, закрываем остальные прозиции и удаляем отложенные ордера");
         // Здесь код для закрытия всех открытых позиций (тоже в цикле)
         // Здесь код для удаления всех отложенных ордеров (также в цикле)
         }
      }

Вот это:

// Здесь код для закрытия всех открытых позиций (тоже в цикле)
// Здесь код для удаления всех отложенных ордеров (также в цикле)

будет вашим домашним заданием... :)

 
СПАСИБО!!!!!!
 
Классно написано!!!!
Причина обращения: