[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 87

 
sergeev:

713
borilunad 15.01.2013 12:10 

Не могли бы Вы разрешить одну загадку: Почему, когда вставил в условия эту функцию || isCloseLastPosByTake() == True ||  эксперт в тестере начал очень тормозить, в раз 10!? Это одно из 4-х взаимоисключающих условий, потому не могу употребить цепочку с if, как при суммированных условиях, для более быстрой работы кода. Что бы Вы могли мне посоветовать? Заранее благодарен Вам за совет!

В той функции идёт перебор ордеров для поиска последнего закрытого по тейку. Переработайте эту функцию для ускорения. Они у Кима все универсальные - значит от-туда можно много лишнего поубирать. Опять-таки, всё зависит от логики вашего эксперта.
 

Подскажите пожалуйста, как сделать чтобы ордера  открывались и на покупку? Условия ордера на продажу if(OrdersTotal()==0 && ma0<ma1 && ma1<ma2). Я так понимаю нужно использовать switch. Что написать вместо(x,a,b)?

if(OrdersTotal()==0)

 switch(x)         case 'a':       case'b':

Заранее спасибо! 


 
artmedia70:
В той функции идёт перебор ордеров для поиска последнего закрытого по тейку. Переработайте эту функцию для ускорения. Они у Кима все универсальные - значит от-туда можно много лишнего поубирать. Опять-таки, всё зависит от логики вашего эксперта.
Большое спасибо! А то думал, что может какой-нибудь оператор использовать, но они не перебирают случаи с "или" для одного и того же действия.
 
KoOr:

Подскажите пожалуйста, как сделать чтобы ордера  открывались и на покупку? Условия ордера на продажу if(OrdersTotal()==0 && ma0<ma1 && ma1<ma2). Я так понимаю нужно использовать switch. Что написать вместо(x,a,b)?

if(OrdersTotal()==0)

 switch(x)         case 'a':       case'b':

Заранее спасибо! 




if(OrdersTotal()==0)
 {
  if( ma0<ma1 && ma1<ma2) OrderSend(....,OP_SELL,.......);
  if( ma0>ma1 && ma1>ma2) OrderSend(....,OP_BUY,.......);
 }
Будет открываться только один ордер, не больше, либо на продажу, либо на покупку.
 

Весь день мучаюсь не могу понять почему функция возвращает -1

int typ(string t, int m)
{  datetime z=0 ; int p=-1,i;
   int d=OrdersHistoryTotal();
   if ( t=="0") t=Symbol(); 
   for( i=0;i<=d;i++){
   if ( OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) ) {                     
   if ( (OrderSymbol() == t || t=="0" ) && ( OrderMagicNumber() == m || m==-1 ) ){
   if ( OrderCloseTime()>z&&OrderType()<=1)  
   {
   z =OrderCloseTime(); 
   p =OrderType();
   }}}}
return(p);
} 

 вызов происходит так 

Comment(typ("0",-1));

 Ордера в истории есть все !

В чем может быть ошибка ??? 

 
VOLDEMAR:

Весь день мучаюсь не могу понять почему функция возвращает -1

 вызов происходит так 

 Ордера в истории есть все !

В чем может быть ошибка ??? 



Comment(typ(Symbol(),-1));
Нет такого символа "0", есть "EURUSD", "AUDUSD" и т.д.
 
Sepulca:


Нет такого символа "0", есть "EURUSD", "AUDUSD" и т.д.

Если нет такого символа   if ( t=="0") t=Symbol(); тогда делаем t равным нашему символу на который прикреплен советник ; 
 
а как так может быть, чтобы условие  if DayOfWeek( ) ==1 ... выполнялось во вторник? 
 
VOLDEMAR:

Если нет такого символа   if ( t=="0") t=Symbol(); тогда делаем t равным нашему символу на который прикреплен советник ; 

Извиняюсь, не заметил.. Тогда вот:

for( i=0;i<d;i++){

Последний порядковый номер ордера равен OrdersTotal()-1; Но не в этом дело. Попробовал, оказывается в тестере невидна история закрытых ордеров, на демосчете Ваш код работает.
 

 

у меня в коде нет того что вы написали 

у меня так

int d=OrdersHistoryTotal();

 и перебор идет сначала...

Ну это уже не важно я нашел проблему в другом месте кода .... 

Причина обращения: