[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 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:


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

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

не за что)

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