Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexandr Bryzgalov
46853
Alexandr Bryzgalov  
int start()
{
   bid_=iClose(NULL,0,0);
   Trade=1;
   if(Digits==3||Digits==5)
   {
      Slippage=Slippage*10;
   }
   datetime tiB=TimeCurrent()-Timer;
   datetime tiS=TimeCurrent()-Timer;
   datetime tiClose=TimeCurrent();//-TimerCloseSecond;
   bool LockOrd=false;
   int Long=0;
   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;
         }
      }
   }
   int H=GetTickCount();
   int TimeControll=TimeCurrent();
   int TimeControll1=TimeCurrent()-900;
while(!IsStopped())
{
   if(Hour()>=23&&Hour()<1)
   {
       Sleep(1000);
       continue;
   }
   //if(AccountMargin()==0)Trade=1;
   H=GetTickCount();
   RefreshRates();
   double Digits_=MarketInfo(Symbol1,MODE_DIGITS);
   double Spred=(MarketInfo(Symbol2,MODE_SPREAD)+MarketInfo(Symbol1,MODE_SPREAD));
   double bid1_=iClose(NULL,0,0);
   int res=-1;
   if(AccountProfit()>Profit)
   {
      LockAllOrders();
      LockOrd=true;
      Trade=0;
   }
   if(Trade==1&&OrdersTotal()>0)
   {
      continue;
      Sleep(1000);
   }
   if(bid1_>bandsH&&Trade==1&&Spred<=SPRED_&&MathAbs(bid1_-bid_)<=(bandsH-bandsL)/8)
   {
      if(OrderSend(Symbol2,OP_BUY,Lot,NormalizeDouble(MarketInfo(Symbol2,MODE_ASK),Digits_),3,0,0,NULL,MAGIK)>(-1))
      {
         while(res<0&&!IsStopped())
         {
            res=OrderSend(Symbol1,OP_SELL,Lot,NormalizeDouble(MarketInfo(Symbol1,MODE_BID),Digits_),3,0,0,NULL,MAGIK);
            RefreshRates();
         }
         Trade=0;
     }
   }
   if(bid1_<bandsL&&Trade==1&&Spred<=SPRED_&&MathAbs(bid1_-bid_)<=(bandsH-bandsL)/8)
   {
      if(OrderSend(Symbol2,OP_SELL,Lot,NormalizeDouble(MarketInfo(Symbol2,MODE_BID),Digits_),3,0,0,NULL,MAGIK)>-1)
      {
         while(res<0&&!IsStopped())
         {
            res=OrderSend(Symbol1,OP_BUY,Lot,NormalizeDouble(MarketInfo(Symbol1,MODE_ASK),Digits_),3,0,0,NULL,MAGIK);
            RefreshRates();
         }
         Trade=0;
     }
   }
   if(LockOrd)
   {
      CloseLock();
      LockOrd=false;
      Trade=1;
   }
   bid_=bid1_;
   Sleep(10);
}
   return(0);
}
Левитин Сергей В.
5169
Левитин Сергей В.  
sanyooooook:

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

Слова Шнуровской песни так и лезут на ум: "Я бухаю, но могу ускорится..."

А что тут ускорять? Код простой и не "тяжелый".... Не понял короче)

Alexandr Bryzgalov
46853
Alexandr Bryzgalov  
Figar0:

Слова Шнуровской песни так и лезут на ум: "Я бухаю, но могу ускорится..."

А что тут ускорять? Код простой и не "тяжелый".... Не понял короче)


на счет ускорения да, но он не совсем оптимальный

ЗЫ: короче опять идеальную программу для идеальных условий творю )

Alexandr Bryzgalov
46853
Alexandr Bryzgalov  

давай начнем с того что ниже этой строки

while(!IsStopped())
Alexandr Bryzgalov
46853
Alexandr Bryzgalov  
   double Digits_=MarketInfo(Symbol1,MODE_DIGITS);
   double Spred=(MarketInfo(Symbol2,MODE_SPREAD)+MarketInfo(Symbol1,MODE_SPREAD));
   double bid1_=iClose(NULL,0,0);

насколько сильно инициализация тормозит?

может лучше вынести её выше цикла а в цикле оставить только присваивание?

ЗЫ: мне дороги каждые микро секунды )))

ilunga
744
ilunga  
sanyooooook:

насколько сильно инициализация тормозит?

может лучше вынести её выше цикла а в цикле оставить только присваивание?

ЗЫ: мне дороги каждые микро секунды )))

double Digits_=MarketInfo(Symbol1,MODE_DIGITS);

а как часто меняется количество цифр? может вообще вынести в init?

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

если я ничего не путаю, то sleep вообще не наступит...

Alexandr Bryzgalov
46853
Alexandr Bryzgalov  
ilunga:

а как часто меняется количество цифр? может вообще вынести в init?

если я ничего не путаю, то sleep вообще не наступит...


первое да тупость,

второе слип может наступить, если выставить руками отложенный ордер

ЗЫ: там строки напутаны ))) исправил.

ЗЫЗЫ: вот что значит: в чужом глазу соринку увидишь... )))

Комбинатор
16947
Комбинатор  
double Digits_=MarketInfo(Symbol1,MODE_DIGITS);

Можно смело выносить за цикл.

double bid1_=iClose(NULL,0,0);

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

 while(res<0&&!IsStopped())

Жесть.

Sleep(10);

Нереальная цифра. Есть подозрение, что два таких советника ядро завесят намертво.

Alexandr Bryzgalov
46853
Alexandr Bryzgalov  
TheXpert:

Жесть.


)), иначе нельзя
Alexandr Bryzgalov
46853
Alexandr Bryzgalov  
TheXpert:

Нереальная цифра. Два таких советника ядро завесят намертво.


я ещё уменьшить хотел ), слава богу у меня один работает, ставил второй были подвисания но не до повешания же )
Комбинатор
16947
Комбинатор  
sanyooooook:
)), иначе нельзя
Да пожалуйста. Не мне же траблы потом разгребать.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий