Учет ордеров: если в 3 ордерах профит в минус - советник торгует наоборот...

 

Здравствуйте!

Подскажите, пожалуйста, как написать советнику, чтобы смотрел ордера с истории, если там будет подряд 3 ордера с профитом в минус, то открывал бы ордера наоборот то есть например не на buy, а уже на sell и еще если там будет подряд 3 ордера с профитом в минус то бы обратно переворачивал стратегию и т.д.

 
Dharma >>:

Здравствуйте!

Подскажите, пожалуйста, как написать советнику, чтобы смотрел ордера с истории, если там будет подряд 3 ордера с убыточной прибылью, то открывал бы ордера наоборот то есть например не на buy, а уже на sell и еще если там будет подряд 3 ордера с убыточной прибылью то бы открывал ордера уже не наоборот, а нормально...

используйте для первой стратегии один маджик, для обратной другой.

Перед открытием ордера проверяется история, выбираются три последних ордера.

ну и т.д. :)

 
Swan >>:

используйте для первой стратегии один маджик, для обратной другой.

Перед открытием ордера проверяется история, выбираются три последних ордера.

ну и т.д. :)

Чтобы использовался другой меджик это я в принципе уже написал мне только нужен код чтобы перед открытием проверялись три последних ордера в истории и если во всех трех профит в минус переворачивал стратегию.

 
СчётЛос внешняя переменная которая говорит сколько должно быть лосей чтоб исполнилось условие

int i=0,счёт=0;
 while(i<СчётЛос)
   {if(OrderSelect(OrdersHistoryTotal()-i,SELECT_BY_POS,MODE_HISTORY))
      {if(OrderProfit()<0)
         {счёт++;
         }
      }
    i++;    
   }
 if(счёт==СчётЛос && СчётЛос!=0) 
   {//выполняем тото и тото
   }

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

 
Urain >>:
СчётЛос внешняя переменная которая говорит сколько должно быть лосей чтоб исполнилось условие

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


Спасибо! щас попробую...

 
Dharma >>:

Чтобы использовался другой меджик это я в принципе уже написал мне только нужен код чтобы перед открытием проверялись три последних ордера в истории и если во всех трех профит в минус переворачивал стратегию.

очень приблизительно, как то так)

int cnt,i;
int ArrMagic[3];
double ArrProfit[3];
for(cnt=OrdersHistoryTotal()-1,i=0; cnt>=0,i<3; cnt--)
   {
   OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY);
   if(OrderSymbol()==Symbol())
      {
      ArrMagic[i]=OrderMagicNumber();
      ArrProfit[i]=OrderProfit();
      i++;
      }
   }
if(ArrMagic[0]==Magic1 && ArrMagic[1]==Magic1 && ArrMagic[2]==Magic1
&& ArrProfit[0]<0 && ArrProfit[1]<0 && ArrProfit[2]<0)
   {
   Стратегия1=false;
   Стратегия2=true;
   }
if(ArrMagic[0]==Magic2 && ArrMagic[1]==Magic2 && ArrMagic[2]==Magic2
&& ArrProfit[0]<0 && ArrProfit[1]<0 && ArrProfit[2]<0)
   {
   Стратегия1=true;
   Стратегия2=false;
   }

зы: поправил. int ArrMagic.

 
Swan >>:

очень приблизительно, как то так)

зы: поправил. int ArrMagic.

Спасибо!

 

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

Файлы:
 
Dharma >>:

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

bool Trade1=true;
bool Trade2=false;

должны быть глобальные переменные(вне функции start).


Чтоб работало не только в тестере, можно использовать GlobalVariableSet().

 
Swan >>:

bool Trade1=true;
bool Trade2=false;

должны быть глобальные переменные(вне функции start).


Чтоб работало не только в тестере, можно использовать GlobalVariableSet().

Спасибо! :) Сразу не подумал что надо писать эти переменные за функцию start()...

Еще заменил обычные переменные глобальными.

Файлы:
Причина обращения: