[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 159

 
BooGUY:

todem, пробовал через if (d1!=0)

но советник всё равно открывает не там, где нужно. Вообще, должен бай менять на селл, а открывает иногда по два раза селл. Может чего-то я не дописал.


тебе не кажется что, он запаздывает ???
 
DhP:

Сократить количество проходов можно путем:

1. Увеличить шаг.

2. Сократить диапазон оптимизации параметров.

3. Уменьшить количество оптимизируемых параметров

4. Включить "Генетический алгоритм".


Вот по подробнее про Генетический алгоритм.....если можно)))

 

Ребят оцените советник....я знаю что пределов совершенства советников нет, но все же по вашему мнению прибылость советника дожна быть какой (годовая доходность)??????

За год....у меня получилось следуюее:

Максимальная просадка: 8,69% (3768$)

Прибыль: 27464.5 $ чуть более 100 процентов

Всего сделок: 142

Торговал фиксированным лотом: 1 лот

Мой первый советник...всем спс кто помогал))

 

допустим у меня есть эксперт (My_expert) и индикатор (My_indicator)

эксперт использует данные индикатора (сейчас через iCustom)

можно ли сделать так, чтобы при работе на счете эксперт при инициализации сам добавлял индикатор на график, а при деинициализации его удалял?

 

Пытаюсь написать эксперт, который бы закрывал ордер на следующий день (в любом случае). Но ордер, почему то не закрывается(( подскажите почему?

Ниже код для sell:


if (OrdersTotal()==0) {

OPENORDER ("Sell");
}
int TC = int TimeCurrent();
int OM = int OrderMagicNumber();

if (OrdersTotal()==1 && OrderType()==OP_SELL && TC-OM>86400){ // DayMove(3)<0 && DayMove(2)<0 && DayMove(3)<0 && DayMove(4)<0 && DayMove(5)>0
CLOSEORDER("Sell");
}

Это функции open/close order:

void CLOSEORDER(string ord)
{
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if (OrderSymbol()!=Symbol()||Magic!=OrderMagicNumber()) continue;
if (OrderType()==OP_BUY && ord=="Buy")
OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
if (OrderType()==OP_SELL && ord=="Sell")
OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
}
}
}
//--------------------------------------------------------------------


void OPENORDER(string ord)
{
int error;
//Magic=TimeDay(CurTime());
Magic = TimeCurrent();
if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, LOT,Ask,2,SL,TP,"EMA WMA RSI",Magic,3);
if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,LOT,Bid,2,SL,TP,"EMA WMA RSI",Magic,3);
if (error==-1) ShowERROR(error,0,0);
return;
}

 
Vovo4ka:

Ребят оцените советник....я знаю что пределов совершенства советников нет, но все же по вашему мнению прибылость советника дожна быть какой (годовая доходность)??????

За год....у меня получилось следуюее:

Максимальная просадка: 8,69% (3768$)

Прибыль: 27464.5 $ чуть более 100 процентов

Всего сделок: 142

Торговал фиксированным лотом: 1 лот

Мой первый советник...всем спс кто помогал))

Если это график на участке оптимизации, то ничего нельзя сказать о его работе в будущем. Если это график на участке где не проводилась оптимизация, то есть надежды, что он будет приносить прибыль. А истина выявится при работе на реале.
 
ILL:

...
int OM = int OrderMagicNumber();
...


Ордер должен быть предварительно выбран с помощью функции OrderSelect(), в том что у Вас приведено этого нет.
 
ilunga:

Ордер должен быть предварительно выбран с помощью функции OrderSelect(), в том что у Вас приведено этого нет.


Ура!!! Заработало=)

Большое спасибо.

 
todem:

Давай вместе сделаем его. У тебя есть какие то наработки? еще у меня есть индикатор машек, котрый показывает какое направление щас идет- надо?


Не вопрос - давай вместе. Все наработки указаны в предыдущих ссылках... Простой проверкой в цикле дело не ограничивается. Ищу варианты записи в каждой истины в массив - но с массивами не сталкивался еще.

//+-------------------------------------------------------------------------------+
// Проверка смены тренда 
bool TrendChange(int Period_MAb, int Period_MAm, int nB)
{
  double maB1=iMA(NULL, 0, Period_MAb, 0, MODE_EMA, PRICE_WEIGHTED, 1);
  double maM1=iMA(NULL, 0, Period_MAm, 0, MODE_EMA, PRICE_WEIGHTED, 1);   
  for (int i=0; i<nB; i++) 
  {
    double maB=iMA(NULL,0, Period_MAb, 0, MODE_EMA, PRICE_WEIGHTED, i);
    double maM=iMA(NULL,0, Period_MAm, 0, MODE_EMA, PRICE_WEIGHTED, i); 
     if ((maM<maB && maM1>maB1)||(maM>maB && maM1<maB1)){
//     Alert("TrendChange-true");
     return(true);
     }
  }
  return(false);   
}

Так вот - эта функция - рабочая! Кому может и пригодится!

НО! Вопрос в экономии ресурсов - т.к. у меня машина не самая сильная, а проверка идет по этой функции часто. То получается, что пересчитываем каждый тик кучу старых баров (у меня, например nB=610 ). Решение я вижу только через запись флага в массив и дальнейшей проверки всего массива и последнего бара на истину. Мож у кого есть другие варианты??? Подскажите!

 
ILL:


Ура!!! Заработало=)

Большое спасибо.

не за что)

Кто бы теперь мне ответил))

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