Помогите ускориться и оптимизировать - страница 2

 

TheXpert:

Вместо этого лучше RefreshRates() сделать и юзать Bid



работа идет на оффлайн графике, может проще формулу синтетики задавать как бид?
 
RefreshRates() - это в основном нужно для открытия ордеров
 

sanyooooook:

   if(Trade==1&&OrdersTotal()>0)
   {
      continue;
      Sleep(1000);
   }

В этом куске кода либо continue и sleep местами поменять, либо выкинуть sleep и, соответственно, фигурные скобки.

 

sanyooooook:

   for(int i=OrdersTotal()-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS)==false)continue;
      if(OrderSymbol()==Symbol2)
      {
         if(OrderType()==OP_BUY)
         {
            Long=(-1);
         }
         if(OrderType()==OP_SELL)
         {
            Long=1;
         }
      }
   }




Я бы так писал:

   for(int i=OrdersTotal();i>0;)
   {
      i--;
      if( !OrderSelect(i,SELECT_BY_POS) )
         continue;
      if(OrderSymbol()==Symbol2)
         if(OrderType()==OP_BUY)
            Long=(-1);
         else if(OrderType()==OP_SELL)
            Long=1;
   }
 

sanyooooook:

   int TimeControll=TimeCurrent();
   int TimeControll1=TimeCurrent()-900;

лучше так:

   int TimeControll=TimeCurrent();
   int TimeControll1=TimeControll-900;
 
PapaYozh:

В этом куске кода либо continue и sleep местами поменять, либо выкинуть sleep и, соответственно, фигурные скобки.


уже поменял
 
if( !OrderSelect(i,SELECT_BY_POS) )
if(OrderSelect(i,SELECT_BY_POS)==false)continue;

если первое быстрее второго то поменяю, если нет то смысл сей замены

интересна оптимизация кода в цикле

 
for(int i=OrdersTotal()-1;i>=0;i--)
   {
      if(!(OrderSelect(i,SELECT_BY_POS)))continue;
      if(OrderSymbol()==Symbol2)
      {
         int cmd=OrderType();
         if(cmd==OP_BUY)       Long=(-1);
         else if(cmd==OP_SELL) Long=1;
      }
   }

тогда уж так

 
if(bid1_>bandsH...)
{}
if(bid1_<bandsL...)
{}

1) как понимаю оба условия сразу выполниться не могут, так что после выполнения первого второе можно не проверять

2) возможно ускорение будет, если сначала проверять общую часть условий, а уже внутри то, что отличается. Либо просто вынести 1-2 условия наружу - если они чаще дают false

 
ilunga: 1) как понимаю оба условия сразу выполниться не могут, так что после выполнения первого второе можно не проверять
Это почему же?
Причина обращения: