Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 57

 
FAQ:

а массивами не судьба воспользоватся ?

читаем список ордеров в двумерный массив, первое измерение - магик, второе профит.

делаем ArraySort() - ордера выстраиваются по магикам в порядке, начинаем суммировать и выводить.

Это круто!

И что имеем на пересечении измерений?

 

Объясняю еще раз. при прямом считывании ордеров из списка, магики будут разбросаны, то есть как минимум надо знать магики, или делать цикл внутри цикла для поиска магика во втором списке и добавления к нему профита.

после ArraySort() магики выстраиваются по порядку.Мы просто идем по массиву и суммируем второе измерение (прибыль), как только магик в первом измерении сменился - выводим текстовую переменную :

int premagic = arr[0][0];
string text = "";
for(i=0;i=ArrayRange(arr,0);i++){
   if(arr[i][0]==premagic){
       profit += arr[i][1];
   }else{
       text = text + "MagickNum :"+premagic+"  Profit :"+profit+"\n";
       profit   = arr[i][1];
       premagic = arr[i][0];
   }
}
Comment(text);
 
borilunad:
Проверьте именно недельную историю W1!

Спасибо, только историю я при установке скачиваю и проверяю специально на том периоде, где точно нет дыр - на графике свечи есть.
 
Помогите новичку! Не могу решить одну задачу.
Советник открывает до 100 ордеров ставит сл. и тп. После преодоления определенного сигнального уровня ордера модифицируются сл. и тр. У каждого ордера свой индивидуальный сигнальный уровень, сл. и тр. Сл. и тп. для последующей модификации, рассчитывается в момент открытия ордера.
Не могу придумать алгоритм. Подтолкните пожалуйста!!!
 
Как сделать так что бы советник запоминал что на конкретной свечи можно открыть не больше двух ордеров?
 
MauzerVII:
Как сделать так что бы советник запоминал что на конкретной свечи можно открыть не больше двух ордеров?


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

При открытии следующего ордера проверять время, если оно не вышло за пределы бара, то количество открытых ордеров инкрементировать.

Остальная логика вполне легко выстраивается.

 

еще вопрос :

Мы закрываем пачку ордеров, примерно штук 30 через цикл

как проверить закрыты ли все ордера или сделать цикл который будет маслать и долбить брокера пока тот не перестанет кидать реквоты ??

Я набросал первое что на ум пришло, можно ли так сделать ???

void close (int m)
{
for( int f=OrdersTotal()-1; f>=0; f--)
if ( OrderSelect(f,SELECT_BY_POS)    )
if ( OrderSymbol()==Symbol()         )
if ( OrderMagicNumber()==m           )
if (OrderType()==0)
if (OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Red)==true) continue;
else f++;
if (OrderType()==1)
if (OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red)==true) continue;
else f++;
}
 
nachalo = H;
finich = D;

if (DayOfWeek() == 1 && Hour()==H && Minute()<=00)
      {
      Opn_B = true;
      }
if(DayOfWeek() == 2 && Hour()==D && Minute()<=01)
      {                                           
      Cls_B=true;                 
      }

При тестировании советника по дням недели и часам, написал следующий код:

переменные «H», «D» вывел в:

extern int  H = 18;  
extern int  D =19;
в свойствах эксперта задаю переменным значения старт от 0 до 23, шаг 1.
Все результаты отклоняются, как незначительные. С другими советниками заданный диапазон тестирования перебирается, но с этим, что-то не получается.
Подскажите, что не правильно?
 
nachalo = H;
finich = D;

if (DayOfWeek() == 1 && Hour()==H && Minute()<=0)
      {
      Opn_B = true;
      }
if(DayOfWeek() == 2 && Hour()==D && Minute()<=1)
      {                                           
      Cls_B=true;                 
      }
 
VOLDEMAR:


Спасибо, три дня маялся в ручную считал.

Только досадно, что в оптимизации не виден процент прибыльных сделок или как-то можно его отобразить?