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

 

В торговую функцию переданы неправильные параметры, например, неправильный символ, неопознанная торговая операция, отрицательное допустимое отклонение цены, несуществующий номер тикета и т.п. Необходимо изменить логику программы.


Попробуйте второй параметр вместо нуля ставить OrderOpenPrice()

 
sergeev:

возьмите привычку при ошибке принтить все параметры, которые могут иметь отношение к ней.

if (!OrderModify(...)) { Print(GetlastError()+.... список параметров OrderModify ); }



Да, это хорошая привычка. Спасибо.)))

FOReignEXchange 03.07.2011 18:35

Попробуйте второй параметр вместо нуля ставить OrderOpenPrice()

Да, именно так. )) А я почему-то был уверен, что нельзя устанавливать параметры, которые ненужно модифицировать, так как это приведёт к другой ошибке. Есть ли что-то подобное о чём я говорю?

В голове зафиксировано что-то наподобие этого:

Функция пытается изменить параметр на такое же значение.

 
tol64:


А я почему-то был уверен, что нельзя устанавливать параметры, которые ненужно модифицировать, так как это приведёт к другой ошибке. Есть ли что-то подобное о чём я говорю?

В голове зафиксировано что-то наподобие этого:

Функция пытается изменить параметр на такое же значение.


Можно изменить всего один параметр, а остальные оставить без изменений и везде прописать типа OrderOpenPrice(), OrdsrStopLoss() и тд.
 
Здравствуйте! Есть у кого нибудь пример трала от определенного уровня цены с определенным шагом? Спасибо!
 

Ещё вот такой вопрос у меня. На примере кода,который я приводил выше (tol64 03.07.2011 18:20).

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

На рисунке выше у позиции с тикетом 4 стоп лосс должен был модифицироваться и принять значение такое же, как у позиции с тикетом 1. Программа доходит до этого места с принтом, но дальше выполнение как будто блокируется.

   for(count = 0; count < OrdersTotal(); count++)
      {  
         if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 
            Print("Ticket: ",OrderTicket(),", Type: ",OrderType(),", Magic: ",OrderMagicNumber(),", StopLoss: ",OrderStopLoss());

         double Op_Price = NormalizeDouble(OrderOpenPrice(),Digits);
         double Stp_Loss = NormalizeDouble(OrderStopLoss(),Digits);
         
         if(OrderMagicNumber() == Magic_SP01)
            {  if(OrderType() == OP_SELLSTOP)
                  {  if(Low_1 < SP_Level_01 && new_val > Op_Price && new_val < Open_0)  
                        {  OrderModify(OrderTicket(),new_val,OrderStopLoss(),0,0,DeepPink);  }

                     if(!(global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)) Print("Условие не выполняется!");  else
                        {  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);
                           Print("Условие ModifyOrder исполнилось: global_trailing_SP: ",global_trailing_SP,", Stop Loss: ",OrderStopLoss());  }
                  }
               if(OrderType() == OP_SELL)
                  {  if(global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)  
                       {  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);  }
                  }
            }

         ...

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

 

А тут

 if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 

Разве не так надо?

 if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)=true) 
 
FOReignEXchange:

А тут

Разве не так надо?


не надо. он же и так bool возвращает.
 
tol64:

Ещё вот такой вопрос у меня. На примере кода,который я приводил выше (tol64 03.07.2011 18:20).

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

На рисунке выше у позиции с тикетом 4 стоп лосс должен был модифицироваться и принять значение такое же, как у позиции с тикетом 1. Программа доходит до этого места с принтом, но дальше выполнение как будто блокируется.

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


Сделайте вывод через Print() значения переменной global_trailing_SP непосредственно в представленной вами функции.

Где вы читаете значение этой переменной?

и замените в коде ноль (выделен):

OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink)

на функцию OrderTakeProfit()

 
FOReignEXchange:

А зачем тогда это условие, если условия нету? И данные ордера потом не используются.


тогда и подскажите что лучше код

if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 

записать как:

if(!OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) continue;
 
abolk:


тогда и подскажите что лучше код

записать как:


Не понял? Я просто смотрю в справке, там OrderSelect() использует условие. А без true я не видел нигде.

if это же оператор условия. И в скобках должно быть условие. Так логичнее мне кажется. Хоть и разницы может и нету.

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