Вопрос по Symbol()

 

Сегодня советник  установленный на фунте начал тралить ордер на евро хотя в функции есть проверка

      if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol() && OrderCloseTime()==0)
Магик одинаковый но почему он полез на другой график?

 vopros

 
Как жаль что Шерлок Холмс уже давно отошёл от дел, от-то уж точно решил бы эту загадку даже по одной строке кода и скриншоту журнала...
 

обычный цикл, до этого дня все работало тип топ, а тут взяло и схватило на другом символе да еще другого типа ордер

int i, k=OrdersTotal();

for (i=k-1; i>=0; i--) 
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
     {
      if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol() && OrderCloseTime()==0)
       {
        if(OrderType()==OP_BUY)
         {     
                          OpenPriceOrder  = NormalizeDouble(OrderOpenPrice(),Digits);
                         Ubitok          = NormalizeDouble(LastSeriesloss(),2);
                         Lot             = NormalizeDouble(OrderLotFun(OP_BUY),2);
          if(Lot!=0)
                         Punkti = MathAbs(Ubitok/Lot)*Point;
          else return;
 
проблема не в этом куске кода.
 
evillive:
проблема не в этом куске кода.
как не в этом, если именно в этом цикле идет модификация ордера(она ниже,не копировал), вот как цикл идет дальше если символ не совпадает и тип ордера?
 
ну так хоть приведите полный блок, а то тут кусок только, мы что, в угадайку играем?
 
При сопоставлении скрина журнала и кода, большой вопрос вызывает тот факт, что в журнале показан трал ордера Sell, но после этого выводится надпись "Тралл бай". Либо часть журнала приведена не та, либо работает не тот код, который приведен.
 
ClanVi:

Вот полная функция, вопрос остается как начался тралится другой ордер на другом символе

 

 

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

Это Ваши функции: LastSeriesloss() и OrderLotFun().

Чтобы избежать такой фигни, после OrderSelect() , но, до проверки типа ордера ( т.е., пока Ваши функции еце не вызывались), запомнить тикет ордера, а заодно и значение OrderStopLoss() (OrderOpenPrice() запоминать не надо, поскольку для ордеров в рынке значение игнорируется). И при модификации использовать запомненный тикет.

 
ClanVi:

Вот полная функция, вопрос остается как начался тралится другой ордер на другом символе

 

 

Вставьте в советник одну строчку в блок OP_BUY и аналогичную в блок OP_SELL:

      if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol() && OrderCloseTime()==0)
       {
        if(OrderType()==OP_BUY)
         {     
PrintFormat("Блок OP_BUY;; OrderMagicNumber()=%d, Magic=%d, OrderSymbol()=%s, Symbol()=%s", OrderMagicNumber(), Magic, OrderSymbol(), Symbol());

и вам будет проще разбираться. 

Кстати, операторов печати можно наставить везде, где требуется что-либо понять.

Потом закомментировать нетрудно. 

 
Scriptong:
При сопоставлении скрина журнала и кода, большой вопрос вызывает тот факт, что в журнале показан трал ордера Sell, но после этого выводится надпись "Тралл бай". Либо часть журнала приведена не та, либо работает не тот код, который приведен.

Все приведено правильно, был на фунте открыт бай, а тралила сова стоп на евробаксе где был селл, выставляя цену  стопа фунта

 

Mislaid:

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

Это Ваши функции: LastSeriesloss() и OrderLotFun().

Чтобы избежать такой фигни, после OrderSelect() , но, до проверки типа ордера ( т.е., пока Ваши функции еце не вызывались), запомнить тикет ордера, а заодно и значение OrderStopLoss() (OrderOpenPrice() запоминать не надо, поскольку для ордеров в рынке значение игнорируется). И при модификации использовать запомненный тикет.

 эти функции просто считают убыточную серию и лот соответсвенно, ничего не меняя

тикет это хорошо, только почему выполнилось условие и пошла команда ордер модифи на другом символе?

 
это был единичный случай или повторяется?
Причина обращения: