Скачать MetaTrader 5

Вопрос по Symbol()

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
ClanVi
58
ClanVi 2014.05.22 09:03 

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

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

 vopros

Vitalie Postolache
12250
Vitalie Postolache 2014.05.22 10:30  
Как жаль что Шерлок Холмс уже давно отошёл от дел, от-то уж точно решил бы эту загадку даже по одной строке кода и скриншоту журнала...
ClanVi
58
ClanVi 2014.05.22 11:06  

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

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;
Vitalie Postolache
12250
Vitalie Postolache 2014.05.22 13:44  
проблема не в этом куске кода.
ClanVi
58
ClanVi 2014.05.22 14:20  
evillive:
проблема не в этом куске кода.
как не в этом, если именно в этом цикле идет модификация ордера(она ниже,не копировал), вот как цикл идет дальше если символ не совпадает и тип ордера?
Vitalie Postolache
12250
Vitalie Postolache 2014.05.22 15:06  
ну так хоть приведите полный блок, а то тут кусок только, мы что, в угадайку играем?
Ihor Herasko
9265
Ihor Herasko 2014.05.22 16:06  
При сопоставлении скрина журнала и кода, большой вопрос вызывает тот факт, что в журнале показан трал ордера Sell, но после этого выводится надпись "Тралл бай". Либо часть журнала приведена не та, либо работает не тот код, который приведен.
Mislaid
619
Mislaid 2014.05.22 16:09  
ClanVi:

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

 

 

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

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

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

Viktor
228
Viktor 2014.05.22 16:21  
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());

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

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

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

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

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

 

Mislaid:

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

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

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

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

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

Vitalie Postolache
12250
Vitalie Postolache 2014.05.22 17:01  
это был единичный случай или повторяется?
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий