Советник не запускается на нескольких парах, нужна помощь - страница 4

 
whroeder1 2016.12.14 03:35| 74.162.37.113бан EN
Keith Watford: перебирайте открытые ордера и считайте только те сделки, которые имеют магический номер и символ графика советника.
Именно, и это не то, что делает ваш последний пост.
 
Я удалил вашу другую тему, поскольку она была той же самой темой, что и эта. Я скопировал комментарий WHRoeder и вставил его сюда, прежде чем удалить его
 
Keith Watford:
Я удалил вашу другую тему, поскольку она была той же самой темой, что и эта. Я скопировал комментарий WHRoeder и вставил его сюда перед удалением.
Ладно, это хорошо, так что для цикла, должен ли он быть оформлен аналогично тому, что есть для closeorder, и если да, то должна ли программа считать ордера вверх или вниз?
 

   int buy_count=0;
   int sell_count=0;

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())
        {
         if(OrderType()==OP_BUY)
           {
            buy_count++;
           }
         if(OrderType()==OP_SELL)
           {
            sell_count++;
           }
        }
     }

Что-то в этом роде.

Я всегда веду обратный отсчет, если у меня нет особой причины не делать этого.

 
  1. Теперь у вас есть цикл OrderSelect, который фильтрует по MN и символу.
  2. Теперь с каким MN вы открываете сделки?
 
Matt_Townsend:
Хорошо, это прекрасно. Итак, что касается цикла, должен ли он быть оформлен аналогично циклу для закрытия ордера, и если да, то должна ли программа считать ордера вверх или вниз?
Итак, теперь у меня есть функция цикла для функции закрытия ордера и функции завершения ордера, но она все еще не торгует независимо. Хотя она все еще открывает сделки и закрывает их по заданным параметрам, как я могу видеть в тестере стратегий, хотя она не будет работать на нескольких графиках в живом демо.
 
Matt_Townsend:
Итак, теперь у меня есть функция цикла как на функции закрытия ордеров, так и на функции ordersend, но он все еще не торгует самостоятельно. Хотя он все еще открывает сделки и закрывает их по заданным параметрам, как я вижу в тестере стратегий, хотя он не будет работать на нескольких графиках в живом демо.

У каждого ли советника свое магическое число?

Покажите ваши циклы, которые вы используете сейчас.

 
Keith Watford:

У каждого ли эксперта свое магическое число?

Покажите свои циклы, которые вы используете сейчас.

for(int i=OrdersTotal();i<=0;i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) break;
      if(OrderMagicNumber()==MagicNumber || OrderSymbol()==Symbol()) continue;
    //--- Check for buy order
       if(fastma > slowma)
        {
         if(OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",MagicNumber,0,Blue))
            Print("Buy order opened :", OrderOpenPrice());
         else
            Print("Order failed to open : ", GetLastError());      
         return(0);
        }
     //--- Check for sell order          
       if(fastma < slowma)
        {
         if(OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,0,"",MagicNumber,0,Red))
            Print("Order opened : ", OrderOpenPrice());                
         else
            Print("Order failed to open : ", GetLastError());
         return(0);        
        }
        break;
      }

Вот цикл ordersend

Кроме того, у меня есть MN как внешний int, поэтому я могу менять его на каждом графике, на который я помещаю советника.
 
Сначала у вас есть
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())
что правильно
Но у вас есть
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",0,0,Blue);
Что не так. И вы проигнорировали мой вопрос.


Затем вы спокойно меняете посыл на
         if(OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",MagicNumber,0,Blue))
Что теперь правильно.
Но вы спокойно прерываете цикл select.
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) break;
      if(OrderMagicNumber()==MagicNumber || OrderSymbol()==Symbol()) continue;
Что не так.

При наличии нескольких ордеров (один советник несколько графиков, несколько советников, ручная торговля)
 
whroeder1:
Сначала у вас
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())
что правильно.
Но у вас есть
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",0,0,Blue);
что не правильно.

Затем вы спокойно меняете посыл на
         if(OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",MagicNumber,0,Blue))
Что правильно
и прерываете цикл выбора.
      if(OrderMagicNumber()==MagicNumber || OrderSymbol()==Symbol()) continue;
Что не так.
Значит, я не должен иметь Continue или Break в цикле вообще?
Причина обращения: